@discordeno/rest 21.0.0-next.bcd8d4d → 21.0.0-next.c4f2fc2

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.
@@ -1,5 +1,4 @@
1
1
  import { Buffer } from 'node:buffer';
2
- import { InteractionResponseTypes } from '@discordeno/types';
3
2
  import { DISCORDENO_VERSION, calculateBits, camelToSnakeCase, camelize, delay, getBotIdFromToken, hasProperty, logger, processReactionString, urlToBase64 } from '@discordeno/utils';
4
3
  import { createInvalidRequestBucket } from './invalidBucket.js';
5
4
  import { Queue } from './queue.js';
@@ -410,7 +409,7 @@ export function createRestManager(options) {
410
409
  }
411
410
  const result = await fetch(`${rest.baseUrl}/v${rest.version}${route}`, rest.createRequestBody(method, options));
412
411
  if (!result.ok) {
413
- const body = (result.headers.get('Content-Type') === 'application/json' ? await result.json() : await result.text()).catch(()=>null);
412
+ const body = await (result.headers.get('Content-Type') === 'application/json' ? result.json() : result.text()).catch(()=>null);
414
413
  error.cause = {
415
414
  ok: false,
416
415
  status: result.status,
@@ -739,7 +738,9 @@ export function createRestManager(options) {
739
738
  });
740
739
  },
741
740
  async deleteWebhookMessage (webhookId, token, messageId, options) {
742
- await rest.delete(rest.routes.webhooks.message(webhookId, token, messageId, options));
741
+ await rest.delete(rest.routes.webhooks.message(webhookId, token, messageId, options), {
742
+ unauthorized: true
743
+ });
743
744
  },
