@discordeno/rest 21.0.0-next.e387f2c → 21.0.0-next.ebbb5f5

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.
@@ -1398,11 +1398,6 @@ function createRestManager(options) {
1398
1398
  reason
1399
1399
  });
1400
1400
  },
1401
- async modifyGuildIncidentActions (guildId, options) {
1402
- return await rest.put(rest.routes.guilds.incidentActions(guildId), {
1403
- body: options
1404
- });
1405
- },
1406
1401
  async unbanMember (guildId, userId, reason) {
1407
1402
  await rest.delete(rest.routes.guilds.members.ban(guildId, userId), {
1408
1403
  reason
@@ -1511,14 +1506,6 @@ function createRestManager(options) {
1511
1506
  reason
1512
1507
  });
1513
1508
  },
1514
- async listApplicationRoleConnectionsMetadataRecords (applicationId) {
1515
- return await rest.get(rest.routes.applicationRoleConnectionMetadata(applicationId));
1516
- },
1517
- async updateApplicationRoleConnectionsMetadataRecords (applicationId, options) {
1518
- return await rest.put(rest.routes.applicationRoleConnectionMetadata(applicationId), {
1519
- body: options
1520
- });
1521
- },
1522
1509
  preferSnakeCase (enabled) {
1523
1510
  const camelizer = enabled ? (x)=>x : _utils.camelize;
1524
1511
  rest.get = async (url, options)=>{
@@ -1549,4 +1536,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1549
1536
  return HttpResponseCode;
1550
1537
  }(HttpResponseCode || {});
1551
1538
 
1552
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkQXVkaXRMb2csXG4gIHR5cGUgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgdHlwZSBEaXNjb3JkQmFuLFxuICB0eXBlIERpc2NvcmRCdWxrQmFuLFxuICB0eXBlIERpc2NvcmRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRDb25uZWN0aW9uLFxuICB0eXBlIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgdHlwZSBEaXNjb3JkRW1vamksXG4gIHR5cGUgRGlzY29yZEVudGl0bGVtZW50LFxuICB0eXBlIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIHR5cGUgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIHR5cGUgRGlzY29yZEd1aWxkLFxuICB0eXBlIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICB0eXBlIERpc2NvcmRHdWlsZE9uYm9hcmRpbmcsXG4gIHR5cGUgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3MsXG4gIHR5cGUgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIHR5cGUgRGlzY29yZEludGVncmF0aW9uLFxuICB0eXBlIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEludml0ZSxcbiAgdHlwZSBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIHR5cGUgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICB0eXBlIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICB0eXBlIERpc2NvcmRNZW1iZXIsXG4gIHR5cGUgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICB0eXBlIERpc2NvcmRNZXNzYWdlLFxuICB0eXBlIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgdHlwZSBEaXNjb3JkUm9sZSxcbiAgdHlwZSBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIHR5cGUgRGlzY29yZFNrdSxcbiAgdHlwZSBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICB0eXBlIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICB0eXBlIERpc2NvcmRTdGlja2VyLFxuICB0eXBlIERpc2NvcmRTdGlja2VyUGFjayxcbiAgdHlwZSBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRWb2ljZVN0YXRlLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMsXG4gIHR5cGUgTWZhTGV2ZWxzLFxuICB0eXBlIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHtcbiAgRElTQ09SREVOT19WRVJTSU9OLFxuICBjYWxjdWxhdGVCaXRzLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBjYW1lbGl6ZSxcbiAgZGVsYXksXG4gIGdldEJvdElkRnJvbVRva2VuLFxuICBsb2dnZXIsXG4gIHByb2Nlc3NSZWFjdGlvblN0cmluZyxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXI6IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb25IZWFkZXIgPz8gJ2F1dGhvcml6YXRpb24nLFxuICAgIGJhc2VVcmwsXG4gICAgZGVsZXRlUXVldWVEZWxheTogNjAwMDAsXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoeyBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyIH0pLFxuICAgIGlzUHJveGllZDogIWJhc2VVcmwuc3RhcnRzV2l0aChESVNDT1JEX0FQSV9VUkwpLFxuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ6IG9wdGlvbnMucHJveHk/LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gRElTQ09SRF9BUElfVkVSU0lPTixcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN1bWUgdGhlIHJlc3BvbnNlIGJvZHkgdG8gYXZvaWQgbGVha2luZyBtZW1vcnlcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpXG4gICAgICBlcnJvci5tZXNzYWdlID0gJ0ZhaWxlZCB0byBzZW5kIHJlcXVlc3QgdG8gZGlzY29yZC4nXG5cbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpID09PSAnYXBwbGljYXRpb24vanNvbicgPyBhd2FpdCByZXN1bHQuanNvbigpIDogYXdhaXQgcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICAgIGVycm9yLmNhdXNlID0ge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSByZWFzb25cbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1blRocm91Z2hRdWV1ZTogb3B0aW9ucz8ucnVuVGhyb3VnaFF1ZXVlLFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZERtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUNoYW5uZWwoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUFwcGxpY2F0aW9uRW1vamkoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGQoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5hbGwoKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGJvZHksIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUodGVtcGxhdGVDb2RlLCBib2R5KSB7XG4gICAgICBpZiAoYm9keS5pY29uKSB7XG4gICAgICAgIGJvZHkuaWNvbiA9IGF3YWl0IHVybFRvQmFzZTY0KGJvZHkuaWNvbilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIG9wdGlvbnMuZmlsZS5ibG9iLCBvcHRpb25zLmZpbGUubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCduYW1lJywgb3B0aW9ucy5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ2Rlc2NyaXB0aW9uJywgb3B0aW9ucy5kZXNjcmlwdGlvbilcbiAgICAgIGZvcm0uYXBwZW5kKCd0YWdzJywgb3B0aW9ucy50YWdzKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCksIHsgYm9keTogZm9ybSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvcnVtKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBib2R5ID0ge30sIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkSW52aXRlPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVJvbGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU3RhZ2VJbnN0YW5jZShib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUVtb2ppKGd1aWxkSWQsIGlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUFwcGxpY2F0aW9uRW1vamkoaWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuICAgICAgY29uc3QgYmFubmVyID0gb3B0aW9ucz8uYm90QmFubmVyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QmFubmVyVVJMKSA6IG9wdGlvbnM/LmJvdEJhbm5lclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWU/LnRyaW0oKSxcbiAgICAgICAgICBhdmF0YXIsXG4gICAgICAgICAgYmFubmVyLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uRW1vamkoaWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkTWZhTGV2ZWwoZ3VpbGRJZDogQmlnU3RyaW5nLCBtZmFMZXZlbDogTWZhTGV2ZWxzLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5ndWlsZHMubWZhKGd1aWxkSWQpLCB7IGJvZHk6IHsgbGV2ZWw6IG1mYUxldmVsIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIGJvZHk6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5vcmlnaW5hbCh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdHlwZTogSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLlVwZGF0ZU1lc3NhZ2UsXG4gICAgICAgICAgZGF0YTogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkSW5jaWRlbnRzRGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmluY2lkZW50QWN0aW9ucyhndWlsZElkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJBVURJVF9MT0dfUkVBU09OX0hFQURFUiIsIkRJU0NPUkRfQVBJX1VSTCIsIkRJU0NPUkRfQVBJX1ZFUlNJT04iLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiIsIlJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJ0b2tlbiIsImJhc2VVcmwiLCJwcm94eSIsInJlc3QiLCJhdXRob3JpemF0aW9uIiwiYXV0aG9yaXphdGlvbkhlYWRlciIsImRlbGV0ZVF1ZXVlRGVsYXkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwiaW52YWxpZEJ1Y2tldCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwibG9nZ2VyIiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwicm91dGVzIiwiY3JlYXRlUm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImNhbGN1bGF0ZUJpdHMiLCJkZWZhdWx0X21lbWJlcl9wZXJtaXNzaW9ucyIsIm5hbWVfbG9jYWxpemF0aW9ucyIsImRlc2NyaXB0aW9uX2xvY2FsaXphdGlvbnMiLCJjYW1lbFRvU25ha2VDYXNlIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJkZWJ1ZyIsInJlc3BvbnNlIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwidGV4dCIsImFycmF5QnVmZmVyIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlF1ZXVlIiwibWVzc2FnZSIsInJlc3VsdCIsImpzb24iLCJjYXVzZSIsIlByb21pc2UiLCJkYXRhIiwicGFyc2UiLCJjYW1lbGl6ZSIsInBvc3QiLCJwYXRjaCIsInB1dCIsImFkZFJlYWN0aW9uIiwiY2hhbm5lbElkIiwibWVzc2FnZUlkIiwicmVhY3Rpb24iLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJjaGFubmVscyIsInJlYWN0aW9ucyIsImJvdCIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhbGwiLCJhZGRSb2xlIiwiZ3VpbGRJZCIsInVzZXJJZCIsInJvbGVJZCIsImd1aWxkcyIsInJvbGVzIiwibWVtYmVyIiwiYWRkVGhyZWFkTWVtYmVyIiwidGhyZWFkcyIsInVzZXIiLCJhZGREbVJlY2lwaWVudCIsImRtUmVjaXBpZW50IiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJhdXRvbW9kIiwicnVsZXMiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJlbW9qaXMiLCJjcmVhdGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaXMiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJyZXN0T3B0aW9ucyIsImJlYXJlclRva2VuIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwidXJsVG9CYXNlNjQiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwicnVsZUlkIiwicnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJjaGFubmVsIiwiZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZSIsIm92ZXJ3cml0ZUlkIiwib3ZlcndyaXRlIiwiZGVsZXRlRW1vamkiLCJpZCIsImVtb2ppIiwiZGVsZXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJyZXNwb25zZXMiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjb21tYW5kSWQiLCJjb21tYW5kIiwiZGVsZXRlR3VpbGQiLCJndWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwib25lIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwic3RpY2tlcklkIiwic3RpY2tlciIsImRlbGV0ZUd1aWxkVGVtcGxhdGUiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJtZmEiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsInZvaWNlIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImVkaXRTY2hlZHVsZWRFdmVudCIsImVkaXRSb2xlIiwiZWRpdFJvbGVQb3NpdGlvbnMiLCJlZGl0U3RhZ2VJbnN0YW5jZSIsInRvcGljIiwiZWRpdFVzZXJWb2ljZVN0YXRlIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwid2VsY29tZSIsImVkaXRXaWRnZXRTZXR0aW5ncyIsIndpZGdldCIsImV4ZWN1dGVXZWJob29rIiwiZm9sbG93QW5ub3VuY2VtZW50Iiwic291cmNlQ2hhbm5lbElkIiwidGFyZ2V0Q2hhbm5lbElkIiwiZm9sbG93Iiwid2ViaG9va0NoYW5uZWxJZCIsImdldEFjdGl2ZVRocmVhZHMiLCJhY3RpdmUiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiYWNjZXNzVG9rZW4iLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsImdldEFwcGxpY2F0aW9uSW5mbyIsIm9hdXRoMiIsImFwcGxpY2F0aW9uIiwiZWRpdEFwcGxpY2F0aW9uSW5mbyIsImdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8iLCJjdXJyZW50QXV0aG9yaXphdGlvbiIsImV4Y2hhbmdlVG9rZW4iLCJjbGllbnRJZCIsImNsaWVudFNlY3JldCIsImJhc2ljQ3JlZGVudGlhbHMiLCJCdWZmZXIiLCJmcm9tIiwiZ3JhbnRUeXBlIiwic2NvcGUiLCJ0b2tlbkV4Y2hhbmdlIiwicmV2b2tlVG9rZW4iLCJ0b2tlblJldm9rZSIsImdldEF1ZGl0TG9nIiwiYXVkaXRsb2dzIiwiZ2V0QXV0b21vZFJ1bGUiLCJnZXRBdXRvbW9kUnVsZXMiLCJnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMiLCJyZWdpb25zIiwiZ2V0QmFuIiwibWVtYmVycyIsImJhbiIsImdldEJhbnMiLCJiYW5zIiwiZ2V0Q2hhbm5lbCIsImdldENoYW5uZWxJbnZpdGVzIiwiZ2V0Q2hhbm5lbHMiLCJnZXRDaGFubmVsV2ViaG9va3MiLCJnZXREbUNoYW5uZWwiLCJkbSIsInJlY2lwaWVudElkIiwiZ2V0R3JvdXBEbUNoYW5uZWwiLCJnZXRFbW9qaSIsImVtb2ppSWQiLCJnZXRBcHBsaWNhdGlvbkVtb2ppIiwiZ2V0RW1vamlzIiwiZ2V0QXBwbGljYXRpb25FbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkcyIsIm1ha2VSZXF1ZXN0T3B0aW9ucyIsInVzZXJHdWlsZHMiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkUHJldmlldyIsInByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiaW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldFN0aWNrZXJQYWNrIiwic3RpY2tlclBhY2tJZCIsInN0aWNrZXJQYWNrIiwiZ2V0U3RpY2tlclBhY2tzIiwic3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRSb2xlIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0VXNlciIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJwYXJhbXMiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJwaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJwcmVmZXJTbmFrZUNhc2UiLCJlbmFibGVkIiwiY2FtZWxpemVyIiwieCIsIkh0dHBSZXNwb25zZUNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0lBOEVhQSx1QkFBdUI7ZUFBdkJBOztJQUZBQyxlQUFlO2VBQWZBOztJQURBQyxtQkFBbUI7ZUFBbkJBOztJQU9B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
1539
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEF1ZGl0TG9nLFxuICB0eXBlIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIHR5cGUgRGlzY29yZEJhbixcbiAgdHlwZSBEaXNjb3JkQnVsa0JhbixcbiAgdHlwZSBEaXNjb3JkQ2hhbm5lbCxcbiAgdHlwZSBEaXNjb3JkQ29ubmVjdGlvbixcbiAgdHlwZSBEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24sXG4gIHR5cGUgRGlzY29yZEVtb2ppLFxuICB0eXBlIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgdHlwZSBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICB0eXBlIERpc2NvcmRHdWlsZCxcbiAgdHlwZSBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICB0eXBlIERpc2NvcmRHdWlsZFByZXZpZXcsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICB0eXBlIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICB0eXBlIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgdHlwZSBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRJbnZpdGUsXG4gIHR5cGUgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICB0eXBlIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgdHlwZSBEaXNjb3JkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRNZW1iZXJXaXRoVXNlcixcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZSxcbiAgdHlwZSBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIHR5cGUgRGlzY29yZFJvbGUsXG4gIHR5cGUgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICB0eXBlIERpc2NvcmRTa3UsXG4gIHR5cGUgRGlzY29yZFNvdW5kYm9hcmRTb3VuZCxcbiAgdHlwZSBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgdHlwZSBEaXNjb3JkU3RpY2tlcixcbiAgdHlwZSBEaXNjb3JkU3RpY2tlclBhY2ssXG4gIHR5cGUgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgdHlwZSBEaXNjb3JkVGVtcGxhdGUsXG4gIHR5cGUgRGlzY29yZFRocmVhZE1lbWJlcixcbiAgdHlwZSBEaXNjb3JkVXNlcixcbiAgdHlwZSBEaXNjb3JkVmFuaXR5VXJsLFxuICB0eXBlIERpc2NvcmRWb2ljZVJlZ2lvbixcbiAgdHlwZSBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgdHlwZSBEaXNjb3JkV2ViaG9vayxcbiAgdHlwZSBEaXNjb3JkV2VsY29tZVNjcmVlbixcbiAgSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLFxuICB0eXBlIE1mYUxldmVscyxcbiAgdHlwZSBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25zdW1lIHRoZSByZXNwb25zZSBib2R5IHRvIGF2b2lkIGxlYWtpbmcgbWVtb3J5XG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKClcblxuICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgaWYgKG9wdGlvbnMucmV0cnlDb3VudCA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuICAgICAgZXJyb3IubWVzc2FnZSA9ICdGYWlsZWQgdG8gc2VuZCByZXF1ZXN0IHRvIGRpc2NvcmQuJ1xuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IGF3YWl0IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICByZXF1ZXN0VG9TcGVha1RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgICAgPyBuZXcgRGF0ZShvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZVBvc2l0aW9ucyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgdG9waWMsIHJlYXNvbj86IHN0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgYm9keTogeyB0b3BpYyB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGZvbGxvd0Fubm91bmNlbWVudChzb3VyY2VDaGFubmVsSWQsIHRhcmdldENoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB3ZWJob29rQ2hhbm5lbElkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFjdGl2ZVRocmVhZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hY3RpdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24oZ3VpbGRJZCwgY29tbWFuZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogT21pdDxNYWtlUmVxdWVzdE9wdGlvbnMsICdib2R5Jz4gPSB7fVxuXG4gICAgICBpZiAob3B0aW9ucz8uYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmFjY2Vzc1Rva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMob3B0aW9ucz8uYXBwbGljYXRpb25JZCA/PyByZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkluZm8oYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbigpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuY3VycmVudEF1dGhvcml6YXRpb24oKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4Y2hhbmdlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH1cblxuICAgICAgaWYgKGJvZHkuZ3JhbnRUeXBlID09PSAnY2xpZW50X2NyZWRlbnRpYWxzJykge1xuICAgICAgICByZXN0T3B0aW9ucy5ib2R5LnNjb3BlID0gYm9keS5zY29wZS5qb2luKCcgJylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZT4ocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuRXhjaGFuZ2UoKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHJldm9rZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlblJldm9rZSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keTogeyByZWNpcGllbnRJZDogdXNlcklkIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHcm91cERtQ2hhbm5lbChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamkoZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkRW1vamlbXSB9PihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2F0ZXdheUJvdCgpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0R2F0ZXdheUJvdD4ocmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMgPSB7IGNvdW50czogdHJ1ZSB9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCwgb3B0aW9ucy5jb3VudHMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZHModG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IG1ha2VSZXF1ZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zIHwgdW5kZWZpbmVkID0gdG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxQYXJ0aWFsPERpc2NvcmRHdWlsZD5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnVzZXJHdWlsZHMob3B0aW9ucyksIG1ha2VSZXF1ZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2s+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrKHN0aWNrZXJQYWNrSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFja3MoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrW10+KHJlc3Qucm91dGVzLnN0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50VXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PEFycmF5PHsgdXNlcjogRGlzY29yZFVzZXI7IG1lbWJlcj86IERpc2NvcmRNZW1iZXIgfT4+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMudXNlcnMoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNlc3Npb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0R2F0ZXdheUJvdCgpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE93blZvaWNlU3RhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVN0YXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcih0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckNvbm5lY3Rpb25zKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENvbm5lY3Rpb25bXT4ocmVzdC5yb3V0ZXMub2F1dGgyLmNvbm5lY3Rpb25zKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VmFuaXR5VXJsKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVmFuaXR5VXJsPihyZXN0LnJvdXRlcy5ndWlsZHMudmFuaXR5KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWb2ljZVJlZ2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMucmVnaW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9vayh3ZWJob29rSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZURtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx2b2lkIHwgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiwgcGFyYW1zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBmaWxlczogb3B0aW9ucy5kYXRhPy5maWxlcyxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZShjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UG9sbEFuc3dlclZvdGVycyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR2V0QW5zd2VyVm90ZXNSZXNwb25zZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMudm90ZXMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW5kUG9sbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucG9sbHMuZXhwaXJlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQ8dm9pZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGJ1bGtCYW5NZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQnVsa0Jhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYnVsa0JhbihndWlsZElkKSwgeyBib2R5OiBvcHRpb25zLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRNZW1iZXIoZ3VpbGRJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmN1cnJlbnRNZW1iZXIoZ3VpbGRJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQWN0aXZpdHlJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBraWNrTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRHdWlsZE1lbWJlcihndWlsZElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnRbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5jb25zdW1lRW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTa3VzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2t1W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5za3VzKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb25bXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbj4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kU291bmRib2FyZFNvdW5kKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuc2VuZFNvdW5kKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kW10+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQubGlzdERlZmF1bHQoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdIH0+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU291bmRib2FyZFNvdW5kPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJsb2dnZXIiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsImRlbGF5IiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwiUXVldWUiLCJtZXNzYWdlIiwicmVzdWx0IiwianNvbiIsImNhdXNlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImNhbWVsaXplIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ1cmxUb0Jhc2U2NCIsInRlbXBsYXRlcyIsImNvZGUiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2UiLCJ0eXBlIiwiSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzIiwiVXBkYXRlTWVzc2FnZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rQ2hhbm5lbElkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsIkJ1ZmZlciIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50SWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2siLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBpbiIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJxdWVyeSIsInNlYXJjaCIsImdldEd1aWxkT25ib2FyZGluZyIsIm9uYm9hcmRpbmciLCJlZGl0R3VpbGRPbmJvYXJkaW5nIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQTRFYUEsdUJBQXVCO2VBQXZCQTs7SUFGQUMsZUFBZTtlQUFmQTs7SUFEQUMsbUJBQW1CO2VBQW5CQTs7SUFPQUMsd0JBQXdCO2VBQXhCQTs7SUFEQUMsd0JBQXdC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