744
745
  async deleteWebhookWithToken (webhookId, token) {
745
746
  await rest.delete(rest.routes.webhooks.webhook(webhookId, token), {
@@ -852,16 +853,7 @@ export function createRestManager(options) {
852
853
  async editOriginalInteractionResponse (token, body) {
853
854
  return await rest.patch(rest.routes.interactions.responses.original(rest.applicationId, token), {
854
855
  body,
855
- files: body.files
856
- });
857
- },
858
- async editOriginalWebhookMessage (webhookId, token, options) {
859
- return await rest.patch(rest.routes.webhooks.original(webhookId, token, options), {
860
- body: {
861
- type: InteractionResponseTypes.UpdateMessage,
862
- data: options
863
- },
864
- files: options.files,
856
+ files: body.files,
865
857
  unauthorized: true
866
858
  });
867
859
  },
@@ -1511,6 +1503,55 @@ export function createRestManager(options) {
1511
1503
  body: options
1512
1504
  });
1513
1505
  },
1506
+ async createLobby (options) {
1507
+ return await rest.post(rest.routes.lobby.create(), {
1508
+ body: options
1509
+ });
1510
+ },
1511
+ async getLobby (lobbyId) {
1512
+ return await rest.get(rest.routes.lobby.lobby(lobbyId));
1513
+ },
1514
+ async modifyLobby (lobbyId, options) {
1515
+ return await rest.patch(rest.routes.lobby.lobby(lobbyId), {
1516
+ body: options
1517
+ });
1518
+ },
1519
+ async deleteLobby (lobbyId) {
1520
+ return await rest.delete(rest.routes.lobby.lobby(lobbyId));
1521
+ },
1522
+ async addMemberToLobby (lobbyId, userId, options) {
1523
+ return await rest.put(rest.routes.lobby.member(lobbyId, userId), {
1524
+ body: options
1525
+ });
1526
+ },
1527
+ async removeMemberFromLobby (lobbyId, userId) {
1528
+ return await rest.delete(rest.routes.lobby.member(lobbyId, userId));
1529
+ },
1530
+ async leaveLobby (lobbyId, bearerToken) {
1531
+ return await rest.delete(rest.routes.lobby.leave(lobbyId), {
1532
+ headers: {
1533
+ authorization: `Bearer ${bearerToken}`
1534
+ },
1535
+ unauthorized: true
1536
+ });
1537
+ },
1538
+ async linkChannelToLobby (lobbyId, bearerToken, options) {
1539
+ return await rest.patch(rest.routes.lobby.link(lobbyId), {
1540
+ body: options,
1541
+ headers: {
1542
+ authorization: `Bearer ${bearerToken}`
1543
+ },
1544
+ unauthorized: true
1545
+ });
1546
+ },
1547
+ async unlinkChannelToLobby (lobbyId, bearerToken) {
1548
+ return await rest.patch(rest.routes.lobby.link(lobbyId), {
1549
+ headers: {
1550
+ authorization: `Bearer ${bearerToken}`
1551
+ },
1552
+ unauthorized: true
1553
+ });
1554
+ },
1514
1555
  preferSnakeCase (enabled) {
1515
1556
  const camelizer = enabled ? (x)=>x : camelize;
1516
1557
  rest.get = async (url, options)=>{
@@ -1541,4 +1582,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1541
1582
  return HttpResponseCode;
1542
1583
  }(HttpResponseCode || {});
1543
1584
 
1544
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHtcbiAgdHlwZSBCaWdTdHJpbmcsXG4gIHR5cGUgQ2FtZWxpemUsXG4gIHR5cGUgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uLFxuICB0eXBlIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIHR5cGUgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSxcbiAgdHlwZSBEaXNjb3JkQXVkaXRMb2csXG4gIHR5cGUgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgdHlwZSBEaXNjb3JkQmFuLFxuICB0eXBlIERpc2NvcmRCdWxrQmFuLFxuICB0eXBlIERpc2NvcmRDaGFubmVsLFxuICB0eXBlIERpc2NvcmRDb25uZWN0aW9uLFxuICB0eXBlIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgdHlwZSBEaXNjb3JkRW1vamksXG4gIHR5cGUgRGlzY29yZEVudGl0bGVtZW50LFxuICB0eXBlIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIHR5cGUgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEdldEdhdGV3YXlCb3QsXG4gIHR5cGUgRGlzY29yZEd1aWxkLFxuICB0eXBlIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICB0eXBlIERpc2NvcmRHdWlsZE9uYm9hcmRpbmcsXG4gIHR5cGUgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgdHlwZSBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIHR5cGUgRGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3MsXG4gIHR5cGUgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIHR5cGUgRGlzY29yZEludGVncmF0aW9uLFxuICB0eXBlIERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZEludml0ZSxcbiAgdHlwZSBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIHR5cGUgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICB0eXBlIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICB0eXBlIERpc2NvcmRNZW1iZXIsXG4gIHR5cGUgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICB0eXBlIERpc2NvcmRNZXNzYWdlLFxuICB0eXBlIERpc2NvcmRQcnVuZWRDb3VudCxcbiAgdHlwZSBEaXNjb3JkUm9sZSxcbiAgdHlwZSBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIHR5cGUgRGlzY29yZFNrdSxcbiAgdHlwZSBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICB0eXBlIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICB0eXBlIERpc2NvcmRTdGlja2VyLFxuICB0eXBlIERpc2NvcmRTdGlja2VyUGFjayxcbiAgdHlwZSBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICB0eXBlIERpc2NvcmRUZW1wbGF0ZSxcbiAgdHlwZSBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICB0eXBlIERpc2NvcmRVc2VyLFxuICB0eXBlIERpc2NvcmRWYW5pdHlVcmwsXG4gIHR5cGUgRGlzY29yZFZvaWNlUmVnaW9uLFxuICB0eXBlIERpc2NvcmRWb2ljZVN0YXRlLFxuICB0eXBlIERpc2NvcmRXZWJob29rLFxuICB0eXBlIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMsXG4gIHR5cGUgTWZhTGV2ZWxzLFxuICB0eXBlIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHtcbiAgRElTQ09SREVOT19WRVJTSU9OLFxuICBjYWxjdWxhdGVCaXRzLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBjYW1lbGl6ZSxcbiAgZGVsYXksXG4gIGdldEJvdElkRnJvbVRva2VuLFxuICBoYXNQcm9wZXJ0eSxcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgPT09ICdhcHBsaWNhdGlvbi9qc29uJyA/ICgoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBvYmplY3QpIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpXG5cbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsIGJvZHkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN1bWUgdGhlIHJlc3BvbnNlIGJvZHkgdG8gYXZvaWQgbGVha2luZyBtZW1vcnlcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IGF3YWl0IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzICE9PSAyMDQgPyBhd2FpdCByZXN1bHQuanNvbigpIDogdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgcmVxdWVzdEJvZHlPcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyAocGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZWplY3Q6IChyZWFzb24pID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvclRleHQ6IHN0cmluZ1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHJlYXNvbi5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgY2FzZSA0MDA6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgb3B0aW9ucyB3YXMgaW1wcm9wZXJseSBmb3JtYXR0ZWQsIG9yIHRoZSBzZXJ2ZXIgY291bGRuJ3QgdW5kZXJzdGFuZCBpdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAxOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgd2FzIG1pc3Npbmcgb3IgaW52YWxpZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIHRva2VuIHlvdSBwYXNzZWQgZGlkIG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gdGhlIHJlc291cmNlLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSByZXNvdXJjZSBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGRvZXNuJ3QgZXhpc3QuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwNTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEhUVFAgbWV0aG9kIHVzZWQgaXMgbm90IHZhbGlkIGZvciB0aGUgbG9jYXRpb24gc3BlY2lmaWVkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQyOTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIllvdSdyZSBiZWluZyByYXRlbGltaXRlZC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNTAyOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGVyZSB3YXMgbm90IGEgZ2F0ZXdheSBhdmFpbGFibGUgdG8gcHJvY2VzcyB5b3VyIG9wdGlvbnMuIFdhaXQgYSBiaXQgYW5kIHJldHJ5LidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IHJlYXNvbi5zdGF0dXNUZXh0ID8/ICdVbmtub3duIGVycm9yJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5tZXNzYWdlID0gYFske3JlYXNvbi5zdGF0dXN9XSAke2Vycm9yVGV4dH1gXG5cbiAgICAgICAgICAgIC8vIElmIGRpc2NvcmQgc2VudCB1cyBKU09OLCBpdCBpcyBwcm9iYWJseSBnb2luZyB0byBiZSBhbiBlcnJvciBtZXNzYWdlIGZyb20gd2hpY2ggd2UgY2FuIGdldCBhbmQgYWRkIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlLCB0aGUgZnVsbCBib2R5IHdpbGwgYmUgaW4gdGhlIGVycm9yLmNhdXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZWZlcmVuY2UjZXJyb3ItbWVzc2FnZXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVhc29uLmJvZHkgPT09ICdvYmplY3QnICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnY29kZScpICYmIGhhc1Byb3BlcnR5KHJlYXNvbi5ib2R5LCAnbWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgKz0gYFxcbkRpc2NvcmQgZXJyb3I6IFske3JlYXNvbi5ib2R5LmNvZGV9XSAke3JlYXNvbi5ib2R5Lm1lc3NhZ2V9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvci5jYXVzZSA9IHJlYXNvblxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUsIGJvZHkpIHtcbiAgICAgIGlmIChib2R5Lmljb24pIHtcbiAgICAgICAgYm9keS5pY29uID0gYXdhaXQgdXJsVG9CYXNlNjQoYm9keS5pY29uKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2VzKGNoYW5uZWxJZCwgbWVzc2FnZUlkcywgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBtZXNzYWdlczogbWVzc2FnZUlkcy5zbGljZSgwLCAxMDApLm1hcCgoaWQpID0+IGlkLnRvU3RyaW5nKCkpLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zRW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLnVzZXIoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rKHdlYmhvb2tJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBwZXJtaXNzaW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgcGVybWlzc2lvbnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG4gICAgICBjb25zdCBiYW5uZXIgPSBvcHRpb25zPy5ib3RCYW5uZXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RCYW5uZXJVUkwpIDogb3B0aW9ucz8uYm90QmFubmVyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy5jdXJyZW50VXNlcigpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB1c2VybmFtZTogb3B0aW9ucy51c2VybmFtZT8udHJpbSgpLFxuICAgICAgICAgIGF2YXRhcixcbiAgICAgICAgICBiYW5uZXIsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5vdmVyd3JpdGUoY2hhbm5lbElkLCBib2R5LmlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0RW1vamkoZ3VpbGRJZCwgaWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25FbW9qaShpZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgYm9keTogeyBsZXZlbDogbWZhTGV2ZWwgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgYm9keTogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICB0eXBlOiBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMuVXBkYXRlTWVzc2FnZSxcbiAgICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICBmaWxlczogb3B0aW9ucy5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgcmVxdWVzdFRvU3BlYWtUaW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHRvcGljLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IGJvZHk6IHsgdG9waWMgfSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9vayh3ZWJob29rSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRm9sbG93ZWRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb2xsb3coc291cmNlQ2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgd2ViaG9va0NoYW5uZWxJZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICByZXN0T3B0aW9ucyxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE9taXQ8TWFrZVJlcXVlc3RPcHRpb25zLCAnYm9keSc+ID0ge31cblxuICAgICAgaWYgKG9wdGlvbnM/LmFjY2Vzc1Rva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5hY2Nlc3NUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKG9wdGlvbnM/LmFwcGxpY2F0aW9uSWQgPz8gcmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5hcHBsaWNhdGlvbigpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25JbmZvKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb24oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLmN1cnJlbnRBdXRob3JpemF0aW9uKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBleGNoYW5nZVRva2VuKGNsaWVudElkLCBjbGllbnRTZWNyZXQsIGJvZHkpIHtcbiAgICAgIGNvbnN0IGJhc2ljQ3JlZGVudGlhbHMgPSBCdWZmZXIuZnJvbShgJHtjbGllbnRJZH06JHtjbGllbnRTZWNyZXR9YClcblxuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIGlmIChib2R5LmdyYW50VHlwZSA9PT0gJ2NsaWVudF9jcmVkZW50aWFscycpIHtcbiAgICAgICAgcmVzdE9wdGlvbnMuYm9keS5zY29wZSA9IGJvZHkuc2NvcGUuam9pbignICcpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2U+KHJlc3Qucm91dGVzLm9hdXRoMi50b2tlbkV4Y2hhbmdlKCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyByZXZva2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5SZXZva2UoKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCYXNpYyAke2Jhc2ljQ3JlZGVudGlhbHMudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIGJvZHk6IHsgcmVjaXBpZW50SWQ6IHVzZXJJZCB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3JvdXBEbUNoYW5uZWwoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamkoZ3VpbGRJZCwgZW1vamlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkVtb2ppKGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaXMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8eyBpdGVtczogRGlzY29yZEVtb2ppW10gfT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRzKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBtYWtlUmVxdWVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyB8IHVuZGVmaW5lZCA9IHRva2VuXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8UGFydGlhbDxEaXNjb3JkR3VpbGQ+W10+KHJlc3Qucm91dGVzLmd1aWxkcy51c2VyR3VpbGRzKG9wdGlvbnMpLCBtYWtlUmVxdWVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJQYWNrPihyZXN0LnJvdXRlcy5zdGlja2VyUGFjayhzdGlja2VyUGFja0lkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5zdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlKGd1aWxkSWQsIHJvbGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyVm9pY2VTdGF0ZShndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VTdGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXIoc3RpY2tlcklkOiBCaWdTdHJpbmcpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuc3RpY2tlcihzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcj4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5nZXRVc2VyKGNoYW5uZWxJZCwgdXNlcklkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VGhyZWFkTWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVtYmVycyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlcihpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJDb25uZWN0aW9ucyh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDb25uZWN0aW9uW10+KHJlc3Qucm91dGVzLm9hdXRoMi5jb25uZWN0aW9ucygpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubGVhdmUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVEbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kRm9sbG93dXBNZXNzYWdlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2socmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8dm9pZCB8IERpc2NvcmRJbnRlcmFjdGlvbkNhbGxiYWNrUmVzcG9uc2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4sIHBhcmFtcyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgZmlsZXM6IG9wdGlvbnMuZGF0YT8uZmlsZXMsXG4gICAgICAgIHJ1blRocm91Z2hRdWV1ZTogZmFsc2UsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWxsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBvbGxBbnN3ZXJWb3RlcnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGFuc3dlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLnZvdGVzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGVuZFBvbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBvbGxzLmV4cGlyZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHN5bmNHdWlsZFRlbXBsYXRlKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBiYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0PHZvaWQ+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBidWxrQmFuTWVtYmVycyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEJ1bGtCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJ1bGtCYW4oZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RNZW1iZXIoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDdXJyZW50TWVtYmVyKGd1aWxkSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5jdXJyZW50TWVtYmVyKGd1aWxkSWQpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFjdGl2aXR5SW5zdGFuY2U+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZShhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkT25ib2FyZGluZyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkT25ib2FyZGluZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm9uYm9hcmRpbmcoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRJbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRJbmNpZGVudHNEYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5iYW5NZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkJ1ZmZlciIsIkludGVyYWN0aW9uUmVzcG9uc2VUeXBlcyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNhbGN1bGF0ZUJpdHMiLCJjYW1lbFRvU25ha2VDYXNlIiwiY2FtZWxpemUiLCJkZWxheSIsImdldEJvdElkRnJvbVRva2VuIiwiaGFzUHJvcGVydHkiLCJsb2dnZXIiLCJwcm9jZXNzUmVhY3Rpb25TdHJpbmciLCJ1cmxUb0Jhc2U2NCIsImNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IiwiUXVldWUiLCJjcmVhdGVSb3V0ZXMiLCJESVNDT1JEX0FQSV9WRVJTSU9OIiwiRElTQ09SRF9BUElfVVJMIiwiQVVESVRfTE9HX1JFQVNPTl9IRUFERVIiLCJSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIiLCJSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9TQ09QRV9IRUFERVIiLCJjcmVhdGVSZXN0TWFuYWdlciIsIm9wdGlvbnMiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwidG9rZW4iLCJiYXNlVXJsIiwicHJveHkiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJpc1Byb3hpZWQiLCJzdGFydHNXaXRoIiwidXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCIsIm1heFJldHJ5Q291bnQiLCJJbmZpbml0eSIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMiLCJuYW1lX2xvY2FsaXphdGlvbnMiLCJkZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zIiwidG9TdHJpbmciLCJjcmVhdGVSZXF1ZXN0Qm9keSIsInVuYXV0aG9yaXplZCIsInJlYXNvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiaSIsImxlbmd0aCIsImFwcGVuZCIsImJsb2IiLCJuYW1lIiwiZm9ybUJvZHkiLCJkaXNjb3JkQm9keSIsInByb3AiLCJwdXNoIiwiam9pbiIsImFzc2lnbiIsInByb2Nlc3NSYXRlTGltaXRlZFBhdGhzIiwic2l6ZSIsInNldFRpbWVvdXQiLCJwcm9jZXNzSGVhZGVycyIsInJhdGVMaW1pdGVkIiwicmVtYWluaW5nIiwicmV0cnlBZnRlciIsInJlc2V0IiwiTnVtYmVyIiwibGltaXQiLCJoYW5kbGVDb21wbGV0ZWRSZXF1ZXN0IiwiaW50ZXJ2YWwiLCJtYXgiLCJnbG9iYWxSZXNldCIsInNlbmRSZXF1ZXN0Iiwicm91dGUiLCJwYXlsb2FkIiwicmVxdWVzdEJvZHlPcHRpb25zIiwibG9nZ2luZ0hlYWRlcnMiLCJhdXRob3JpemF0aW9uU2NoZW1lIiwic3BsaXQiLCJkZWJ1ZyIsInJlc3BvbnNlIiwiY2F0Y2giLCJlcnJvciIsInJlamVjdCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwianNvbiIsInRleHQiLCJhcnJheUJ1ZmZlciIsInJldHJ5Q291bnQiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwicmVzb2x2ZSIsInBhcnRzIiwic2Vjb25kTGFzdFBhcnQiLCJzcGxpY2UiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJydW5UaHJvdWdoUXVldWUiLCJxdWV1ZUlkZW50aWZpZXIiLCJtYWtlUmVxdWVzdCIsImJ1Y2tldFF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImNvZGUiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsImNoYW5uZWxJZCIsIm1lc3NhZ2VJZCIsInJlYWN0aW9uIiwiY2hhbm5lbHMiLCJyZWFjdGlvbnMiLCJib3QiLCJhZGRSZWFjdGlvbnMiLCJvcmRlcmVkIiwiYWxsIiwiYWRkUm9sZSIsImd1aWxkSWQiLCJ1c2VySWQiLCJyb2xlSWQiLCJndWlsZHMiLCJyb2xlcyIsIm1lbWJlciIsImFkZFRocmVhZE1lbWJlciIsInRocmVhZHMiLCJ1c2VyIiwiYWRkRG1SZWNpcGllbnQiLCJkbVJlY2lwaWVudCIsImNyZWF0ZUF1dG9tb2RSdWxlIiwiYXV0b21vZCIsInJ1bGVzIiwiY3JlYXRlQ2hhbm5lbCIsImNyZWF0ZUVtb2ppIiwiZW1vamlzIiwiY3JlYXRlQXBwbGljYXRpb25FbW9qaSIsImFwcGxpY2F0aW9uRW1vamlzIiwiY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwicmVzdE9wdGlvbnMiLCJiZWFyZXJUb2tlbiIsImludGVyYWN0aW9ucyIsImNvbW1hbmRzIiwiY3JlYXRlR3VpbGQiLCJjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiaWNvbiIsInRlbXBsYXRlcyIsImNyZWF0ZUd1aWxkU3RpY2tlciIsImZpbGUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJzdGlja2VycyIsImNyZWF0ZUd1aWxkVGVtcGxhdGUiLCJjcmVhdGVGb3J1bVRocmVhZCIsImZvcnVtIiwiY3JlYXRlSW52aXRlIiwiaW52aXRlcyIsImNyZWF0ZVJvbGUiLCJjcmVhdGVTY2hlZHVsZWRFdmVudCIsImV2ZW50cyIsImNyZWF0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZXMiLCJjcmVhdGVXZWJob29rIiwid2ViaG9va3MiLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsInJ1bGVJZCIsInJ1bGUiLCJkZWxldGVDaGFubmVsIiwiY2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJvdmVyd3JpdGVJZCIsIm92ZXJ3cml0ZSIsImRlbGV0ZUVtb2ppIiwiaWQiLCJlbW9qaSIsImRlbGV0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppIiwiZGVsZXRlRm9sbG93dXBNZXNzYWdlIiwicmVzcG9uc2VzIiwiZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiY29tbWFuZElkIiwiY29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZ3VpbGQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJpbnZpdGVDb2RlIiwiaW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsImJ1bGsiLCJtZXNzYWdlcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwib3JpZ2luYWwiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRJZCIsImV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlIiwiZGVsZXRlVXNlclJlYWN0aW9uIiwiZGVsZXRlV2ViaG9vayIsIndlYmhvb2tJZCIsImRlbGV0ZVdlYmhvb2tNZXNzYWdlIiwiZGVsZXRlV2ViaG9va1dpdGhUb2tlbiIsIndlYmhvb2siLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsInBlcm1pc3Npb24iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsImJhbm5lciIsImJvdEJhbm5lclVSTCIsImN1cnJlbnRVc2VyIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImVkaXRFbW9qaSIsImVkaXRBcHBsaWNhdGlvbkVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibWZhIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxNQUFNLFFBQVEsY0FBYTtBQUNwQyxTQXNERUMsd0JBQXdCLFFBR25CLG9CQUFtQjtBQUMxQixTQUNFQyxrQkFBa0IsRUFDbEJDLGFBQWEsRUFDYkMsZ0JBQWdCLEVBQ2hCQyxRQUFRLEVBQ1JDLEtBQUssRUFDTEMsaUJBQWlCLEVBQ2pCQyxXQUFXLEVBQ1hDLE1BQU0sRUFDTkMscUJBQXFCLEVBQ3JCQyxXQUFXLFFBQ04sb0JBQW1CO0FBQzFCLFNBQVNDLDBCQUEwQixRQUFRLHFCQUFvQjtBQUMvRCxTQUFTQyxLQUFLLFFBQVEsYUFBWTtBQUNsQyxTQUFTQyxZQUFZLFFBQVEsY0FBYTtBQUcxQyxPQUFPLE1BQU1DLHNCQUFzQixHQUFFO0FBQ3JDLE9BQU8sTUFBTUMsa0JBQWtCLDBCQUF5QjtBQUV4RCxPQUFPLE1BQU1DLDBCQUEwQixxQkFBb0I7QUFDM0QsT0FBTyxNQUFNQyw4QkFBOEIsd0JBQXVCO0FBQ2xFLE9BQU8sTUFBTUMsZ0NBQWdDLDBCQUF5QjtBQUN0RSxPQUFPLE1BQU1DLDJCQUEyQixxQkFBb0I7QUFDNUQsT0FBTyxNQUFNQywyQkFBMkIscUJBQW9CO0FBQzVELE9BQU8sTUFBTUMsMEJBQTBCLG9CQUFtQjtBQUMxRCxPQUFPLE1BQU1DLDBCQUEwQixvQkFBbUI7QUFFMUQsT0FBTyxTQUFTQyxrQkFBa0JDLE9BQWlDO0lBQ2pFLE1BQU1DLGdCQUFnQkQsUUFBUUMsYUFBYSxHQUFHQyxPQUFPRixRQUFRQyxhQUFhLElBQUluQixrQkFBa0JrQixRQUFRRyxLQUFLO0lBRTdHLE1BQU1DLFVBQVVKLFFBQVFLLEtBQUssRUFBRUQsV0FBV2I7SUFFMUMsTUFBTWUsT0FBb0I7UUFDeEJMO1FBQ0FNLGVBQWVQLFFBQVFLLEtBQUssRUFBRUU7UUFDOUJDLHFCQUFxQlIsUUFBUUssS0FB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
1585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHR5cGUge1xuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBEaXNjb3JkQWNjZXNzVG9rZW5SZXNwb25zZSxcbiAgRGlzY29yZEFjdGl2aXR5SW5zdGFuY2UsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEsXG4gIERpc2NvcmRBdWRpdExvZyxcbiAgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZSxcbiAgRGlzY29yZEJhbixcbiAgRGlzY29yZEJ1bGtCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkQ29ubmVjdGlvbixcbiAgRGlzY29yZEN1cnJlbnRBdXRob3JpemF0aW9uLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRFbnRpdGxlbWVudCxcbiAgRGlzY29yZEZvbGxvd2VkQ2hhbm5lbCxcbiAgRGlzY29yZEdldEFuc3dlclZvdGVzUmVzcG9uc2UsXG4gIERpc2NvcmRHZXRHYXRld2F5Qm90LFxuICBEaXNjb3JkR3VpbGQsXG4gIERpc2NvcmRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkR3VpbGRPbmJvYXJkaW5nLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW5jaWRlbnRzRGF0YSxcbiAgRGlzY29yZEludGVncmF0aW9uLFxuICBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlLFxuICBEaXNjb3JkSW52aXRlLFxuICBEaXNjb3JkSW52aXRlTWV0YWRhdGEsXG4gIERpc2NvcmRMaXN0QWN0aXZlVGhyZWFkcyxcbiAgRGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHMsXG4gIERpc2NvcmRMb2JieSxcbiAgRGlzY29yZExvYmJ5TWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyLFxuICBEaXNjb3JkTWVtYmVyV2l0aFVzZXIsXG4gIERpc2NvcmRNZXNzYWdlLFxuICBEaXNjb3JkUHJ1bmVkQ291bnQsXG4gIERpc2NvcmRSb2xlLFxuICBEaXNjb3JkU2NoZWR1bGVkRXZlbnQsXG4gIERpc2NvcmRTa3UsXG4gIERpc2NvcmRTb3VuZGJvYXJkU291bmQsXG4gIERpc2NvcmRTdGFnZUluc3RhbmNlLFxuICBEaXNjb3JkU3RpY2tlcixcbiAgRGlzY29yZFN0aWNrZXJQYWNrLFxuICBEaXNjb3JkU3Vic2NyaXB0aW9uLFxuICBEaXNjb3JkVGVtcGxhdGUsXG4gIERpc2NvcmRUaHJlYWRNZW1iZXIsXG4gIERpc2NvcmRVc2VyLFxuICBEaXNjb3JkVmFuaXR5VXJsLFxuICBEaXNjb3JkVm9pY2VSZWdpb24sXG4gIERpc2NvcmRWb2ljZVN0YXRlLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIE1mYUxldmVscyxcbiAgTW9kaWZ5R3VpbGRUZW1wbGF0ZSxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnXG5pbXBvcnQge1xuICBESVNDT1JERU5PX1ZFUlNJT04sXG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsVG9TbmFrZUNhc2UsXG4gIGNhbWVsaXplLFxuICBkZWxheSxcbiAgZ2V0Qm90SWRGcm9tVG9rZW4sXG4gIGhhc1Byb3BlcnR5LFxuICBsb2dnZXIsXG4gIHByb2Nlc3NSZWFjdGlvblN0cmluZyxcbiAgdXJsVG9CYXNlNjQsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gJy4vcXVldWUuanMnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXMgfSBmcm9tICcuL3JvdXRlcy5qcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMsIE1ha2VSZXF1ZXN0T3B0aW9ucywgUmVzdE1hbmFnZXIsIFNlbmRSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9WRVJTSU9OID0gMTBcbmV4cG9ydCBjb25zdCBESVNDT1JEX0FQSV9VUkwgPSAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknXG5cbmV4cG9ydCBjb25zdCBBVURJVF9MT0dfUkVBU09OX0hFQURFUiA9ICd4LWF1ZGl0LWxvZy1yZWFzb24nXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZydcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZXNldC1hZnRlcidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIgPSAneC1yYXRlbGltaXQtZ2xvYmFsJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1idWNrZXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9MSU1JVF9IRUFERVIgPSAneC1yYXRlbGltaXQtbGltaXQnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9TQ09QRV9IRUFERVIgPSAneC1yYXRlbGltaXQtc2NvcGUnXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZXN0TWFuYWdlcihvcHRpb25zOiBDcmVhdGVSZXN0TWFuYWdlck9wdGlvbnMpOiBSZXN0TWFuYWdlciB7XG4gIGNvbnN0IGFwcGxpY2F0aW9uSWQgPSBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pXG5cbiAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMucHJveHk/LmJhc2VVcmwgPz8gRElTQ09SRF9BUElfVVJMXG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXI6IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb25IZWFkZXIgPz8gJ2F1dGhvcml6YXRpb24nLFxuICAgIGJhc2VVcmwsXG4gICAgZGVsZXRlUXVldWVEZWxheTogNjAwMDAsXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoeyBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyIH0pLFxuICAgIGlzUHJveGllZDogIWJhc2VVcmwuc3RhcnRzV2l0aChESVNDT1JEX0FQSV9VUkwpLFxuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ6IG9wdGlvbnMucHJveHk/LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gRElTQ09SRF9BUElfVkVSU0lPTixcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gKChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIG9iamVjdCkgOiBhd2FpdCByZXNwb25zZS50ZXh0KClcblxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uc3VtZSB0aGUgcmVzcG9uc2UgYm9keSB0byBhdm9pZCBsZWFraW5nIG1lbW9yeVxuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpXG5cbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpID09PSAnYXBwbGljYXRpb24vanNvbicgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICAgIGVycm9yLmNhdXNlID0ge1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nXG5cbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSBvcHRpb25zIHdhcyBpbXByb3Blcmx5IGZvcm1hdHRlZCwgb3IgdGhlIHNlcnZlciBjb3VsZG4ndCB1bmRlcnN0YW5kIGl0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gdG9rZW4geW91IHBhc3NlZCBkaWQgbm90IGhhdmUgcGVybWlzc2lvbiB0byB0aGUgcmVzb3VyY2UuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIHJlc291cmNlIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgZG9lc24ndCBleGlzdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiWW91J3JlIGJlaW5nIHJhdGVsaW1pdGVkLlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA1MDI6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZXJlIHdhcyBub3QgYSBnYXRld2F5IGF2YWlsYWJsZSB0byBwcm9jZXNzIHlvdXIgb3B0aW9ucy4gV2FpdCBhIGJpdCBhbmQgcmV0cnkuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgWyR7cmVhc29uLnN0YXR1c31dICR7ZXJyb3JUZXh0fWBcblxuICAgICAgICAgICAgLy8gSWYgZGlzY29yZCBzZW50IHVzIEpTT04sIGl0IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB3aGljaCB3ZSBjYW4gZ2V0IGFuZCBhZGQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBmdWxsIGJvZHkgd2lsbCBiZSBpbiB0aGUgZXJyb3IuY2F1c2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3JlZmVyZW5jZSNlcnJvci1tZXNzYWdlc1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWFzb24uYm9keSA9PT0gJ29iamVjdCcgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdjb2RlJykgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdtZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgXFxuRGlzY29yZCBlcnJvcjogWyR7cmVhc29uLmJvZHkuY29kZX1dICR7cmVhc29uLmJvZHkubWVzc2FnZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gcmVhc29uXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydW5UaHJvdWdoUXVldWU6IG9wdGlvbnM/LnJ1blRocm91Z2hRdWV1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2g8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHB1dDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGREbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXV0b21vZFJ1bGUoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamlzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBcHBsaWNhdGlvbkVtb2ppKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgYm9keSkge1xuICAgICAgaWYgKGJvZHkuaWNvbikge1xuICAgICAgICBib2R5Lmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChib2R5Lmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJ1bmVNZW1iZXJzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZE9uYm9hcmRpbmcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRHdWlsZE9uYm9hcmRpbmc+KHJlc3Qucm91dGVzLmd1aWxkcy5vbmJvYXJkaW5nKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkSW5jaWRlbnRzRGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmluY2lkZW50QWN0aW9ucyhndWlsZElkKSwgeyBib2R5OiBvcHRpb25zIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMudHlwaW5nKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24odG9rZW4sIGFwcGxpY2F0aW9uSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyLnJvbGVDb25uZWN0aW9ucyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZEd1aWxkTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVUZXN0RW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RFbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRFbnRpdGxlbWVudFtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnRzKGFwcGxpY2F0aW9uSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50PihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uZW50aXRsZW1lbnQoYXBwbGljYXRpb25JZCwgZW50aXRsZW1lbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmNvbnN1bWVFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFNrdXMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTa3VbXT4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLnNrdXMoYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RTdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN1YnNjcmlwdGlvbltdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9ucyhza3VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN1YnNjcmlwdGlvbihza3VJZCwgc3Vic2NyaXB0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRTb3VuZGJvYXJkU291bmQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuc291bmRib2FyZC5zZW5kU291bmQoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmRbXT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5saXN0RGVmYXVsdCgpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDx7IGl0ZW1zOiBEaXNjb3JkU291bmRib2FyZFNvdW5kW10gfT4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZHMoZ3VpbGRJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQoZ3VpbGRJZCwgc291bmRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTb3VuZGJvYXJkU291bmQ+KHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmQoZ3VpbGRJZCwgc291bmRJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzKGFwcGxpY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YShhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVMb2JieShvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkuY3JlYXRlKCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldExvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlMb2JieShsb2JieUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxvYmJ5KGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVMb2JieShsb2JieUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZE1lbWJlclRvTG9iYnkobG9iYnlJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZExvYmJ5TWVtYmVyPihyZXN0LnJvdXRlcy5sb2JieS5tZW1iZXIobG9iYnlJZCwgdXNlcklkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlTWVtYmVyRnJvbUxvYmJ5KGxvYmJ5SWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZUxvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubGVhdmUobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVubGlua0NoYW5uZWxUb0xvYmJ5KGxvYmJ5SWQsIGJlYXJlclRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTG9iYnk+KHJlc3Qucm91dGVzLmxvYmJ5LmxpbmsobG9iYnlJZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBwcmVmZXJTbmFrZUNhc2UoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgY29uc3QgY2FtZWxpemVyID0gZW5hYmxlZCA/ICh4OiBhbnkpID0+IHggOiBjYW1lbGl6ZVxuXG4gICAgICByZXN0LmdldCA9IGFzeW5jICh1cmwsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBvc3QgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QuZGVsZXRlID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnREVMRVRFJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wYXRjaCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQQVRDSCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucHV0ID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN0XG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG5cbmVudW0gSHR0cFJlc3BvbnNlQ29kZSB7XG4gIC8qKiBNaW5pbXVtIHZhbHVlIG9mIGEgY29kZSBpbiBvZGVyIHRvIGNvbnNpZGVyIHRoYXQgaXQgd2FzIHN1Y2Nlc3NmdWwuICovXG4gIFN1Y2Nlc3MgPSAyMDAsXG4gIC8qKiBSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGJ1dCBEaXNjb3JkIHJldHVybmVkIGFuIGVtcHR5IGJvZHkuICovXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9yZGVyIHRvIGNvbnNpZGVyIHRoYXQgc29tZXRoaW5nIHdlbnQgd3JvbmcuICovXG4gIEVycm9yID0gNDAwLFxuICAvKiogVGhpcyByZXF1ZXN0IGdvdCByYXRlIGxpbWl0ZWQuICovXG4gIFRvb01hbnlSZXF1ZXN0cyA9IDQyOSxcbn1cbiJdLCJuYW1lcyI6WyJCdWZmZXIiLCJESVNDT1JERU5PX1ZFUlNJT04iLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxUb1NuYWtlQ2FzZSIsImNhbWVsaXplIiwiZGVsYXkiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImhhc1Byb3BlcnR5IiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUm91dGVzIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIkRJU0NPUkRfQVBJX1VSTCIsIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX0dMT0JBTF9IRUFERVIiLCJSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIiLCJSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiIsIlJBVEVfTElNSVRfU0NPUEVfSEVBREVSIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwicmVzdCIsImF1dGhvcml6YXRpb24iLCJhdXRob3JpemF0aW9uSGVhZGVyIiwiZGVsZXRlUXVldWVEZWxheSIsImdsb2JhbGx5UmF0ZUxpbWl0ZWQiLCJpbnZhbGlkQnVja2V0IiwiaXNQcm94aWVkIiwic3RhcnRzV2l0aCIsInVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJ2ZXJzaW9uIiwicm91dGVzIiwiY3JlYXRlQmFzZUhlYWRlcnMiLCJjaGVja1JhdGVMaW1pdHMiLCJ1cmwiLCJpZGVudGlmaWVyIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJEYXRlIiwicmVzZXRUaW1lc3RhbXAiLCJ1cGRhdGVUb2tlblF1ZXVlcyIsIm9sZFRva2VuIiwibmV3VG9rZW4iLCJFcnJvciIsImhlYWRlcnMiLCJ1bmRlZmluZWQiLCJmZXRjaCIsIm1ldGhvZCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibmV3SWRlbnRpZmllciIsImtleSIsInF1ZXVlIiwiZW50cmllcyIsImRlbGV0ZSIsIm5ld0tleSIsIm5ld1F1ZXVlIiwid2FpdGluZyIsInVuc2hpZnQiLCJwZW5kaW5nIiwiY2xlYW51cCIsInNldCIsInJhdGVsaW1pdFBhdGgiLCJidWNrZXRJZCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJPYmplY3QiLCJrZXlzIiwidmFsdWUiLCJpbmNsdWRlcyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsInRvU3RyaW5nIiwiY3JlYXRlUmVxdWVzdEJvZHkiLCJ1bmF1dGhvcml6ZWQiLCJyZWFzb24iLCJlbmNvZGVVUklDb21wb25lbnQiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImkiLCJsZW5ndGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImZvcm1Cb2R5IiwiZGlzY29yZEJvZHkiLCJwcm9wIiwicHVzaCIsImpvaW4iLCJhc3NpZ24iLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImxpbWl0IiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInJvdXRlIiwicGF5bG9hZCIsInJlcXVlc3RCb2R5T3B0aW9ucyIsImxvZ2dpbmdIZWFkZXJzIiwiYXV0aG9yaXphdGlvblNjaGVtZSIsInNwbGl0IiwiZGVidWciLCJyZXNwb25zZSIsImNhdGNoIiwiZXJyb3IiLCJyZWplY3QiLCJvayIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsImpzb24iLCJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJyZXRyeUNvdW50IiwicmVzZXRBZnRlciIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsInJlc3VsdCIsImNhdXNlIiwiUHJvbWlzZSIsImRhdGEiLCJwYXJzZSIsImVycm9yVGV4dCIsIm1lc3NhZ2UiLCJjb2RlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJ0ZW1wbGF0ZXMiLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJmaWxlIiwiZGVzY3JpcHRpb24iLCJ0YWdzIiwic3RpY2tlcnMiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJmb3J1bSIsImNyZWF0ZUludml0ZSIsImludml0ZXMiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudHMiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwic3RhZ2VzIiwiY3JlYXRlV2ViaG9vayIsIndlYmhvb2tzIiwiYXZhdGFyIiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwicGlucyIsImdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMiLCJwcml2YXRlIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImpvaW5lZCIsImdldFBydW5lQ291bnQiLCJwcnVuZSIsImdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyIsInB1YmxpYyIsImdldFJvbGVzIiwiZ2V0Um9sZSIsImdldFNjaGVkdWxlZEV2ZW50Iiwid2l0aFVzZXJDb3VudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJ1c2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldE93blZvaWNlU3RhdGUiLCJnZXRVc2VyVm9pY2VTdGF0ZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VXNlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRDdXJyZW50VXNlciIsImdldFVzZXJDb25uZWN0aW9ucyIsImNvbm5lY3Rpb25zIiwiZ2V0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJyb2xlQ29ubmVjdGlvbnMiLCJnZXRWYW5pdHlVcmwiLCJ2YW5pdHkiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsIndpZGdldEpzb24iLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJtZSIsImxlYXZlR3VpbGQiLCJsZWF2ZSIsImxlYXZlVGhyZWFkIiwicHVibGlzaE1lc3NhZ2UiLCJjcm9zc3Bvc3QiLCJyZW1vdmVSb2xlIiwicmVtb3ZlVGhyZWFkTWVtYmVyIiwicmVtb3ZlRG1SZWNpcGllbnQiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJpbnRlcmFjdGlvbklkIiwicGFyYW1zIiwiY2FsbGJhY2siLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwiZ2V0UG9sbEFuc3dlclZvdGVycyIsImFuc3dlcklkIiwicG9sbHMiLCJ2b3RlcyIsImVuZFBvbGwiLCJleHBpcmUiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImJ1bGtCYW5NZW1iZXJzIiwiYnVsa0JhbiIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0Q3VycmVudE1lbWJlciIsImN1cnJlbnRNZW1iZXIiLCJnZXRNZW1iZXJzIiwiZ2V0QXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwiaW5zdGFuY2VJZCIsImFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiY3JlYXRlTG9iYnkiLCJsb2JieSIsImNyZWF0ZSIsImdldExvYmJ5IiwibG9iYnlJZCIsIm1vZGlmeUxvYmJ5IiwiZGVsZXRlTG9iYnkiLCJhZGRNZW1iZXJUb0xvYmJ5IiwicmVtb3ZlTWVtYmVyRnJvbUxvYmJ5IiwibGVhdmVMb2JieSIsImxpbmtDaGFubmVsVG9Mb2JieSIsImxpbmsiLCJ1bmxpbmtDaGFubmVsVG9Mb2JieSIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLGNBQWE7QUE0RHBDLFNBQ0VDLGtCQUFrQixFQUNsQkMsYUFBYSxFQUNiQyxnQkFBZ0IsRUFDaEJDLFFBQVEsRUFDUkMsS0FBSyxFQUNMQyxpQkFBaUIsRUFDakJDLFdBQVcsRUFDWEMsTUFBTSxFQUNOQyxxQkFBcUIsRUFDckJDLFdBQVcsUUFDTixvQkFBbUI7QUFDMUIsU0FBU0MsMEJBQTBCLFFBQVEscUJBQW9CO0FBQy9ELFNBQVNDLEtBQUssUUFBUSxhQUFZO0FBQ2xDLFNBQVNDLFlBQVksUUFBUSxjQUFhO0FBRzFDLE9BQU8sTUFBTUMsc0JBQXNCLEdBQUU7QUFDckMsT0FBTyxNQUFNQyxrQkFBa0IsMEJBQXlCO0FBRXhELE9BQU8sTUFBTUMsMEJBQTBCLHFCQUFvQjtBQUMzRCxPQUFPLE1BQU1DLDhCQUE4Qix3QkFBdUI7QUFDbEUsT0FBTyxNQUFNQyxnQ0FBZ0MsMEJBQXlCO0FBQ3RFLE9BQU8sTUFBTUMsMkJBQTJCLHFCQUFvQjtBQUM1RCxPQUFPLE1BQU1DLDJCQUEyQixxQkFBb0I7QUFD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