@adlfe/campaign-management-library 2.14.2 → 2.14.4

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.
Files changed (18) hide show
  1. package/bundles/adlfe-campaign-management-library.umd.js +169 -100
  2. package/bundles/adlfe-campaign-management-library.umd.js.map +1 -1
  3. package/bundles/adlfe-campaign-management-library.umd.min.js +2 -2
  4. package/bundles/adlfe-campaign-management-library.umd.min.js.map +1 -1
  5. package/esm2015/lib/campaign-management/models/general-information-wa-req.model.js +19 -10
  6. package/esm2015/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +99 -58
  7. package/esm2015/lib/campaign-management/modules/new-campaign/new-campaign.component.js +33 -26
  8. package/esm2015/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +22 -10
  9. package/esm5/lib/campaign-management/models/general-information-wa-req.model.js +19 -10
  10. package/esm5/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +99 -58
  11. package/esm5/lib/campaign-management/modules/new-campaign/new-campaign.component.js +33 -26
  12. package/esm5/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +22 -10
  13. package/fesm2015/adlfe-campaign-management-library.js +169 -100
  14. package/fesm2015/adlfe-campaign-management-library.js.map +1 -1
  15. package/fesm5/adlfe-campaign-management-library.js +169 -100
  16. package/fesm5/adlfe-campaign-management-library.js.map +1 -1
  17. package/lib/campaign-management/models/general-information-wa-req.model.d.ts +1 -0
  18. package/package.json +1 -1
@@ -98,7 +98,7 @@ let NewCampaignComponent = class NewCampaignComponent {
98
98
  const subs = this.apiAdapterService
99
99
  .executeApiRequest([], `/campaign/${this.campaignID}`, 'GET')
100
100
  .subscribe((resp) => {
101
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68;
101
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, _65, _66, _67, _68, _69, _70, _71, _72;
102
102
  if (!resp)
103
103
  return;
104
104
  const generalInformation = {
@@ -127,47 +127,51 @@ let NewCampaignComponent = class NewCampaignComponent {
127
127
  paramBody: (_20 = (_19 = (_18 = resp.data) === null || _18 === void 0 ? void 0 : _18.details) === null || _19 === void 0 ? void 0 : _19.template) === null || _20 === void 0 ? void 0 : _20.data,
128
128
  paramButton: (_23 = (_22 = (_21 = resp.data) === null || _21 === void 0 ? void 0 : _21.details) === null || _22 === void 0 ? void 0 : _22.template) === null || _23 === void 0 ? void 0 : _23.button,
129
129
  otpValue: (_28 = [...(_27 = (_26 = (_25 = (_24 = resp.data) === null || _24 === void 0 ? void 0 : _24.details) === null || _25 === void 0 ? void 0 : _25.template) === null || _26 === void 0 ? void 0 : _26.data, (_27 !== null && _27 !== void 0 ? _27 : []))]) === null || _28 === void 0 ? void 0 : _28.pop(),
130
+ variables: (((_31 = (_30 = (_29 = resp.data) === null || _29 === void 0 ? void 0 : _29.details) === null || _30 === void 0 ? void 0 : _30.template) === null || _31 === void 0 ? void 0 : _31.data) || []).map((val) => ({
131
+ paramName: val,
132
+ })),
133
+ isUseExistingTemplate: !!((_32 = resp.data) === null || _32 === void 0 ? void 0 : _32.templateName),
130
134
  template: {
131
- ID: (_31 = (_30 = (_29 = resp.data) === null || _29 === void 0 ? void 0 : _29.details) === null || _30 === void 0 ? void 0 : _30.template) === null || _31 === void 0 ? void 0 : _31.id,
132
- name: (_34 = (_33 = (_32 = resp.data) === null || _32 === void 0 ? void 0 : _32.details) === null || _33 === void 0 ? void 0 : _33.template) === null || _34 === void 0 ? void 0 : _34.name,
133
- lang: (_37 = (_36 = (_35 = resp.data) === null || _35 === void 0 ? void 0 : _35.details) === null || _36 === void 0 ? void 0 : _36.template) === null || _37 === void 0 ? void 0 : _37.lang,
134
- platform: (_38 = resp.data) === null || _38 === void 0 ? void 0 : _38.platform,
135
- headerURL: (_41 = (_40 = (_39 = resp.data) === null || _39 === void 0 ? void 0 : _39.details) === null || _40 === void 0 ? void 0 : _40.template) === null || _41 === void 0 ? void 0 : _41.headerURL,
135
+ ID: (_35 = (_34 = (_33 = resp.data) === null || _33 === void 0 ? void 0 : _33.details) === null || _34 === void 0 ? void 0 : _34.template) === null || _35 === void 0 ? void 0 : _35.id,
136
+ name: (_38 = (_37 = (_36 = resp.data) === null || _36 === void 0 ? void 0 : _36.details) === null || _37 === void 0 ? void 0 : _37.template) === null || _38 === void 0 ? void 0 : _38.name,
137
+ lang: (_41 = (_40 = (_39 = resp.data) === null || _39 === void 0 ? void 0 : _39.details) === null || _40 === void 0 ? void 0 : _40.template) === null || _41 === void 0 ? void 0 : _41.lang,
138
+ platform: (_42 = resp.data) === null || _42 === void 0 ? void 0 : _42.platform,
139
+ headerURL: (_45 = (_44 = (_43 = resp.data) === null || _43 === void 0 ? void 0 : _43.details) === null || _44 === void 0 ? void 0 : _44.template) === null || _45 === void 0 ? void 0 : _45.headerURL,
136
140
  header: {
137
- examples: (_44 = (_43 = (_42 = resp.data) === null || _42 === void 0 ? void 0 : _42.details) === null || _43 === void 0 ? void 0 : _43.template) === null || _44 === void 0 ? void 0 : _44.header,
141
+ examples: (_48 = (_47 = (_46 = resp.data) === null || _46 === void 0 ? void 0 : _46.details) === null || _47 === void 0 ? void 0 : _47.template) === null || _48 === void 0 ? void 0 : _48.header,
138
142
  },
139
143
  body: {
140
- examples: (_47 = (_46 = (_45 = resp.data) === null || _45 === void 0 ? void 0 : _45.details) === null || _46 === void 0 ? void 0 : _46.template) === null || _47 === void 0 ? void 0 : _47.data,
144
+ examples: (_51 = (_50 = (_49 = resp.data) === null || _49 === void 0 ? void 0 : _49.details) === null || _50 === void 0 ? void 0 : _50.template) === null || _51 === void 0 ? void 0 : _51.data,
141
145
  },
142
- buttons: (_50 = (_49 = (_48 = resp.data) === null || _48 === void 0 ? void 0 : _48.details) === null || _49 === void 0 ? void 0 : _49.template) === null || _50 === void 0 ? void 0 : _50.button,
143
- ClientId: (_51 = resp.data) === null || _51 === void 0 ? void 0 : _51.clientId,
144
- ClientName: (_52 = resp.data) === null || _52 === void 0 ? void 0 : _52.clientName,
146
+ buttons: (_54 = (_53 = (_52 = resp.data) === null || _52 === void 0 ? void 0 : _52.details) === null || _53 === void 0 ? void 0 : _53.template) === null || _54 === void 0 ? void 0 : _54.button,
147
+ ClientId: (_55 = resp.data) === null || _55 === void 0 ? void 0 : _55.clientId,
148
+ ClientName: (_56 = resp.data) === null || _56 === void 0 ? void 0 : _56.clientName,
145
149
  },
146
- isUpload: ((_53 = resp.data) === null || _53 === void 0 ? void 0 : _53.fileId) !== '',
147
- fileId: (_54 = resp.data) === null || _54 === void 0 ? void 0 : _54.fileId,
150
+ isUpload: ((_57 = resp.data) === null || _57 === void 0 ? void 0 : _57.fileId) !== '',
151
+ fileId: (_58 = resp.data) === null || _58 === void 0 ? void 0 : _58.fileId,
148
152
  };
149
153
  localStorage.setItem('telin.campaign', JSON.stringify(Object.assign(Object.assign({}, this.getCampaignStorage), {
150
154
  generalInformation: {
151
- id: (_55 = resp.data) === null || _55 === void 0 ? void 0 : _55.id,
155
+ id: (_59 = resp.data) === null || _59 === void 0 ? void 0 : _59.id,
152
156
  form: generalInformation,
153
157
  },
154
- failover: (_56 = resp.data) === null || _56 === void 0 ? void 0 : _56.failover,
155
- targetAudience: (_57 = resp.data) === null || _57 === void 0 ? void 0 : _57.targets,
158
+ failover: (_60 = resp.data) === null || _60 === void 0 ? void 0 : _60.failover,
159
+ targetAudience: (_61 = resp.data) === null || _61 === void 0 ? void 0 : _61.targets,
156
160
  targetAudienceFile: {
157
- name: (_58 = resp.data) === null || _58 === void 0 ? void 0 : _58.fileName,
158
- targetURL: (_59 = resp.data) === null || _59 === void 0 ? void 0 : _59.targetURL,
161
+ name: (_62 = resp.data) === null || _62 === void 0 ? void 0 : _62.fileName,
162
+ targetURL: (_63 = resp.data) === null || _63 === void 0 ? void 0 : _63.targetURL,
159
163
  },
160
164
  scheduler: {
161
- schedulerType: ((_60 = resp.data) === null || _60 === void 0 ? void 0 : _60.scheduleType) === 'MULTI'
165
+ schedulerType: ((_64 = resp.data) === null || _64 === void 0 ? void 0 : _64.scheduleType) === 'MULTI'
162
166
  ? 'ONE_TIME'
163
- : (_61 = resp.data) === null || _61 === void 0 ? void 0 : _61.scheduleType,
164
- startDate: (_63 = (_62 = resp.data) === null || _62 === void 0 ? void 0 : _62.startTime) === null || _63 === void 0 ? void 0 : _63.split(' ')[0],
165
- startTime: (_65 = (_64 = resp.data) === null || _64 === void 0 ? void 0 : _64.startTime) === null || _65 === void 0 ? void 0 : _65.split(' ')[1],
166
- isRepeat: ((_66 = resp.data) === null || _66 === void 0 ? void 0 : _66.scheduleType) === 'MULTI',
167
- delivery: (_67 = resp.data) === null || _67 === void 0 ? void 0 : _67.repeat,
167
+ : (_65 = resp.data) === null || _65 === void 0 ? void 0 : _65.scheduleType,
168
+ startDate: (_67 = (_66 = resp.data) === null || _66 === void 0 ? void 0 : _66.startTime) === null || _67 === void 0 ? void 0 : _67.split(' ')[0],
169
+ startTime: (_69 = (_68 = resp.data) === null || _68 === void 0 ? void 0 : _68.startTime) === null || _69 === void 0 ? void 0 : _69.split(' ')[1],
170
+ isRepeat: ((_70 = resp.data) === null || _70 === void 0 ? void 0 : _70.scheduleType) === 'MULTI',
171
+ delivery: (_71 = resp.data) === null || _71 === void 0 ? void 0 : _71.repeat,
168
172
  },
169
173
  })));
170
- this.isLine = ((_68 = resp.data) === null || _68 === void 0 ? void 0 : _68.platform) === 'LINE';
174
+ this.isLine = ((_72 = resp.data) === null || _72 === void 0 ? void 0 : _72.platform) === 'LINE';
171
175
  this.isLoading = false;
172
176
  this.initWizard();
173
177
  }, () => {
@@ -258,6 +262,9 @@ let NewCampaignComponent = class NewCampaignComponent {
258
262
  withoutKeyData: true,
259
263
  },
260
264
  ];
265
+ if (payloadValue.template && payloadValue.template.buttonParams) {
266
+ delete payloadValue.template.buttonParams;
267
+ }
261
268
  const subs = this.apiAdapterService
262
269
  .executeApiRequest(parameterList, this.generalInformationData.id
263
270
  ? `/campaign/${this.generalInformationData.id}`
@@ -452,4 +459,4 @@ NewCampaignComponent = __decorate([
452
459
  })
453
460
  ], NewCampaignComponent);
454
461
  export { NewCampaignComponent };
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWNhbXBhaWduLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhZGxmZS9jYW1wYWlnbi1tYW5hZ2VtZW50LWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvY2FtcGFpZ24tbWFuYWdlbWVudC9tb2R1bGVzL25ldy1jYW1wYWlnbi9uZXctY2FtcGFpZ24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDRCQUE0QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBT2pHLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBd0I3QixZQUNZLE1BQWlCLEVBQ2pCLGlCQUEyQyxFQUMzQyxNQUFxQixFQUNyQixVQUFzQjtRQUh0QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBM0J4Qixn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SUFBVCxNQUFNLEVBQUU7eURBQTRDO0FBRDVDLG9CQUFvQjtJQUxoQyxTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLDJvSkFBNEM7O0tBRS9DLENBQUM7R0FDVyxvQkFBb0IsQ0FrbEJoQztTQWxsQlksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZWdtZW50ZWRNZXNzYWdlIH0gZnJvbSAnc21zLXNlZ21lbnRzLWNhbGN1bGF0b3InO1xyXG5pbXBvcnQgeyBNYWluQXJlYSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bXMnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1hZGFwdGVyLXNlcnZpY2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBwUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1kdG8vcmVzcG9uc2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpQWRhcHRlclNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2dsb2JhbC9jb25maXJtYXRpb24vY29uZmlybWF0aW9uJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWwvY29uZmlybWF0aW9uL3NoYXJlZC9tb2RlbCc7XHJcbmltcG9ydCB7IEZhaWxvdmVyUmVxTW9kZWwsIEdlbmVyYWxJbmZvcm1hdGlvbldBUmVxTW9kZWwsIFNjaGVkdWxlclJlcU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItbmV3LWNhbXBhaWduJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9uZXctY2FtcGFpZ24uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbmV3LWNhbXBhaWduLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZXdDYW1wYWlnbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBPdXRwdXQoKSBjdXJyZW50VmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8TWFpbkFyZWE+KCk7XHJcblxyXG4gICAgcHVibGljIGNhbXBhaWduSUQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBjdXJyZW50Vmlld3MgPSBNYWluQXJlYTtcclxuICAgIHB1YmxpYyBwb3NpdGlvbldpemFyZDogbnVtYmVyID0gMTtcclxuICAgIHB1YmxpYyBkYXRhV2l6YXJkOiBzdHJpbmdbXTtcclxuICAgIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1N1Ym1pdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzR2VuZXJhbEluZm9ybWF0aW9uVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0ZhaWxvdmVyTWVjaGFuaXNtVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc051bWJlckJhc2VJbmZvcm1hdGlvblZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTY2hlZHVsZXJJbmZvcm1hdGlvblZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNMaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgZ2VuZXJhbEluZm9ybWF0aW9uRGF0YTogYW55O1xyXG4gICAgcHVibGljIGZhaWxvdmVyTWVjaGFuaXNtRGF0YTogYW55O1xyXG4gICAgcHVibGljIHRhcmdldEF1ZGllbmNlRGF0YTogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgdGFyZ2V0QXVkaWVuY2VDb3VudDogbnVtYmVyO1xyXG4gICAgcHVibGljIHRhcmdldEF1ZGllbmNlRmlsZTogYW55O1xyXG4gICAgcHVibGljIHNjaGVkdWxlckRhdGE6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIGlzVXBsb2FkVGFyZ2V0QXVkaWVuY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgc3Vic2NyaWJlcnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICBwcml2YXRlIGFwaUFkYXB0ZXJTZXJ2aWNlOiBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYW1wYWlnbklEID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lPy5zcGxpdCgnLycpPy5wb3AoKTtcclxuICAgICAgICB0aGlzLmluaXRXaXphcmQoKTtcclxuICAgICAgICB0aGlzLmdldENhbXBhaWduRGV0YWlsU2VydmljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFdpemFyZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNMaW5lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVdpemFyZCA9IFtcclxuICAgICAgICAgICAgICAgICdHZW5lcmFsIEluZm9ybWF0aW9uJyxcclxuICAgICAgICAgICAgICAgICdGYWlsb3ZlciBNZWNoYW5pc20nLFxyXG4gICAgICAgICAgICAgICAgJ1RhcmdldCBBdWRpZW5jZScsXHJcbiAgICAgICAgICAgICAgICAnU2NoZWR1bGVyJyxcclxuICAgICAgICAgICAgICAgICdTdW1tYXJ5JyxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kYXRhV2l6YXJkID0gWydHZW5lcmFsIEluZm9ybWF0aW9uJywgJ1RhcmdldCBBdWRpZW5jZScsICdTY2hlZHVsZXInLCAnU3VtbWFyeSddO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FtcGFpZ25EZXRhaWxTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbXBhaWduSUQ/Lmxlbmd0aCA8IDEwKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KFtdLCBgL2NhbXBhaWduLyR7dGhpcy5jYW1wYWlnbklEfWAsICdHRVQnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3A6IEFwcFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3ApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VuZXJhbEluZm9ybWF0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1wYWlnbk5hbWU6IHJlc3AuZGF0YT8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaXVtOiByZXNwLmRhdGE/LnBsYXRmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBbJ2ltYWdlJywgJ3ZpZGVvJywgJ2RvY3VtZW50J10uaW5jbHVkZXMocmVzcC5kYXRhPy50eXBlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnTUVESUEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3AuZGF0YT8uaXNEaXJlY3RTZW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ3V0aWxpdHknXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcC5kYXRhPy50eXBlPy50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYTogcmVzcC5kYXRhPy50eXBlPy50b1VwcGVyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ByZXZUZW1wbGF0ZTogcmVzcD8uZGF0YT8uaXNQcmV2VGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogcmVzcD8uZGF0YT8udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0dGw6IHJlc3A/LmRhdGE/LnR0bFNlY29uZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByZXNwLmRhdGE/LmFjY291bnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHJlc3AuZGF0YT8uYWNjb3VudE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogcmVzcC5kYXRhPy5wbGF0Zm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudElkOiByZXNwLmRhdGE/LmNsaWVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50TmFtZTogcmVzcC5kYXRhPy5jbGllbnROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudE5vOiByZXNwLmRhdGE/LmFjY291bnRObyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhYmFJZDogcmVzcC5kYXRhPy53YWJhSWQgPz8gJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHJlc3AuZGF0YT8uZGV0YWlscz8udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VVJMOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5kYXRhPy5kZXRhaWxzPy5pbWFnZT8udXJsID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLmRhdGE/LmRldGFpbHM/LmRvY3VtZW50Py51cmwgPz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YT8uZGV0YWlscz8udmlkZW8/LnVybCA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uaGVhZGVyVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUhlYWRlcjogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUJvZHk6IHJlc3AuZGF0YT8uZGV0YWlscz8udGVtcGxhdGU/LmRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtQnV0dG9uOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5idXR0b24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG90cFZhbHVlOiBbLi4uKHJlc3AuZGF0YT8uZGV0YWlscz8udGVtcGxhdGU/LmRhdGEgPz8gW10pXT8ucG9wKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZzogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8ubGFuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiByZXNwLmRhdGE/LnBsYXRmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyVVJMOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5oZWFkZXJVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlczogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlczogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5idXR0b24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnRJZDogcmVzcC5kYXRhPy5jbGllbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudE5hbWU6IHJlc3AuZGF0YT8uY2xpZW50TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGxvYWQ6IHJlc3AuZGF0YT8uZmlsZUlkICE9PSAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiByZXNwLmRhdGE/LmZpbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbGluLmNhbXBhaWduJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDYW1wYWlnblN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbEluZm9ybWF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByZXNwLmRhdGE/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtOiBnZW5lcmFsSW5mb3JtYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsb3ZlcjogcmVzcC5kYXRhPy5mYWlsb3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogcmVzcC5kYXRhPy50YXJnZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlRmlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXNwLmRhdGE/LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHJlc3AuZGF0YT8udGFyZ2V0VVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlclR5cGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLmRhdGE/LnNjaGVkdWxlVHlwZSA9PT0gJ01VTFRJJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ09ORV9USU1FJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcC5kYXRhPy5zY2hlZHVsZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZTogcmVzcC5kYXRhPy5zdGFydFRpbWU/LnNwbGl0KCcgJylbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogcmVzcC5kYXRhPy5zdGFydFRpbWU/LnNwbGl0KCcgJylbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0OiByZXNwLmRhdGE/LnNjaGVkdWxlVHlwZSA9PT0gJ01VTFRJJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnk6IHJlc3AuZGF0YT8ucmVwZWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMaW5lID0gcmVzcC5kYXRhPy5wbGF0Zm9ybSA9PT0gJ0xJTkUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFdpemFyZCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYWxJbmZvcm1hdGlvbihmb3JtOiB7IHBhcmVudDogRm9ybUdyb3VwOyBjaGlsZDogRm9ybUdyb3VwIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzR2VuZXJhbEluZm9ybWF0aW9uVmFsaWQgPSBmb3JtLnBhcmVudC52YWxpZCAmJiBmb3JtLmNoaWxkICYmIGZvcm0uY2hpbGQ/LnZhbGlkO1xyXG4gICAgICAgIHRoaXMuaXNMaW5lID0gZm9ybS5wYXJlbnQ/LmdldFJhd1ZhbHVlKCk/Lm1lZGl1bSA9PT0gJ0xJTkUnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRXaXphcmQoKTtcclxuXHJcbiAgICAgICAgaWYgKGZvcm0ucGFyZW50ICYmIGZvcm0uY2hpbGQpXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmZvcm0ucGFyZW50LmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNoaWxkLmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZhaWxvdmVyTWVjaGFuaXNtKGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNGYWlsb3Zlck1lY2hhbmlzbVZhbGlkID0gZm9ybS52YWxpZDtcclxuICAgICAgICB0aGlzLmZhaWxvdmVyTWVjaGFuaXNtRGF0YSA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGFyZ2V0QXVkaWVuY2UodGFyZ2V0OiB7XHJcbiAgICAgICAgdGFyZ2V0QXVkaWVuY2U6IHN0cmluZ1tdO1xyXG4gICAgICAgIG51bWJlckNvdW50OiBudW1iZXI7XHJcbiAgICAgICAgaXNVcGxvYWQ6IGJvb2xlYW47XHJcbiAgICAgICAgZmlsZTogYW55O1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2VGaWxlID0gdGFyZ2V0LmZpbGU7XHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZURhdGEgPSB0YXJnZXQudGFyZ2V0QXVkaWVuY2U7XHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZUNvdW50ID0gdGFyZ2V0Lm51bWJlckNvdW50O1xyXG4gICAgICAgIHRoaXMuaXNVcGxvYWRUYXJnZXRBdWRpZW5jZSA9IHRhcmdldC5pc1VwbG9hZDtcclxuICAgICAgICB0aGlzLmlzTnVtYmVyQmFzZUluZm9ybWF0aW9uVmFsaWQgPVxyXG4gICAgICAgICAgICAodGFyZ2V0LmlzVXBsb2FkICYmIHRhcmdldC5maWxlPy5uYW1lKSB8fFxyXG4gICAgICAgICAgICAoIXRhcmdldC5pc1VwbG9hZCAmJiB0YXJnZXQudGFyZ2V0QXVkaWVuY2UubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZmlsZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY2hlZHVsZXIoZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2hlZHVsZXJEYXRhID0gZm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuaXNTY2hlZHVsZXJJbmZvcm1hdGlvblZhbGlkID0gZm9ybS52YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbGlja1NhdmVBbmROZXh0QnV0dG9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb25XaXphcmQpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlR2VuZXJhbEluZm9ybWF0aW9uU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICF0aGlzLmlzTGluZSA/IHRoaXMuc2F2ZUZhaWxvdmVyTWVjaGFuaXNtU2VydmljZSgpIDogdGhpcy5zYXZlTnVtYmVyQmFzZXNTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNMaW5lID8gdGhpcy5zYXZlTnVtYmVyQmFzZXNTZXJ2aWNlKCkgOiB0aGlzLnNhdmVTY2hlZHVsZXJTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGluZSkgdGhpcy5zYXZlU2NoZWR1bGVyU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldENhbXBhaWduU3RvcmFnZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsaW4uY2FtcGFpZ24nKVxyXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJykpXHJcbiAgICAgICAgICAgIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEJvZHkoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBib2R5ID1cclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhPy50ZXh0IHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YT8udGVtcGxhdGU/LmJvZHk/LnRleHQgfHxcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhPy5ib2R5Py50ZXh0O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBib2R5XHJcbiAgICAgICAgICAgICAgICA/LnNwbGl0KC9cXFxcbnxcXG4vKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJzxiciAvPicpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoL1xcXFx0fFxcdC8pXHJcbiAgICAgICAgICAgICAgICAuam9pbignICAgICcpID8/ICcnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGVja1R3aWxpb0NvdW50ZXJWYWxpZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZXNHZW5lcmFsID0gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhO1xyXG5cclxuICAgICAgICBpZiAodmFsdWVzR2VuZXJhbD8ubWVkaXVtICE9PSAnU01TJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZXNHZW5lcmFsPy5jaGFubmVsID09PSAnVEVYVCcpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VnbWVudGVkTWVzc2FnZSA9IG5ldyBTZWdtZW50ZWRNZXNzYWdlKHRoaXMuZ2V0Qm9keSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBzZWdtZW50ZWRNZXNzYWdlLnNlZ21lbnRzQ291bnQsXHJcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogc2VnbWVudGVkTWVzc2FnZS5lbmNvZGluZ05hbWUsXHJcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOiBzZWdtZW50ZWRNZXNzYWdlLm51bWJlck9mVW5pY29kZVNjYWxhcnMsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnNlZ21lbnRzID4gMTApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlUmVzdWx0ID0gdGhpcy5nZXRCb2R5O1xyXG4gICAgICAgICAgICBBcnJheS5mcm9tKHZhbHVlc0dlbmVyYWwudGVtcGxhdGU/LmJvZHk/LmV4YW1wbGVzIHx8IFtdKS5tYXAoKGVudHJ5LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlc0dlbmVyYWwucGFyYW1Cb2R5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IGB7eyR7ZW50cnl9fX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzR2VuZXJhbC5wYXJhbUJvZHlbaW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZXN1bHQgPSB2YWx1ZVJlc3VsdC5zcGxpdChwbGFjZWhvbGRlcikuam9pbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VnbWVudGVkTWVzc2FnZSA9IG5ldyBTZWdtZW50ZWRNZXNzYWdlKHZhbHVlUmVzdWx0KTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRlZE1lc3NhZ2Uuc2VnbWVudHNDb3VudCxcclxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBzZWdtZW50ZWRNZXNzYWdlLmVuY29kaW5nTmFtZSxcclxuICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6IHNlZ21lbnRlZE1lc3NhZ2UubnVtYmVyT2ZVbmljb2RlU2NhbGFycyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc2VnbWVudHMgPiAxMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZUdlbmVyYWxJbmZvcm1hdGlvblNlcnZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uQ2hlY2tUd2lsaW9Db3VudGVyVmFsaWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignU2VnbWVudCBjYW5ub3QgbW9yZSB0aGFuIDEwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYm9keVJlcSA9IG5ldyBHZW5lcmFsSW5mb3JtYXRpb25XQVJlcU1vZGVsKCkuY2xvbmUoe1xyXG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWRWYWx1ZSA9IGJvZHlSZXEuY29udmVydCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVHZW5lcmFsSW5mb3JtYXRpb24ocGF5bG9hZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVHZW5lcmFsSW5mb3JtYXRpb24ocGF5bG9hZFZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAocGF5bG9hZFZhbHVlLnRlbXBsYXRlICYmIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YS50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBwYXlsb2FkVmFsdWUudGVtcGxhdGUudHlwZSA9XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkVmFsdWUudGVtcGxhdGUudHlwZSB8fCB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEudGVtcGxhdGUuY2F0ZWdvcnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaW46ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICAgICAgd2l0aG91dEtleURhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyTGlzdCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YS5pZFxyXG4gICAgICAgICAgICAgICAgICAgID8gYC9jYW1wYWlnbi8ke3RoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YS5pZH1gXHJcbiAgICAgICAgICAgICAgICAgICAgOiAnL2NhbXBhaWduJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YS5pZCA/ICdQVVQnIDogJ1BPU1QnXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3A/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkgIT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGVsaW4uY2FtcGFpZ24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldENhbXBhaWduU3RvcmFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsSW5mb3JtYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3AuZGF0YS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybTogdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uV2l6YXJkICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZUZhaWxvdmVyTWVjaGFuaXNtU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBib2R5UmVxID0gbmV3IEZhaWxvdmVyUmVxTW9kZWwoKS5jbG9uZSh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZmFpbG92ZXJNZWNoYW5pc21EYXRhLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogYm9keVJlcS5jb252ZXJ0KCksXHJcbiAgICAgICAgICAgICAgICBpbjogJ2JvZHknLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICB3aXRob3V0S2V5RGF0YTogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LFxyXG4gICAgICAgICAgICAgICAgYC9jYW1wYWlnbi8ke3RoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmlkfS9mYWlsb3ZlcmAsXHJcbiAgICAgICAgICAgICAgICAnUE9TVCdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcD8ubWVzc2FnZT8udG9Mb3dlckNhc2UoKSAhPT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZWxpbi5jYW1wYWlnbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxvdmVyOiB0aGlzLmZhaWxvdmVyTWVjaGFuaXNtRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25XaXphcmQgKz0gMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiAodGhpcy5pc1N1Ym1pdCA9IGZhbHNlKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlTnVtYmVyQmFzZXNTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldEF1ZGllbmNlRGF0YS5sZW5ndGggPT09IDAgfHwgdGhpcy5pc1VwbG9hZFRhcmdldEF1ZGllbmNlKSB7XHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICAgICAgJ3RlbGluLmNhbXBhaWduJyxcclxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldENhbXBhaWduU3RvcmFnZSxcclxuICAgICAgICAgICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlOiB0aGlzLnRhcmdldEF1ZGllbmNlRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2VDb3VudDogdGhpcy50YXJnZXRBdWRpZW5jZUNvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZUZpbGU6IHRoaXMudGFyZ2V0QXVkaWVuY2VGaWxlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uV2l6YXJkICs9IDE7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0czogdGhpcy50YXJnZXRBdWRpZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyQ291bnQ6IHRoaXMudGFyZ2V0QXVkaWVuY2VDb3VudCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBpbjogJ2JvZHknLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICB3aXRob3V0S2V5RGF0YTogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LFxyXG4gICAgICAgICAgICAgICAgYC9jYW1wYWlnbi8ke3RoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmlkfS90YXJnZXRjYXRlZ29yeWAsXHJcbiAgICAgICAgICAgICAgICAnUE9TVCdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcD8ubWVzc2FnZT8udG9Mb3dlckNhc2UoKSAhPT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZWxpbi5jYW1wYWlnbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlOiB0aGlzLnRhcmdldEF1ZGllbmNlRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZUNvdW50OiB0aGlzLnRhcmdldEF1ZGllbmNlQ291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2VGaWxlOiB0aGlzLnRhcmdldEF1ZGllbmNlRmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25XaXphcmQgKz0gMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiAodGhpcy5pc1N1Ym1pdCA9IGZhbHNlKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlU2NoZWR1bGVyU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBib2R5UmVxID0gbmV3IFNjaGVkdWxlclJlcU1vZGVsKCkuY2xvbmUoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnNjaGVkdWxlckRhdGEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdkYXRhJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBib2R5UmVxLmNvbnZlcnQoKSxcclxuICAgICAgICAgICAgICAgIGluOiAnYm9keScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcclxuICAgICAgICAgICAgICAgIHdpdGhvdXRLZXlEYXRhOiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckxpc3QsXHJcbiAgICAgICAgICAgICAgICBgL2NhbXBhaWduLyR7dGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uaWR9L3NjaGVkdWxlYCxcclxuICAgICAgICAgICAgICAgICdQT1NUJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpICE9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbGluLmNhbXBhaWduJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDYW1wYWlnblN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyOiB0aGlzLnNjaGVkdWxlckRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uV2l6YXJkICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblByZXZpb3VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucG9zaXRpb25XaXphcmQgLT0gMTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlQ3VycmVudFZpZXcoYXJlYTogTWFpbkFyZWEpIHtcclxuICAgICAgICB0aGlzLm9wZW5Db25maXJtYXRpb25EaWFsb2coYXJlYSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvcGVuQ29uZmlybWF0aW9uRGlhbG9nKGFyZWE6IE1haW5BcmVhKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29uZmlybWF0aW9uID0gbmV3IENvbmZpcm1hdGlvbk1vZGVsKCk7XHJcblxyXG4gICAgICAgIGNvbmZpcm1hdGlvbi50aXRsZSA9ICdDYW5jZWwgQWRkIEJyb2FkY2FzdCc7XHJcbiAgICAgICAgY29uZmlybWF0aW9uLmNvbnRlbnQgPSBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbDxici8+IEFkZCBCcm9hZGNhc3Q/YDtcclxuICAgICAgICBjb25maXJtYXRpb24uYnRuU3VibWl0UmVkID0gJ1llcyc7XHJcbiAgICAgICAgY29uZmlybWF0aW9uLmJ0bkNhbmNlbCA9ICdObyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmRpYWxvZ1xyXG4gICAgICAgICAgICAub3BlbihDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiYWNrZHJvcENsYXNzOiAnb3ZlcmxheS1iYWNrZHJvcC1kaWFsb2cnLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogY29uZmlybWF0aW9uLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGAvJHt0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5pZH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnL3NlY3VyZS9jYW1wYWlnbidcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRWaWV3LmVtaXQoYXJlYSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU3VibWl0Rm9yQXBwcm92YWwoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtdO1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8ubmFtZSlcclxuICAgICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdpc0ZpbGUnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpbjogJ3F1ZXJ5JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyTGlzdCxcclxuICAgICAgICAgICAgICAgIGAvY2FtcGFpZ24vJHt0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5pZH0vc3VibWl0YCxcclxuICAgICAgICAgICAgICAgICdQT1NUJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpICE9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgLyR7dGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uaWR9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJy9zZWN1cmUvY2FtcGFpZ24nXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnQ2FtcGFpZ24gc3VibWl0dGVkIGZvciBhcHByb3ZhbCEnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5lbWl0KHRoaXMuY3VycmVudFZpZXdzLkNhbXBhaWduSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+ICh0aGlzLmlzU3VibWl0ID0gZmFsc2UpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKGVhY2gpID0+IGVhY2gudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LWNhbXBhaWduLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhZGxmZS9jYW1wYWlnbi1tYW5hZ2VtZW50LWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvY2FtcGFpZ24tbWFuYWdlbWVudC9tb2R1bGVzL25ldy1jYW1wYWlnbi9uZXctY2FtcGFpZ24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLDRCQUE0QixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBT2pHLElBQWEsb0JBQW9CLEdBQWpDLE1BQWEsb0JBQW9CO0lBd0I3QixZQUNZLE1BQWlCLEVBQ2pCLGlCQUEyQyxFQUMzQyxNQUFxQixFQUNyQixVQUFzQjtRQUh0QixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQ2pCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBMEI7UUFDM0MsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBM0J4Qixn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QyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUNELEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FDaEMsQ0FBQztRQUVOLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDSixDQUFBOztZQWprQnVCLFNBQVM7WUFDRSx3QkFBd0I7WUFDbkMsYUFBYTtZQUNULFVBQVU7O0FBM0J4QjtJQUFULE1BQU0sRUFBRTt5REFBNEM7QUFENUMsb0JBQW9CO0lBTGhDLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsMm9KQUE0Qzs7S0FFL0MsQ0FBQztHQUNXLG9CQUFvQixDQTBsQmhDO1NBMWxCWSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2VnbWVudGVkTWVzc2FnZSB9IGZyb20gJ3Ntcy1zZWdtZW50cy1jYWxjdWxhdG9yJztcclxuaW1wb3J0IHsgTWFpbkFyZWEgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW1zJztcclxuaW1wb3J0IHsgUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRpbC9hcGktYWRhcHRlci1zZXJ2aWNlLW1vZGVscyc7XHJcbmltcG9ydCB7IEFwcFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRpbC9hcGktZHRvL3Jlc3BvbnNlLW1vZGVscyc7XHJcbmltcG9ydCB7IEFwaUFkYXB0ZXJTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9nbG9iYWwvY29uZmlybWF0aW9uL2NvbmZpcm1hdGlvbic7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vZ2xvYmFsL2NvbmZpcm1hdGlvbi9zaGFyZWQvbW9kZWwnO1xyXG5pbXBvcnQgeyBGYWlsb3ZlclJlcU1vZGVsLCBHZW5lcmFsSW5mb3JtYXRpb25XQVJlcU1vZGVsLCBTY2hlZHVsZXJSZXFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLW5ldy1jYW1wYWlnbicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmV3LWNhbXBhaWduLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL25ldy1jYW1wYWlnbi5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmV3Q2FtcGFpZ25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KCkgY3VycmVudFZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPE1haW5BcmVhPigpO1xyXG5cclxuICAgIHB1YmxpYyBjYW1wYWlnbklEOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY3VycmVudFZpZXdzID0gTWFpbkFyZWE7XHJcbiAgICBwdWJsaWMgcG9zaXRpb25XaXphcmQ6IG51bWJlciA9IDE7XHJcbiAgICBwdWJsaWMgZGF0YVdpemFyZDogc3RyaW5nW107XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTdWJtaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0dlbmVyYWxJbmZvcm1hdGlvblZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNGYWlsb3Zlck1lY2hhbmlzbVZhbGlkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNOdW1iZXJCYXNlSW5mb3JtYXRpb25WYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2NoZWR1bGVySW5mb3JtYXRpb25WYWxpZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzTGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGdlbmVyYWxJbmZvcm1hdGlvbkRhdGE6IGFueTtcclxuICAgIHB1YmxpYyBmYWlsb3Zlck1lY2hhbmlzbURhdGE6IGFueTtcclxuICAgIHB1YmxpYyB0YXJnZXRBdWRpZW5jZURhdGE6IHN0cmluZ1tdO1xyXG4gICAgcHVibGljIHRhcmdldEF1ZGllbmNlQ291bnQ6IG51bWJlcjtcclxuICAgIHB1YmxpYyB0YXJnZXRBdWRpZW5jZUZpbGU6IGFueTtcclxuICAgIHB1YmxpYyBzY2hlZHVsZXJEYXRhOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBpc1VwbG9hZFRhcmdldEF1ZGllbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHN1YnNjcmliZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgcHJpdmF0ZSBhcGlBZGFwdGVyU2VydmljZTogQXBpQWRhcHRlclNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaHR0cENsaWVudDogSHR0cENsaWVudFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2FtcGFpZ25JRCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZT8uc3BsaXQoJy8nKT8ucG9wKCk7XHJcbiAgICAgICAgdGhpcy5pbml0V2l6YXJkKCk7XHJcbiAgICAgICAgdGhpcy5nZXRDYW1wYWlnbkRldGFpbFNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRXaXphcmQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzTGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFXaXphcmQgPSBbXHJcbiAgICAgICAgICAgICAgICAnR2VuZXJhbCBJbmZvcm1hdGlvbicsXHJcbiAgICAgICAgICAgICAgICAnRmFpbG92ZXIgTWVjaGFuaXNtJyxcclxuICAgICAgICAgICAgICAgICdUYXJnZXQgQXVkaWVuY2UnLFxyXG4gICAgICAgICAgICAgICAgJ1NjaGVkdWxlcicsXHJcbiAgICAgICAgICAgICAgICAnU3VtbWFyeScsXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YVdpemFyZCA9IFsnR2VuZXJhbCBJbmZvcm1hdGlvbicsICdUYXJnZXQgQXVkaWVuY2UnLCAnU2NoZWR1bGVyJywgJ1N1bW1hcnknXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENhbXBhaWduRGV0YWlsU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5jYW1wYWlnbklEPy5sZW5ndGggPCAxMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChbXSwgYC9jYW1wYWlnbi8ke3RoaXMuY2FtcGFpZ25JRH1gLCAnR0VUJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXNwOiBBcHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyYWxJbmZvcm1hdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FtcGFpZ25OYW1lOiByZXNwLmRhdGE/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGl1bTogcmVzcC5kYXRhPy5wbGF0Zm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogWydpbWFnZScsICd2aWRlbycsICdkb2N1bWVudCddLmluY2x1ZGVzKHJlc3AuZGF0YT8udHlwZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ01FRElBJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXNwLmRhdGE/LmlzRGlyZWN0U2VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICd1dGlsaXR5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3AuZGF0YT8udHlwZT8udG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6IHJlc3AuZGF0YT8udHlwZT8udG9VcHBlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQcmV2VGVtcGxhdGU6IHJlc3A/LmRhdGE/LmlzUHJldlRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6IHJlc3A/LmRhdGE/LnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHRsOiByZXNwPy5kYXRhPy50dGxTZWNvbmRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcmVzcC5kYXRhPy5hY2NvdW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXNwLmRhdGE/LmFjY291bnROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06IHJlc3AuZGF0YT8ucGxhdGZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJZDogcmVzcC5kYXRhPy5jbGllbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudE5hbWU6IHJlc3AuZGF0YT8uY2xpZW50TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnRObzogcmVzcC5kYXRhPy5hY2NvdW50Tm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWJhSWQ6IHJlc3AuZGF0YT8ud2FiYUlkID8/ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiByZXNwLmRhdGE/LmRldGFpbHM/LnRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFVSTDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YT8uZGV0YWlscz8uaW1hZ2U/LnVybCA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcC5kYXRhPy5kZXRhaWxzPy5kb2N1bWVudD8udXJsID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLmRhdGE/LmRldGFpbHM/LnZpZGVvPy51cmwgPz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YT8uZGV0YWlscz8udGVtcGxhdGU/LmhlYWRlclVSTCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1IZWFkZXI6IHJlc3AuZGF0YT8uZGV0YWlscz8udGVtcGxhdGU/LmhlYWRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Cb2R5OiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUJ1dHRvbjogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uYnV0dG9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdHBWYWx1ZTogWy4uLihyZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5kYXRhID8/IFtdKV0/LnBvcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM6IChyZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5kYXRhIHx8IFtdKS5tYXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsOiBzdHJpbmcpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiB2YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1VzZUV4aXN0aW5nVGVtcGxhdGU6ICEhcmVzcC5kYXRhPy50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZzogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8ubGFuZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiByZXNwLmRhdGE/LnBsYXRmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyVVJMOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5oZWFkZXJVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlczogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uaGVhZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlczogcmVzcC5kYXRhPy5kZXRhaWxzPy50ZW1wbGF0ZT8uZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiByZXNwLmRhdGE/LmRldGFpbHM/LnRlbXBsYXRlPy5idXR0b24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGllbnRJZDogcmVzcC5kYXRhPy5jbGllbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudE5hbWU6IHJlc3AuZGF0YT8uY2xpZW50TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGxvYWQ6IHJlc3AuZGF0YT8uZmlsZUlkICE9PSAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUlkOiByZXNwLmRhdGE/LmZpbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbGluLmNhbXBhaWduJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDYW1wYWlnblN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbEluZm9ybWF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByZXNwLmRhdGE/LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtOiBnZW5lcmFsSW5mb3JtYXRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsb3ZlcjogcmVzcC5kYXRhPy5mYWlsb3ZlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogcmVzcC5kYXRhPy50YXJnZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlRmlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiByZXNwLmRhdGE/LmZpbGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHJlc3AuZGF0YT8udGFyZ2V0VVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlclR5cGU6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwLmRhdGE/LnNjaGVkdWxlVHlwZSA9PT0gJ01VTFRJJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ09ORV9USU1FJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcC5kYXRhPy5zY2hlZHVsZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZTogcmVzcC5kYXRhPy5zdGFydFRpbWU/LnNwbGl0KCcgJylbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogcmVzcC5kYXRhPy5zdGFydFRpbWU/LnNwbGl0KCcgJylbMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwZWF0OiByZXNwLmRhdGE/LnNjaGVkdWxlVHlwZSA9PT0gJ01VTFRJJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnk6IHJlc3AuZGF0YT8ucmVwZWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMaW5lID0gcmVzcC5kYXRhPy5wbGF0Zm9ybSA9PT0gJ0xJTkUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFdpemFyZCgpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdlbmVyYWxJbmZvcm1hdGlvbihmb3JtOiB7IHBhcmVudDogRm9ybUdyb3VwOyBjaGlsZDogRm9ybUdyb3VwIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzR2VuZXJhbEluZm9ybWF0aW9uVmFsaWQgPSBmb3JtLnBhcmVudC52YWxpZCAmJiBmb3JtLmNoaWxkICYmIGZvcm0uY2hpbGQ/LnZhbGlkO1xyXG4gICAgICAgIHRoaXMuaXNMaW5lID0gZm9ybS5wYXJlbnQ/LmdldFJhd1ZhbHVlKCk/Lm1lZGl1bSA9PT0gJ0xJTkUnO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRXaXphcmQoKTtcclxuXHJcbiAgICAgICAgaWYgKGZvcm0ucGFyZW50ICYmIGZvcm0uY2hpbGQpXHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmZvcm0ucGFyZW50LmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNoaWxkLmdldFJhd1ZhbHVlKCksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZhaWxvdmVyTWVjaGFuaXNtKGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNGYWlsb3Zlck1lY2hhbmlzbVZhbGlkID0gZm9ybS52YWxpZDtcclxuICAgICAgICB0aGlzLmZhaWxvdmVyTWVjaGFuaXNtRGF0YSA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGFyZ2V0QXVkaWVuY2UodGFyZ2V0OiB7XHJcbiAgICAgICAgdGFyZ2V0QXVkaWVuY2U6IHN0cmluZ1tdO1xyXG4gICAgICAgIG51bWJlckNvdW50OiBudW1iZXI7XHJcbiAgICAgICAgaXNVcGxvYWQ6IGJvb2xlYW47XHJcbiAgICAgICAgZmlsZTogYW55O1xyXG4gICAgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2VGaWxlID0gdGFyZ2V0LmZpbGU7XHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZURhdGEgPSB0YXJnZXQudGFyZ2V0QXVkaWVuY2U7XHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZUNvdW50ID0gdGFyZ2V0Lm51bWJlckNvdW50O1xyXG4gICAgICAgIHRoaXMuaXNVcGxvYWRUYXJnZXRBdWRpZW5jZSA9IHRhcmdldC5pc1VwbG9hZDtcclxuICAgICAgICB0aGlzLmlzTnVtYmVyQmFzZUluZm9ybWF0aW9uVmFsaWQgPVxyXG4gICAgICAgICAgICAodGFyZ2V0LmlzVXBsb2FkICYmIHRhcmdldC5maWxlPy5uYW1lKSB8fFxyXG4gICAgICAgICAgICAoIXRhcmdldC5pc1VwbG9hZCAmJiB0YXJnZXQudGFyZ2V0QXVkaWVuY2UubGVuZ3RoID4gMCkgfHxcclxuICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZmlsZUlkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzY2hlZHVsZXIoZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zY2hlZHVsZXJEYXRhID0gZm9ybS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuaXNTY2hlZHVsZXJJbmZvcm1hdGlvblZhbGlkID0gZm9ybS52YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbGlja1NhdmVBbmROZXh0QnV0dG9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXQgPSB0cnVlO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb25XaXphcmQpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlR2VuZXJhbEluZm9ybWF0aW9uU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICF0aGlzLmlzTGluZSA/IHRoaXMuc2F2ZUZhaWxvdmVyTWVjaGFuaXNtU2VydmljZSgpIDogdGhpcy5zYXZlTnVtYmVyQmFzZXNTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNMaW5lID8gdGhpcy5zYXZlTnVtYmVyQmFzZXNTZXJ2aWNlKCkgOiB0aGlzLnNhdmVTY2hlZHVsZXJTZXJ2aWNlKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzTGluZSkgdGhpcy5zYXZlU2NoZWR1bGVyU2VydmljZSgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldENhbXBhaWduU3RvcmFnZSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsaW4uY2FtcGFpZ24nKVxyXG4gICAgICAgICAgICA/IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJykpXHJcbiAgICAgICAgICAgIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEJvZHkoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBib2R5ID1cclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhPy50ZXh0IHx8XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YT8udGVtcGxhdGU/LmJvZHk/LnRleHQgfHxcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhPy5ib2R5Py50ZXh0O1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBib2R5XHJcbiAgICAgICAgICAgICAgICA/LnNwbGl0KC9cXFxcbnxcXG4vKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJzxiciAvPicpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoL1xcXFx0fFxcdC8pXHJcbiAgICAgICAgICAgICAgICAuam9pbignICAgICcpID8/ICcnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGVja1R3aWxpb0NvdW50ZXJWYWxpZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgICAgICBjb25zdCB2YWx1ZXNHZW5lcmFsID0gdGhpcy5nZW5lcmFsSW5mb3JtYXRpb25EYXRhO1xyXG5cclxuICAgICAgICBpZiAodmFsdWVzR2VuZXJhbD8ubWVkaXVtICE9PSAnU01TJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZXNHZW5lcmFsPy5jaGFubmVsID09PSAnVEVYVCcpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VnbWVudGVkTWVzc2FnZSA9IG5ldyBTZWdtZW50ZWRNZXNzYWdlKHRoaXMuZ2V0Qm9keSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgICAgIHNlZ21lbnRzOiBzZWdtZW50ZWRNZXNzYWdlLnNlZ21lbnRzQ291bnQsXHJcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogc2VnbWVudGVkTWVzc2FnZS5lbmNvZGluZ05hbWUsXHJcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzOiBzZWdtZW50ZWRNZXNzYWdlLm51bWJlck9mVW5pY29kZVNjYWxhcnMsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnNlZ21lbnRzID4gMTApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHZhbHVlUmVzdWx0ID0gdGhpcy5nZXRCb2R5O1xyXG4gICAgICAgICAgICBBcnJheS5mcm9tKHZhbHVlc0dlbmVyYWwudGVtcGxhdGU/LmJvZHk/LmV4YW1wbGVzIHx8IFtdKS5tYXAoKGVudHJ5LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlc0dlbmVyYWwucGFyYW1Cb2R5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlciA9IGB7eyR7ZW50cnl9fX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzR2VuZXJhbC5wYXJhbUJvZHlbaW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVSZXN1bHQgPSB2YWx1ZVJlc3VsdC5zcGxpdChwbGFjZWhvbGRlcikuam9pbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VnbWVudGVkTWVzc2FnZSA9IG5ldyBTZWdtZW50ZWRNZXNzYWdlKHZhbHVlUmVzdWx0KTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgc2VnbWVudHM6IHNlZ21lbnRlZE1lc3NhZ2Uuc2VnbWVudHNDb3VudCxcclxuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBzZWdtZW50ZWRNZXNzYWdlLmVuY29kaW5nTmFtZSxcclxuICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM6IHNlZ21lbnRlZE1lc3NhZ2UubnVtYmVyT2ZVbmljb2RlU2NhbGFycyxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc2VnbWVudHMgPiAxMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2F2ZUdlbmVyYWxJbmZvcm1hdGlvblNlcnZpY2UoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm9uQ2hlY2tUd2lsaW9Db3VudGVyVmFsaWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignU2VnbWVudCBjYW5ub3QgbW9yZSB0aGFuIDEwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYm9keVJlcSA9IG5ldyBHZW5lcmFsSW5mb3JtYXRpb25XQVJlcU1vZGVsKCkuY2xvbmUoe1xyXG4gICAgICAgICAgICAuLi50aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBheWxvYWRWYWx1ZSA9IGJvZHlSZXEuY29udmVydCgpO1xyXG5cclxuICAgICAgICB0aGlzLnNhdmVHZW5lcmFsSW5mb3JtYXRpb24ocGF5bG9hZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVHZW5lcmFsSW5mb3JtYXRpb24ocGF5bG9hZFZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAocGF5bG9hZFZhbHVlLnRlbXBsYXRlICYmIHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YS50ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBwYXlsb2FkVmFsdWUudGVtcGxhdGUudHlwZSA9XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkVmFsdWUudGVtcGxhdGUudHlwZSB8fCB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEudGVtcGxhdGUuY2F0ZWdvcnk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZFZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaW46ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICAgICAgd2l0aG91dEtleURhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgICAgICBpZiAocGF5bG9hZFZhbHVlLnRlbXBsYXRlICYmIHBheWxvYWRWYWx1ZS50ZW1wbGF0ZS5idXR0b25QYXJhbXMpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHBheWxvYWRWYWx1ZS50ZW1wbGF0ZS5idXR0b25QYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckxpc3QsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEuaWRcclxuICAgICAgICAgICAgICAgICAgICA/IGAvY2FtcGFpZ24vJHt0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEuaWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogJy9jYW1wYWlnbicsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYWxJbmZvcm1hdGlvbkRhdGEuaWQgPyAnUFVUJyA6ICdQT1NUJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpICE9PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RlbGluLmNhbXBhaWduJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDYW1wYWlnblN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhbEluZm9ybWF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByZXNwLmRhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm06IHRoaXMuZ2VuZXJhbEluZm9ybWF0aW9uRGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbldpemFyZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+ICh0aGlzLmlzU3VibWl0ID0gZmFsc2UpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVGYWlsb3Zlck1lY2hhbmlzbVNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYm9keVJlcSA9IG5ldyBGYWlsb3ZlclJlcU1vZGVsKCkuY2xvbmUoe1xyXG4gICAgICAgICAgICAuLi50aGlzLmZhaWxvdmVyTWVjaGFuaXNtRGF0YSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGEnLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGJvZHlSZXEuY29udmVydCgpLFxyXG4gICAgICAgICAgICAgICAgaW46ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICAgICAgd2l0aG91dEtleURhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyTGlzdCxcclxuICAgICAgICAgICAgICAgIGAvY2FtcGFpZ24vJHt0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5pZH0vZmFpbG92ZXJgLFxyXG4gICAgICAgICAgICAgICAgJ1BPU1QnXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3A/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkgIT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGVsaW4uY2FtcGFpZ24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldENhbXBhaWduU3RvcmFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsb3ZlcjogdGhpcy5mYWlsb3Zlck1lY2hhbmlzbURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uV2l6YXJkICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZU51bWJlckJhc2VzU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy50YXJnZXRBdWRpZW5jZURhdGEubGVuZ3RoID09PSAwIHx8IHRoaXMuaXNVcGxvYWRUYXJnZXRBdWRpZW5jZSkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcclxuICAgICAgICAgICAgICAgICd0ZWxpbi5jYW1wYWlnbicsXHJcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDYW1wYWlnblN0b3JhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ue1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogdGhpcy50YXJnZXRBdWRpZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlQ291bnQ6IHRoaXMudGFyZ2V0QXVkaWVuY2VDb3VudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2VGaWxlOiB0aGlzLnRhcmdldEF1ZGllbmNlRmlsZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbldpemFyZCArPSAxO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHM6IHRoaXMudGFyZ2V0QXVkaWVuY2VEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlckNvdW50OiB0aGlzLnRhcmdldEF1ZGllbmNlQ291bnQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgaW46ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICAgICAgd2l0aG91dEtleURhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyTGlzdCxcclxuICAgICAgICAgICAgICAgIGAvY2FtcGFpZ24vJHt0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5pZH0vdGFyZ2V0Y2F0ZWdvcnlgLFxyXG4gICAgICAgICAgICAgICAgJ1BPU1QnXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3A/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkgIT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGVsaW4uY2FtcGFpZ24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldENhbXBhaWduU3RvcmFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogdGhpcy50YXJnZXRBdWRpZW5jZURhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2VDb3VudDogdGhpcy50YXJnZXRBdWRpZW5jZUNvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlRmlsZTogdGhpcy50YXJnZXRBdWRpZW5jZUZpbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uV2l6YXJkICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gKHRoaXMuaXNTdWJtaXQgPSBmYWxzZSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2F2ZVNjaGVkdWxlclNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYm9keVJlcSA9IG5ldyBTY2hlZHVsZXJSZXFNb2RlbCgpLmNsb25lKHtcclxuICAgICAgICAgICAgLi4udGhpcy5zY2hlZHVsZXJEYXRhLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZGF0YScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogYm9keVJlcS5jb252ZXJ0KCksXHJcbiAgICAgICAgICAgICAgICBpbjogJ2JvZHknLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICB3aXRob3V0S2V5RGF0YTogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LFxyXG4gICAgICAgICAgICAgICAgYC9jYW1wYWlnbi8ke3RoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmlkfS9zY2hlZHVsZWAsXHJcbiAgICAgICAgICAgICAgICAnUE9TVCdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcD8ubWVzc2FnZT8udG9Mb3dlckNhc2UoKSAhPT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZWxpbi5jYW1wYWlnbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVkdWxlcjogdGhpcy5zY2hlZHVsZXJEYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU3VibWl0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbldpemFyZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+ICh0aGlzLmlzU3VibWl0ID0gZmFsc2UpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25QcmV2aW91cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uV2l6YXJkIC09IDE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUN1cnJlbnRWaWV3KGFyZWE6IE1haW5BcmVhKSB7XHJcbiAgICAgICAgdGhpcy5vcGVuQ29uZmlybWF0aW9uRGlhbG9nKGFyZWEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb3BlbkNvbmZpcm1hdGlvbkRpYWxvZyhhcmVhOiBNYWluQXJlYSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IG5ldyBDb25maXJtYXRpb25Nb2RlbCgpO1xyXG5cclxuICAgICAgICBjb25maXJtYXRpb24udGl0bGUgPSAnQ2FuY2VsIEFkZCBCcm9hZGNhc3QnO1xyXG4gICAgICAgIGNvbmZpcm1hdGlvbi5jb250ZW50ID0gYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjYW5jZWw8YnIvPiBBZGQgQnJvYWRjYXN0P2A7XHJcbiAgICAgICAgY29uZmlybWF0aW9uLmJ0blN1Ym1pdFJlZCA9ICdZZXMnO1xyXG4gICAgICAgIGNvbmZpcm1hdGlvbi5idG5DYW5jZWwgPSAnTm8nO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5kaWFsb2dcclxuICAgICAgICAgICAgLm9wZW4oQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ292ZXJsYXktYmFja2Ryb3AtZGlhbG9nJyxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGNvbmZpcm1hdGlvbixcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBgLyR7dGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uaWR9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJy9zZWN1cmUvY2FtcGFpZ24nXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5lbWl0KGFyZWEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblN1Ym1pdEZvckFwcHJvdmFsKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXTtcclxuICAgICAgICB0aGlzLmlzU3VibWl0ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/Lm5hbWUpXHJcbiAgICAgICAgICAgIHBhcmFtZXRlckxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnaXNGaWxlJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaW46ICdxdWVyeScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckxpc3QsXHJcbiAgICAgICAgICAgICAgICBgL2NhbXBhaWduLyR7dGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uaWR9L3N1Ym1pdGAsXHJcbiAgICAgICAgICAgICAgICAnUE9TVCdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcD8ubWVzc2FnZT8udG9Mb3dlckNhc2UoKSAhPT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTdWJtaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYC8ke3RoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmlkfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcvc2VjdXJlL2NhbXBhaWduJ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MoJ0NhbXBhaWduIHN1Ym1pdHRlZCBmb3IgYXBwcm92YWwhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N1Ym1pdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcuZW1pdCh0aGlzLmN1cnJlbnRWaWV3cy5DYW1wYWlnbkluZGV4KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiAodGhpcy5pc1N1Ym1pdCA9IGZhbHNlKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChlYWNoKSA9PiBlYWNoLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -214,26 +214,38 @@ let NewNumberBasesComponent = class NewNumberBasesComponent {
214
214
  return found ? true : false;
215
215
  }
216
216
  onDownloadSampleService() {
217
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
217
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
218
218
  const genInfoForm = (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form;
219
219
  const isNeedSave = (_c = genInfoForm) === null || _c === void 0 ? void 0 : _c.isNeedSave;
220
+ // 1. Parameter Wajib (Selalu dikirim di semua skenario)
220
221
  const parameterList = [
221
222
  this.initParam('platform', ((_e = (_d = genInfoForm) === null || _d === void 0 ? void 0 : _d.template) === null || _e === void 0 ? void 0 : _e.platform) || 'WA', 'string'),
222
- this.initParam('templateName', (_g = (_f = genInfoForm) === null || _f === void 0 ? void 0 : _f.template) === null || _g === void 0 ? void 0 : _g.name, 'string'),
223
- this.initParam('templateLang', (_j = (_h = genInfoForm) === null || _h === void 0 ? void 0 : _h.template) === null || _j === void 0 ? void 0 : _j.lang, 'string'),
224
- this.initParam('category', (_l = (_k = this.categorySelected) === null || _k === void 0 ? void 0 : _k.map((t) => t.id).join(), (_l !== null && _l !== void 0 ? _l : '')), 'string'),
223
+ this.initParam('category', (_g = (_f = this.categorySelected) === null || _f === void 0 ? void 0 : _f.map((t) => t.id).join(), (_g !== null && _g !== void 0 ? _g : '')), // <-- Category selalu dikirim
224
+ 'string'),
225
225
  ];
226
- // 2. Parameter Tambahan HANYA JIKA skenario Create New (Belum di-save)
227
- if (!isNeedSave) {
228
- const safeBodyText = encodeURIComponent(((_m = genInfoForm) === null || _m === void 0 ? void 0 : _m.text) || '');
226
+ if (isNeedSave) {
227
+ // SKENARIO 1: USE EXISTING / TEMPLATE SUDAH DISAVE
228
+ parameterList.push(this.initParam('templateName', (_j = (_h = genInfoForm) === null || _h === void 0 ? void 0 : _h.template) === null || _j === void 0 ? void 0 : _j.name, 'string'), this.initParam('templateLang', (_l = (_k = genInfoForm) === null || _k === void 0 ? void 0 : _k.template) === null || _l === void 0 ? void 0 : _l.lang, 'string'));
229
+ }
230
+ else {
231
+ // SKENARIO 2: CREATE NEW / DIRECT SEND (Belum di-save)
232
+ // Cek aman: Kirim templateName & Lang HANYA kalau ada (biar nggak undefined)
233
+ if ((_o = (_m = genInfoForm) === null || _m === void 0 ? void 0 : _m.template) === null || _o === void 0 ? void 0 : _o.name) {
234
+ parameterList.push(this.initParam('templateName', (_q = (_p = genInfoForm) === null || _p === void 0 ? void 0 : _p.template) === null || _q === void 0 ? void 0 : _q.name, 'string'));
235
+ }
236
+ if ((_s = (_r = genInfoForm) === null || _r === void 0 ? void 0 : _r.template) === null || _s === void 0 ? void 0 : _s.lang) {
237
+ parameterList.push(this.initParam('templateLang', (_u = (_t = genInfoForm) === null || _t === void 0 ? void 0 : _t.template) === null || _u === void 0 ? void 0 : _u.lang, 'string'));
238
+ }
239
+ // Variabel khusus Direct Send
240
+ const safeBodyText = encodeURIComponent(((_v = genInfoForm) === null || _v === void 0 ? void 0 : _v.text) || '');
229
241
  parameterList.push(this.initParam('bodyText', safeBodyText, 'string'));
230
- const variables = (_o = genInfoForm) === null || _o === void 0 ? void 0 : _o.variables;
242
+ const variables = (_w = genInfoForm) === null || _w === void 0 ? void 0 : _w.variables;
231
243
  if (variables && Array.isArray(variables) && variables.length > 0) {
232
244
  const bodyExamplesString = variables.map((v) => v.paramName).join(',');
233
245
  const safeBodyExamples = encodeURIComponent(bodyExamplesString);
234
246
  parameterList.push(this.initParam('bodyExamples', safeBodyExamples, 'string'));
235
247
  }
236
- if ((_r = (_q = (_p = genInfoForm) === null || _p === void 0 ? void 0 : _p.template) === null || _q === void 0 ? void 0 : _q.header) === null || _r === void 0 ? void 0 : _r.text) {
248
+ if ((_z = (_y = (_x = genInfoForm) === null || _x === void 0 ? void 0 : _x.template) === null || _y === void 0 ? void 0 : _y.header) === null || _z === void 0 ? void 0 : _z.text) {
237
249
  const safeHeaderText = encodeURIComponent(genInfoForm.template.header.text);
238
250
  parameterList.push(this.initParam('headerText', safeHeaderText, 'string'));
239
251
  }
@@ -337,4 +349,4 @@ NewNumberBasesComponent = __decorate([
337
349
  })
338
350
  ], NewNumberBasesComponent);
339
351
  export { NewNumberBasesComponent };
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LW51bWJlci1iYXNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vbmV3LW51bWJlci1iYXNlcy9uZXctbnVtYmVyLWJhc2VzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU96RCxJQUFhLHVCQUF1QixHQUFwQyxNQUFhLHVCQUF1QjtJQWdDaEMsWUFDWSxpQkFBMkMsRUFDM0MsTUFBcUI7UUFEckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQUMzQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBeEIxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5QyxjQUFTLEdBQUcsSUFBSSxjQUFjLENBQXVCLElBQUksRUFBRSxF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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0osQ0FBQTs7WUFoWGtDLHdCQUF3QjtZQUNuQyxhQUFhOztBQWhDakM7SUFEQyxNQUFNLEVBQUU7K0RBTU47QUFxQk07SUFBUixLQUFLLEVBQUU7K0RBQWdDO0FBRXBCO0lBQW5CLFNBQVMsQ0FBQyxPQUFPLENBQUM7d0RBQWtCO0FBOUI1Qix1QkFBdUI7SUFMbkMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLHNCQUFzQjtRQUNoQyx5dEpBQWdEOztLQUVuRCxDQUFDO0dBQ1csdUJBQXVCLENBaVpuQztTQWpaWSx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBIdHRwQm9keVJlcVBhZ2luYXRpb25Nb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgUGFyYW1ldGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRpbC9hcGktYWRhcHRlci1zZXJ2aWNlLW1vZGVscyc7XHJcbmltcG9ydCB7IEFwcFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMvdXRpbC9hcGktZHRvL3Jlc3BvbnNlLW1vZGVscyc7XHJcbmltcG9ydCB7IEFwaUFkYXB0ZXJTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZXMnO1xyXG5pbXBvcnQgeyBkb3dubG9hZEJsb2JGaWxlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlsJztcclxuaW1wb3J0IHsgQ29udGFjdENhdGVnb3J5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vY2FtcGFpZ24taW5kZXgvbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdsaWItbmV3LW51bWJlci1iYXNlcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbmV3LW51bWJlci1iYXNlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9uZXctbnVtYmVyLWJhc2VzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZXdOdW1iZXJCYXNlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHRhcmdldEF1ZGllbmNlOiBFdmVudEVtaXR0ZXI8e1xyXG4gICAgICAgIHRhcmdldEF1ZGllbmNlOiBzdHJpbmdbXTtcclxuICAgICAgICBudW1iZXJDb3VudDogbnVtYmVyO1xyXG4gICAgICAgIGlzVXBsb2FkOiBib29sZWFuO1xyXG4gICAgICAgIGZpbGU6IGFueTtcclxuICAgIH0+O1xyXG5cclxuICAgIHB1YmxpYyB0YWJsZTogVGFibGVNb2RlbDtcclxuICAgIHB1YmxpYyBpc1VwbG9hZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzU2hvd1VwbG9hZENTVjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGNhdGVnb3J5U2VsZWN0ZWQ6IENvbnRhY3RDYXRlZ29yeU1vZGVsW10gPSBbXTtcclxuICAgIHB1YmxpYyBzZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8Q29udGFjdENhdGVnb3J5TW9kZWw+KHRydWUsIFtdKTtcclxuICAgIHB1YmxpYyBleHRGaWxlQWNjZXB0ZWQ6IHN0cmluZ1tdID0gW1xyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxyXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcsXHJcbiAgICAgICAgJy5jc3YnLFxyXG4gICAgXTtcclxuICAgIHB1YmxpYyBmaWxlU2VsZWN0ZWQ6IHtcclxuICAgICAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgdGFyZ2V0VVJMOiBzdHJpbmc7XHJcbiAgICB9ID0gbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIGNhdGVnb3J5UGFyYW06IEh0dHBCb2R5UmVxUGFnaW5hdGlvbk1vZGVsO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVyczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNSZWFkT25seU1vZGU6IGJvb2xlYW47XHJcblxyXG4gICAgQFZpZXdDaGlsZChNYXRTb3J0KSBtYXRTb3J0OiBNYXRTb3J0O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYXBpQWRhcHRlclNlcnZpY2U6IEFwaUFkYXB0ZXJTZXJ2aWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5UGFyYW0gPSBuZXcgSHR0cEJvZHlSZXFQYWdpbmF0aW9uTW9kZWwoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcclxuICAgICAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlLmVtaXQoe1xyXG4gICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogW10sXHJcbiAgICAgICAgICAgIG51bWJlckNvdW50OiAwLFxyXG4gICAgICAgICAgICBpc1VwbG9hZDogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uaXNVcGxvYWQsXHJcbiAgICAgICAgICAgIGZpbGU6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/LnRhcmdldFVSTCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRUYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRhYmxlID0gbmV3IFRhYmxlTW9kZWwoKTtcclxuICAgICAgICB0aGlzLnRhYmxlLmxhYmVscyA9IFtcclxuICAgICAgICAgICAgJ3NlbGVjdCcsXHJcbiAgICAgICAgICAgICdDYXRlZ29yeScsXHJcbiAgICAgICAgICAgICdOby4gT2YgQ3VzdG9tZXInLFxyXG4gICAgICAgICAgICAnQ3JlYXRlZCBEYXRlJyxcclxuICAgICAgICAgICAgJ1VwZGF0ZWQgRGF0ZScsXHJcbiAgICAgICAgXTtcclxuICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnMgPSBbJ3NlbGVjdCcsICduYW1lJywgJ3RvdGFsTWVtYmVycycsICdjcmVhdGVkRGF0ZScsICd1cGRhdGVkRGF0ZSddO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRDYW1wYWlnblN0b3JhZ2UoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJylcclxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZWxpbi5jYW1wYWlnbicpKVxyXG4gICAgICAgICAgICA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEVkaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5lbnRyaWVzKHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlKS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZ2VuSW5mb0Zvcm0gPSB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtO1xyXG4gICAgICAgIHRoaXMuaXNTaG93VXBsb2FkQ1NWID0gZ2VuSW5mb0Zvcm0/LmlzVXBsb2FkIHx8IGdlbkluZm9Gb3JtPy5pc0Rvd25sb2FkVmFyaWFibGVYTFM7XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZVNlbGVjdGVkID0ge1xyXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy5uYW1lLFxyXG4gICAgICAgICAgICB0YXJnZXRVUkw6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/LnRhcmdldFVSTCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZGF0YT8uZm9yRWFjaCgoZWFjaCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlPy5pbmNsdWRlcyhlYWNoLmlkKSlcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGVja2VkKHRydWUsIGVhY2gpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcnlMaXN0KGZpbHRlcjogc3RyaW5nID0gJycpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHlNb2RlKSB0aGlzLmNhdGVnb3J5UGFyYW0ucGFnZVNpemUgPSAxMDAwO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGFnZU5vJywgdGhpcy5jYXRlZ29yeVBhcmFtLnBhZ2VObywgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncm93UGVyUGFnZScsIHRoaXMuY2F0ZWdvcnlQYXJhbS5wYWdlU2l6ZSwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnZmlsdGVyJywgZmlsdGVyLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKFxyXG4gICAgICAgICAgICAgICAgJ3BsYXRmb3JtJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0/Lm1lZGl1bSxcclxuICAgICAgICAgICAgICAgICdzdHJpbmcnXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0/Lm1lZGl1bSA9PT0gJ0xJTkUnKVxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRQYXJhbShcclxuICAgICAgICAgICAgICAgICAgICAnYWNjb3VudElkJyxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5mcm9tPy5pZCxcclxuICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJ1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5TW9kZSkgcGFyYW1ldGVyTGlzdC5wdXNoKHRoaXMuaW5pdFBhcmFtKCdzdW1tYXJ5JywgdHJ1ZSwgJ3N0cmluZycpKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvYWRtaW4vY2F0ZWdvcnknLCAnR0VUJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcDogQXBwUmVzcG9uc2U8Q29udGFjdENhdGVnb3J5TW9kZWxbXT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHlNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGEgPSByZXNwLmRhdGE/LmZpbHRlcigoZWFjaCkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlPy5pbmNsdWRlcyhlYWNoLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlTZWxlY3RlZCA9IHRoaXMudGFibGUuZGF0YVNvdXJjZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZGF0YSA9IHJlc3AuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc2V0TmV4dFBhZ2UocmVzcC5oYXZlTmV4dCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFBhcmFtKF9uYW1lOiBzdHJpbmcsIF92YWx1ZTogYW55LCBfdHlwZTogc3RyaW5nKTogUGFyYW1ldGVyIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBuYW1lOiBfbmFtZSxcclxuICAgICAgICAgICAgdmFsdWU6IF92YWx1ZSxcclxuICAgICAgICAgICAgaW46ICdxdWVyeScsXHJcbiAgICAgICAgICAgIHR5cGU6IF90eXBlLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlYXJjaChzZWFyY2hWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50YWJsZS5yZXNldFBhZ2UoKTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5UGFyYW0ucGFnZU5vID0gdGhpcy50YWJsZS5wYWdlO1xyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KHNlYXJjaFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdXBkYXRlUGFnZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFibGUucGFnZVNpemUgIT09IGV2ZW50Py5wYWdlU2l6ZSkgdGhpcy50YWJsZS5yZXNldFBhZ2UoKTtcclxuXHJcbiAgICAgICAgdGhpcy50YWJsZS5wYWdlID1cclxuICAgICAgICAgICAgdGhpcy50YWJsZS5wYWdlU2l6ZSAhPT0gZXZlbnQ/LnBhZ2VTaXplID8gdGhpcy50YWJsZS5wYWdlIDogZXZlbnQ/LnBhZ2VJbmRleCArIDE7XHJcbiAgICAgICAgdGhpcy50YWJsZS5wYWdlU2l6ZSA9IGV2ZW50Py5wYWdlU2l6ZTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5UGFyYW0ucGFnZU5vID0gdGhpcy50YWJsZS5wYWdlO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlQYXJhbS5wYWdlU2l6ZSA9IHRoaXMudGFibGUucGFnZVNpemU7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNvcnQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50YWJsZS5kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoZWNrYm94TGFiZWwocm93PzogQ29udGFjdENhdGVnb3J5TW9kZWwpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghcm93KSByZXR1cm4gYCR7dGhpcy5pc0FsbFNlbGVjdGVkKCkgPyAnZGVzZWxlY3QnIDogJ3NlbGVjdCd9IGFsbGA7XHJcblxyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdykgPyAnZGVzZWxlY3QnIDogJ3NlbGVjdCd9IHJvdyAke3Jvdy5uYW1lICsgMX1gO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCkge1xyXG4gICAgICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZGF0YT8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGEgJiZcclxuICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZGF0YSBvZiB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZpbHRlcigodCkgPT4gdC5pZCA9PT0gZGF0YS5pZCkubGVuZ3RoID4gMCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG1hc3RlclRvZ2dsZShpc0NoZWNrZWQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBpZiAoIWlzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2UuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogW10sXHJcbiAgICAgICAgICAgICAgICBudW1iZXJDb3VudDogMCxcclxuICAgICAgICAgICAgICAgIGlzVXBsb2FkOiB0aGlzLmlzU2hvd1VwbG9hZENTVixcclxuICAgICAgICAgICAgICAgIGZpbGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFVSTDogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8udGFyZ2V0VVJMLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4udGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGEpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlTZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlLmVtaXQoe1xyXG4gICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogdGhpcy5jYXRlZ29yeVNlbGVjdGVkLm1hcCgodCkgPT4gdC5pZCksXHJcbiAgICAgICAgICAgIG51bWJlckNvdW50OiB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHgudG90YWxNZW1iZXJzLCAwKSxcclxuICAgICAgICAgICAgaXNVcGxvYWQ6IHRoaXMuaXNTaG93VXBsb2FkQ1NWLFxyXG4gICAgICAgICAgICBmaWxlOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0VVJMOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy50YXJnZXRVUkwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hlY2tlZChpc0NoZWNrZWQ6IGJvb2xlYW4sIHJvdzogQ29udGFjdENhdGVnb3J5TW9kZWwpIHtcclxuICAgICAgICBpZiAoIWlzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdCguLi50aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5maWx0ZXIoKHgpID0+IHguaWQgPT09IHJvdy5pZCkpO1xyXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2UuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogdGhpcy5jYXRlZ29yeVNlbGVjdGVkLm1hcCgodCkgPT4gdC5pZCksXHJcbiAgICAgICAgICAgICAgICBudW1iZXJDb3VudDogdGhpcy5jYXRlZ29yeVNlbGVjdGVkLnJlZHVjZSgoc3VtLCB4KSA9PiBzdW0gKyB4LnRvdGFsTWVtYmVycywgMCksXHJcbiAgICAgICAgICAgICAgICBpc1VwbG9hZDogdGhpcy5pc1Nob3dVcGxvYWRDU1YsXHJcbiAgICAgICAgICAgICAgICBmaWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/LnRhcmdldFVSTCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2UuZW1pdCh7XHJcbiAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlOiB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQubWFwKCh0KSA9PiB0LmlkKSxcclxuICAgICAgICAgICAgbnVtYmVyQ291bnQ6IHRoaXMuY2F0ZWdvcnlTZWxlY3RlZC5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC50b3RhbE1lbWJlcnMsIDApLFxyXG4gICAgICAgICAgICBpc1VwbG9hZDogdGhpcy5pc1Nob3dVcGxvYWRDU1YsXHJcbiAgICAgICAgICAgIGZpbGU6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/LnRhcmdldFVSTCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja2VkKHJvdzogQ29udGFjdENhdGVnb3J5TW9kZWwpIHtcclxuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmZpbmQoKHgpID0+IHguaWQgPT09IHJvdy5pZCk7XHJcbiAgICAgICAgcmV0dXJuIGZvdW5kID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkRvd25sb2FkU2FtcGxlU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBnZW5JbmZvRm9ybSA9IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm07XHJcbiAgICAgICAgY29uc3QgaXNOZWVkU2F2ZSA9IGdlbkluZm9Gb3JtPy5pc05lZWRTYXZlO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGxhdGZvcm0nLCBnZW5JbmZvRm9ybT8udGVtcGxhdGU/LnBsYXRmb3JtIHx8ICdXQScsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3RlbXBsYXRlTmFtZScsIGdlbkluZm9Gb3JtPy50ZW1wbGF0ZT8ubmFtZSwgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgndGVtcGxhdGVMYW5nJywgZ2VuSW5mb0Zvcm0/LnRlbXBsYXRlPy5sYW5nLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKFxyXG4gICAgICAgICAgICAgICAgJ2NhdGVnb3J5JyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2F0ZWdvcnlTZWxlY3RlZD8ubWFwKCh0KSA9PiB0LmlkKS5qb2luKCkgPz8gJycsXHJcbiAgICAgICAgICAgICAgICAnc3RyaW5nJ1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIC8vIDIuIFBhcmFtZXRlciBUYW1iYWhhbiBIQU5ZQSBKSUtBIHNrZW5hcmlvIENyZWF0ZSBOZXcgKEJlbHVtIGRpLXNhdmUpXHJcbiAgICAgICAgaWYgKCFpc05lZWRTYXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNhZmVCb2R5VGV4dCA9IGVuY29kZVVSSUNvbXBvbmVudChnZW5JbmZvRm9ybT8udGV4dCB8fCAnJyk7XHJcbiAgICAgICAgICAgIHBhcmFtZXRlckxpc3QucHVzaCh0aGlzLmluaXRQYXJhbSgnYm9keVRleHQnLCBzYWZlQm9keVRleHQsICdzdHJpbmcnKSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZXMgPSBnZW5JbmZvRm9ybT8udmFyaWFibGVzO1xyXG4gICAgICAgICAgICBpZiAodmFyaWFibGVzICYmIEFycmF5LmlzQXJyYXkodmFyaWFibGVzKSAmJiB2YXJpYWJsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keUV4YW1wbGVzU3RyaW5nID0gdmFyaWFibGVzLm1hcCgodjogYW55KSA9PiB2LnBhcmFtTmFtZSkuam9pbignLCcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2FmZUJvZHlFeGFtcGxlcyA9IGVuY29kZVVSSUNvbXBvbmVudChib2R5RXhhbXBsZXNTdHJpbmcpO1xyXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKHRoaXMuaW5pdFBhcmFtKCdib2R5RXhhbXBsZXMnLCBzYWZlQm9keUV4YW1wbGVzLCAnc3RyaW5nJykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZ2VuSW5mb0Zvcm0/LnRlbXBsYXRlPy5oZWFkZXI/LnRleHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNhZmVIZWFkZXJUZXh0ID0gZW5jb2RlVVJJQ29tcG9uZW50KGdlbkluZm9Gb3JtLnRlbXBsYXRlLmhlYWRlci50ZXh0KTtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckxpc3QucHVzaCh0aGlzLmluaXRQYXJhbSgnaGVhZGVyVGV4dCcsIHNhZmVIZWFkZXJUZXh0LCAnc3RyaW5nJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9tZXNzYWdlL2J1bGt1cGxvYWQvdGVtcGxhdGUnLCAnR0VUJywgdHJ1ZSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcDogQXBwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZG93bmxvYWRCbG9iRmlsZShyZXNwLCAnU2FtcGxlLVVwbG9hZFBhcmFtZXRlci54bHN4Jyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRmlsZVNlbGVjdGVkKGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGU6IEZpbGVMaXN0ID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcztcclxuICAgICAgICBjb25zdCBNQVhJTVVNX1NJWkUgPSAzMCAqIDEwMjQgKiAxMDI0O1xyXG5cclxuICAgICAgICBpZiAoZmlsZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGZpbGVbMF0uc2l6ZSA+IE1BWElNVU1fU0laRSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVXBsb2FkIG1lZGlhIGZhaWxlZCwgbWF4IHNpemUgMzBtYicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldFByZXNpZ25lZFVybFNlcnZpY2UoZmlsZVswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQcmVzaWduZWRVcmxTZXJ2aWNlKGZpbGU6IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzVXBsb2FkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtcclxuICAgICAgICAgICAgeyBuYW1lOiAnZmlsZU5hbWUnLCB2YWx1ZTogZmlsZS5uYW1lLCBpbjogJ3F1ZXJ5JywgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICAgICAgeyBuYW1lOiAnZmlsZVR5cGUnLCB2YWx1ZTogZmlsZS50eXBlLCBpbjogJ3F1ZXJ5JywgdHlwZTogJ3N0cmluZycgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9jYW1wYWlnbi91cGxvYWQvcHJlLXNpZ25lZC11cmwnLCAnR0VUJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXNwOiBBcHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3AgJiYgcmVzcC5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkVG9TM1NlcnZpY2UoZmlsZSwgcmVzcC5kYXRhLnVybCwgcmVzcC5kYXRhLmZpbGVOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4gKHRoaXMuaXNVcGxvYWQgPSBmYWxzZSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkVG9TM1NlcnZpY2UoZmlsZTogRmlsZSwgczNVcmw6IHN0cmluZywgZmlsZU5hbWVTMzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5hcGlBZGFwdGVyU2VydmljZS51cGxvYWRGaWxlVG9TMyhzM1VybCwgZmlsZSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmFsaXplVGFyZ2V0RmlsZVNlcnZpY2UoZmlsZU5hbWVTMyk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdGYWlsZWQgdXBsb2FkaW5nIHRvIFMzIHN0b3JhZ2UnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNVcGxvYWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1MzIFVwbG9hZCBFcnJvcjonLCBlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmFsaXplVGFyZ2V0RmlsZVNlcnZpY2UoZmlsZU5hbWVTMzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ25JZCA9IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmlkO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB7IGZpbGVOYW1lOiBmaWxlTmFtZVMzIH0sXHJcbiAgICAgICAgICAgICAgICBpbjogJ2JvZHknLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXHJcbiAgICAgICAgICAgICAgICB3aXRob3V0S2V5RGF0YTogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgYC9jYW1wYWlnbi8ke2NhbXBhaWduSWR9L3RhcmdldGZpbGVgLCAnUE9TVCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzcDogQXBwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzcCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5pbmZvKCdVcGxvYWQgWExTWCBoYXMgYmVlbiB1cGxvYWRlZCBzdWNjZXNzZnVsbHknKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVXBsb2FkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2UuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEF1ZGllbmNlOiB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQubWFwKCh0KSA9PiB0LmlkKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyQ291bnQ6IHRoaXMuY2F0ZWdvcnlTZWxlY3RlZC5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VtLCB4KSA9PiBzdW0gKyB4LnRvdGFsTWVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNVcGxvYWQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVOYW1lUzMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHJlc3AuZGF0YT8udGFyZ2V0VVJMIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+ICh0aGlzLmlzVXBsb2FkID0gZmFsc2UpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLmZvckVhY2goKGVhY2gpID0+IGVhY2gudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV3LW51bWJlci1iYXNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vbmV3LW51bWJlci1iYXNlcy9uZXctbnVtYmVyLWJhc2VzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTNDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU96RCxJQUFhLHVCQUF1QixHQUFwQyxNQUFhLHVCQUF1QjtJQWdDaEMsWUFDWSxpQkFBMkMsRUFDM0MsTUFBcUI7UUFEckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUEwQjtRQUMzQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBeEIxQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFDakMscUJBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUM5QyxjQUFTLEdBQUcsSUFBSSxjQUFjLENBQXVCLElBQUksRUFBRSxF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QUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELFdBQVcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUNyQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUNoQyxDQUFDLENBQ0o7Z0JBQ0QsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsSUFBSSxFQUFFO29CQUNGLElBQUksRUFBRSxVQUFVO29CQUNoQixTQUFTLEVBQUUsT0FBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxTQUFTLEtBQUksRUFBRTtpQkFDeEM7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQ0QsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUNoQyxDQUFDO1FBRU4sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDM0QsQ0FBQztDQUNKLENBQUE7O1lBbllrQyx3QkFBd0I7WUFDbkMsYUFBYTs7QUFoQ2pDO0lBREMsTUFBTSxFQUFFOytEQU1OO0FBcUJNO0lBQVIsS0FBSyxFQUFFOytEQUFnQztBQUVwQjtJQUFuQixTQUFTLENBQUMsT0FBTyxDQUFDO3dEQUFrQjtBQTlCNUIsdUJBQXVCO0lBTG5DLFNBQVMsQ0FBQztRQUNQLFFBQVEsRUFBRSxzQkFBc0I7UUFDaEMseXRKQUFnRDs7S0FFbkQsQ0FBQztHQUNXLHVCQUF1QixDQW9hbkM7U0FwYVksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSHR0cEJvZHlSZXFQYWdpbmF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFBhcmFtZXRlciB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWxzL3V0aWwvYXBpLWFkYXB0ZXItc2VydmljZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcHBSZXNwb25zZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWxzL3V0aWwvYXBpLWR0by9yZXNwb25zZS1tb2RlbHMnO1xyXG5pbXBvcnQgeyBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgZG93bmxvYWRCbG9iRmlsZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB7IENvbnRhY3RDYXRlZ29yeU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL2NhbXBhaWduLWluZGV4L21vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLW5ldy1udW1iZXItYmFzZXMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25ldy1udW1iZXItYmFzZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbmV3LW51bWJlci1iYXNlcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmV3TnVtYmVyQmFzZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB0YXJnZXRBdWRpZW5jZTogRXZlbnRFbWl0dGVyPHtcclxuICAgICAgICB0YXJnZXRBdWRpZW5jZTogc3RyaW5nW107XHJcbiAgICAgICAgbnVtYmVyQ291bnQ6IG51bWJlcjtcclxuICAgICAgICBpc1VwbG9hZDogYm9vbGVhbjtcclxuICAgICAgICBmaWxlOiBhbnk7XHJcbiAgICB9PjtcclxuXHJcbiAgICBwdWJsaWMgdGFibGU6IFRhYmxlTW9kZWw7XHJcbiAgICBwdWJsaWMgaXNVcGxvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1Nob3dVcGxvYWRDU1Y6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBjYXRlZ29yeVNlbGVjdGVkOiBDb250YWN0Q2F0ZWdvcnlNb2RlbFtdID0gW107XHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPENvbnRhY3RDYXRlZ29yeU1vZGVsPih0cnVlLCBbXSk7XHJcbiAgICBwdWJsaWMgZXh0RmlsZUFjY2VwdGVkOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcclxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxyXG4gICAgICAgICcuY3N2JyxcclxuICAgIF07XHJcbiAgICBwdWJsaWMgZmlsZVNlbGVjdGVkOiB7XHJcbiAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgIHRhcmdldFVSTDogc3RyaW5nO1xyXG4gICAgfSA9IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBjYXRlZ29yeVBhcmFtOiBIdHRwQm9keVJlcVBhZ2luYXRpb25Nb2RlbDtcclxuICAgIHByaXZhdGUgc3Vic2NyaWJlcnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZE9ubHlNb2RlOiBib29sZWFuO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoTWF0U29ydCkgbWF0U29ydDogTWF0U29ydDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFwaUFkYXB0ZXJTZXJ2aWNlOiBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMudGFyZ2V0QXVkaWVuY2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeVBhcmFtID0gbmV3IEh0dHBCb2R5UmVxUGFnaW5hdGlvbk1vZGVsKCk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFRhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZS5lbWl0KHtcclxuICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2U6IFtdLFxyXG4gICAgICAgICAgICBudW1iZXJDb3VudDogMCxcclxuICAgICAgICAgICAgaXNVcGxvYWQ6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0/LmlzVXBsb2FkLFxyXG4gICAgICAgICAgICBmaWxlOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0VVJMOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy50YXJnZXRVUkwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VGFibGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50YWJsZSA9IG5ldyBUYWJsZU1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy50YWJsZS5sYWJlbHMgPSBbXHJcbiAgICAgICAgICAgICdzZWxlY3QnLFxyXG4gICAgICAgICAgICAnQ2F0ZWdvcnknLFxyXG4gICAgICAgICAgICAnTm8uIE9mIEN1c3RvbWVyJyxcclxuICAgICAgICAgICAgJ0NyZWF0ZWQgRGF0ZScsXHJcbiAgICAgICAgICAgICdVcGRhdGVkIERhdGUnLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy50YWJsZS5jb2x1bW5zID0gWydzZWxlY3QnLCAnbmFtZScsICd0b3RhbE1lbWJlcnMnLCAnY3JlYXRlZERhdGUnLCAndXBkYXRlZERhdGUnXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Q2FtcGFpZ25TdG9yYWdlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0ZWxpbi5jYW1wYWlnbicpXHJcbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndGVsaW4uY2FtcGFpZ24nKSlcclxuICAgICAgICAgICAgOiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChPYmplY3QuZW50cmllcyh0aGlzLmdldENhbXBhaWduU3RvcmFnZSkubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGdlbkluZm9Gb3JtID0gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybTtcclxuICAgICAgICB0aGlzLmlzU2hvd1VwbG9hZENTViA9IGdlbkluZm9Gb3JtPy5pc1VwbG9hZCB8fCBnZW5JbmZvRm9ybT8uaXNEb3dubG9hZFZhcmlhYmxlWExTO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGVTZWxlY3RlZCA9IHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8ubmFtZSxcclxuICAgICAgICAgICAgdGFyZ2V0VVJMOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy50YXJnZXRVUkwsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGE/LmZvckVhY2goKGVhY2gpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZT8uaW5jbHVkZXMoZWFjaC5pZCkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tlZCh0cnVlLCBlYWNoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENhdGVnb3J5TGlzdChmaWx0ZXI6IHN0cmluZyA9ICcnKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5TW9kZSkgdGhpcy5jYXRlZ29yeVBhcmFtLnBhZ2VTaXplID0gMTAwMDtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3BhZ2VObycsIHRoaXMuY2F0ZWdvcnlQYXJhbS5wYWdlTm8sICdudW1iZXInKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3Jvd1BlclBhZ2UnLCB0aGlzLmNhdGVnb3J5UGFyYW0ucGFnZVNpemUsICdudW1iZXInKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ2ZpbHRlcicsIGZpbHRlciwgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbShcclxuICAgICAgICAgICAgICAgICdwbGF0Zm9ybScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5tZWRpdW0sXHJcbiAgICAgICAgICAgICAgICAnc3RyaW5nJ1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5tZWRpdW0gPT09ICdMSU5FJylcclxuICAgICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oXHJcbiAgICAgICAgICAgICAgICAgICAgJ2FjY291bnRJZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZnJvbT8uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3N0cmluZydcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkT25seU1vZGUpIHBhcmFtZXRlckxpc3QucHVzaCh0aGlzLmluaXRQYXJhbSgnc3VtbWFyeScsIHRydWUsICdzdHJpbmcnKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChwYXJhbWV0ZXJMaXN0LCAnL2FkbWluL2NhdGVnb3J5JywgJ0dFVCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3A6IEFwcFJlc3BvbnNlPENvbnRhY3RDYXRlZ29yeU1vZGVsW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1JlYWRPbmx5TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5kYXRhID0gcmVzcC5kYXRhPy5maWx0ZXIoKGVhY2gpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZT8uaW5jbHVkZXMoZWFjaC5pZClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQgPSB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEVkaXQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGEgPSByZXNwLmRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnNldE5leHRQYWdlKHJlc3AuaGF2ZU5leHQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEVkaXQoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQYXJhbShfbmFtZTogc3RyaW5nLCBfdmFsdWU6IGFueSwgX3R5cGU6IHN0cmluZyk6IFBhcmFtZXRlciB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogX25hbWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBfdmFsdWUsXHJcbiAgICAgICAgICAgIGluOiAncXVlcnknLFxyXG4gICAgICAgICAgICB0eXBlOiBfdHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTZWFyY2goc2VhcmNoVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGUucmVzZXRQYWdlKCk7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeVBhcmFtLnBhZ2VObyA9IHRoaXMudGFibGUucGFnZTtcclxuICAgICAgICB0aGlzLmdldENhdGVnb3J5TGlzdChzZWFyY2hWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVBhZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlLnBhZ2VTaXplICE9PSBldmVudD8ucGFnZVNpemUpIHRoaXMudGFibGUucmVzZXRQYWdlKCk7XHJcblxyXG4gICAgICAgIHRoaXMudGFibGUucGFnZSA9XHJcbiAgICAgICAgICAgIHRoaXMudGFibGUucGFnZVNpemUgIT09IGV2ZW50Py5wYWdlU2l6ZSA/IHRoaXMudGFibGUucGFnZSA6IGV2ZW50Py5wYWdlSW5kZXggKyAxO1xyXG4gICAgICAgIHRoaXMudGFibGUucGFnZVNpemUgPSBldmVudD8ucGFnZVNpemU7XHJcbiAgICAgICAgdGhpcy5jYXRlZ29yeVBhcmFtLnBhZ2VObyA9IHRoaXMudGFibGUucGFnZTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5UGFyYW0ucGFnZVNpemUgPSB0aGlzLnRhYmxlLnBhZ2VTaXplO1xyXG5cclxuICAgICAgICB0aGlzLmdldENhdGVnb3J5TGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzb3J0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGVja2JveExhYmVsKHJvdz86IENvbnRhY3RDYXRlZ29yeU1vZGVsKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIXJvdykgcmV0dXJuIGAke3RoaXMuaXNBbGxTZWxlY3RlZCgpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSBhbGxgO1xyXG5cclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZChyb3cpID8gJ2Rlc2VsZWN0JyA6ICdzZWxlY3QnfSByb3cgJHtyb3cubmFtZSArIDF9YDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNBbGxTZWxlY3RlZCgpIHtcclxuICAgICAgICBjb25zdCBudW1TZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBudW1Sb3dzID0gdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGE/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5kYXRhICYmXHJcbiAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRhdGEgb2YgdGhpcy50YWJsZS5kYXRhU291cmNlLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5maWx0ZXIoKHQpID0+IHQuaWQgPT09IGRhdGEuaWQpLmxlbmd0aCA+IDApIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bVNlbGVjdGVkID09PSBudW1Sb3dzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXN0ZXJUb2dnbGUoaXNDaGVja2VkOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCFpc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeVNlbGVjdGVkID0gW107XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2U6IFtdLFxyXG4gICAgICAgICAgICAgICAgbnVtYmVyQ291bnQ6IDAsXHJcbiAgICAgICAgICAgICAgICBpc1VwbG9hZDogdGhpcy5pc1Nob3dVcGxvYWRDU1YsXHJcbiAgICAgICAgICAgICAgICBmaWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRVUkw6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/LnRhcmdldFVSTCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnRoaXMudGFibGUuZGF0YVNvdXJjZS5kYXRhKTtcclxuICAgICAgICB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcclxuXHJcbiAgICAgICAgdGhpcy50YXJnZXRBdWRpZW5jZS5lbWl0KHtcclxuICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2U6IHRoaXMuY2F0ZWdvcnlTZWxlY3RlZC5tYXAoKHQpID0+IHQuaWQpLFxyXG4gICAgICAgICAgICBudW1iZXJDb3VudDogdGhpcy5jYXRlZ29yeVNlbGVjdGVkLnJlZHVjZSgoc3VtLCB4KSA9PiBzdW0gKyB4LnRvdGFsTWVtYmVycywgMCksXHJcbiAgICAgICAgICAgIGlzVXBsb2FkOiB0aGlzLmlzU2hvd1VwbG9hZENTVixcclxuICAgICAgICAgICAgZmlsZToge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8ubmFtZSxcclxuICAgICAgICAgICAgICAgIHRhcmdldFVSTDogdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LnRhcmdldEF1ZGllbmNlRmlsZT8udGFyZ2V0VVJMLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNoZWNrZWQoaXNDaGVja2VkOiBib29sZWFuLCByb3c6IENvbnRhY3RDYXRlZ29yeU1vZGVsKSB7XHJcbiAgICAgICAgaWYgKCFpc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3QoLi4udGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQuZmlsdGVyKCh4KSA9PiB4LmlkID09PSByb3cuaWQpKTtcclxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeVNlbGVjdGVkID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0QXVkaWVuY2U6IHRoaXMuY2F0ZWdvcnlTZWxlY3RlZC5tYXAoKHQpID0+IHQuaWQpLFxyXG4gICAgICAgICAgICAgICAgbnVtYmVyQ291bnQ6IHRoaXMuY2F0ZWdvcnlTZWxlY3RlZC5yZWR1Y2UoKHN1bSwgeCkgPT4gc3VtICsgeC50b3RhbE1lbWJlcnMsIDApLFxyXG4gICAgICAgICAgICAgICAgaXNVcGxvYWQ6IHRoaXMuaXNTaG93VXBsb2FkQ1NWLFxyXG4gICAgICAgICAgICAgICAgZmlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy50YXJnZXRBdWRpZW5jZUZpbGU/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VVJMOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy50YXJnZXRVUkwsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3cpO1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlTZWxlY3RlZCA9IHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkO1xyXG5cclxuICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlLmVtaXQoe1xyXG4gICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogdGhpcy5jYXRlZ29yeVNlbGVjdGVkLm1hcCgodCkgPT4gdC5pZCksXHJcbiAgICAgICAgICAgIG51bWJlckNvdW50OiB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHgudG90YWxNZW1iZXJzLCAwKSxcclxuICAgICAgICAgICAgaXNVcGxvYWQ6IHRoaXMuaXNTaG93VXBsb2FkQ1NWLFxyXG4gICAgICAgICAgICBmaWxlOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0VVJMOiB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8udGFyZ2V0QXVkaWVuY2VGaWxlPy50YXJnZXRVUkwsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzQ2hlY2tlZChyb3c6IENvbnRhY3RDYXRlZ29yeU1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5maW5kKCh4KSA9PiB4LmlkID09PSByb3cuaWQpO1xyXG4gICAgICAgIHJldHVybiBmb3VuZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Eb3dubG9hZFNhbXBsZVNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZ2VuSW5mb0Zvcm0gPSB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtO1xyXG4gICAgICAgIGNvbnN0IGlzTmVlZFNhdmUgPSBnZW5JbmZvRm9ybT8uaXNOZWVkU2F2ZTtcclxuXHJcbiAgICAgICAgLy8gMS4gUGFyYW1ldGVyIFdhamliIChTZWxhbHUgZGlraXJpbSBkaSBzZW11YSBza2VuYXJpbylcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGxhdGZvcm0nLCBnZW5JbmZvRm9ybT8udGVtcGxhdGU/LnBsYXRmb3JtIHx8ICdXQScsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oXHJcbiAgICAgICAgICAgICAgICAnY2F0ZWdvcnknLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yeVNlbGVjdGVkPy5tYXAoKHQpID0+IHQuaWQpLmpvaW4oKSA/PyAnJywgLy8gPC0tIENhdGVnb3J5IHNlbGFsdSBkaWtpcmltXHJcbiAgICAgICAgICAgICAgICAnc3RyaW5nJ1xyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmIChpc05lZWRTYXZlKSB7XHJcbiAgICAgICAgICAgIC8vIFNLRU5BUklPIDE6IFVTRSBFWElTVElORyAvIFRFTVBMQVRFIFNVREFIIERJU0FWRVxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgndGVtcGxhdGVOYW1lJywgZ2VuSW5mb0Zvcm0/LnRlbXBsYXRlPy5uYW1lLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgndGVtcGxhdGVMYW5nJywgZ2VuSW5mb0Zvcm0/LnRlbXBsYXRlPy5sYW5nLCAnc3RyaW5nJylcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTS0VOQVJJTyAyOiBDUkVBVEUgTkVXIC8gRElSRUNUIFNFTkQgKEJlbHVtIGRpLXNhdmUpXHJcblxyXG4gICAgICAgICAgICAvLyBDZWsgYW1hbjogS2lyaW0gdGVtcGxhdGVOYW1lICYgTGFuZyBIQU5ZQSBrYWxhdSBhZGEgKGJpYXIgbmdnYWsgdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBpZiAoZ2VuSW5mb0Zvcm0/LnRlbXBsYXRlPy5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3RlbXBsYXRlTmFtZScsIGdlbkluZm9Gb3JtPy50ZW1wbGF0ZT8ubmFtZSwgJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChnZW5JbmZvRm9ybT8udGVtcGxhdGU/LmxhbmcpIHtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckxpc3QucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgndGVtcGxhdGVMYW5nJywgZ2VuSW5mb0Zvcm0/LnRlbXBsYXRlPy5sYW5nLCAnc3RyaW5nJylcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFZhcmlhYmVsIGtodXN1cyBEaXJlY3QgU2VuZFxyXG4gICAgICAgICAgICBjb25zdCBzYWZlQm9keVRleHQgPSBlbmNvZGVVUklDb21wb25lbnQoZ2VuSW5mb0Zvcm0/LnRleHQgfHwgJycpO1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2godGhpcy5pbml0UGFyYW0oJ2JvZHlUZXh0Jywgc2FmZUJvZHlUZXh0LCAnc3RyaW5nJykpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gZ2VuSW5mb0Zvcm0/LnZhcmlhYmxlcztcclxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlcyAmJiBBcnJheS5pc0FycmF5KHZhcmlhYmxlcykgJiYgdmFyaWFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHlFeGFtcGxlc1N0cmluZyA9IHZhcmlhYmxlcy5tYXAoKHY6IGFueSkgPT4gdi5wYXJhbU5hbWUpLmpvaW4oJywnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNhZmVCb2R5RXhhbXBsZXMgPSBlbmNvZGVVUklDb21wb25lbnQoYm9keUV4YW1wbGVzU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlckxpc3QucHVzaCh0aGlzLmluaXRQYXJhbSgnYm9keUV4YW1wbGVzJywgc2FmZUJvZHlFeGFtcGxlcywgJ3N0cmluZycpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGdlbkluZm9Gb3JtPy50ZW1wbGF0ZT8uaGVhZGVyPy50ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlSGVhZGVyVGV4dCA9IGVuY29kZVVSSUNvbXBvbmVudChnZW5JbmZvRm9ybS50ZW1wbGF0ZS5oZWFkZXIudGV4dCk7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2godGhpcy5pbml0UGFyYW0oJ2hlYWRlclRleHQnLCBzYWZlSGVhZGVyVGV4dCwgJ3N0cmluZycpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvbWVzc2FnZS9idWxrdXBsb2FkL3RlbXBsYXRlJywgJ0dFVCcsIHRydWUpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3A6IEFwcFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGRvd25sb2FkQmxvYkZpbGUocmVzcCwgJ1NhbXBsZS1VcGxvYWRQYXJhbWV0ZXIueGxzeCcpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBmaWxlOiBGaWxlTGlzdCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM7XHJcbiAgICAgICAgY29uc3QgTUFYSU1VTV9TSVpFID0gMzAgKiAxMDI0ICogMTAyNDtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChmaWxlWzBdLnNpemUgPiBNQVhJTVVNX1NJWkUpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VwbG9hZCBtZWRpYSBmYWlsZWQsIG1heCBzaXplIDMwbWInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRQcmVzaWduZWRVcmxTZXJ2aWNlKGZpbGVbMF0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0UHJlc2lnbmVkVXJsU2VydmljZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1VwbG9hZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZpbGVOYW1lJywgdmFsdWU6IGZpbGUubmFtZSwgaW46ICdxdWVyeScsIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgICAgIHsgbmFtZTogJ2ZpbGVUeXBlJywgdmFsdWU6IGZpbGUudHlwZSwgaW46ICdxdWVyeScsIHR5cGU6ICdzdHJpbmcnIH0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvY2FtcGFpZ24vdXBsb2FkL3ByZS1zaWduZWQtdXJsJywgJ0dFVCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzcDogQXBwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFRvUzNTZXJ2aWNlKGZpbGUsIHJlc3AuZGF0YS51cmwsIHJlc3AuZGF0YS5maWxlTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+ICh0aGlzLmlzVXBsb2FkID0gZmFsc2UpXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZFRvUzNTZXJ2aWNlKGZpbGU6IEZpbGUsIHMzVXJsOiBzdHJpbmcsIGZpbGVOYW1lUzM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYXBpQWRhcHRlclNlcnZpY2UudXBsb2FkRmlsZVRvUzMoczNVcmwsIGZpbGUpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVRhcmdldEZpbGVTZXJ2aWNlKGZpbGVOYW1lUzMpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHVwbG9hZGluZyB0byBTMyBzdG9yYWdlJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVXBsb2FkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTMyBVcGxvYWQgRXJyb3I6JywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVRhcmdldEZpbGVTZXJ2aWNlKGZpbGVOYW1lUzM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNhbXBhaWduSWQgPSB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5pZDtcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnYm9keScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogeyBmaWxlTmFtZTogZmlsZU5hbWVTMyB9LFxyXG4gICAgICAgICAgICAgICAgaW46ICdib2R5JyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICAgICAgd2l0aG91dEtleURhdGE6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsIGAvY2FtcGFpZ24vJHtjYW1wYWlnbklkfS90YXJnZXRmaWxlYCwgJ1BPU1QnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlc3A6IEFwcFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3ApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuaW5mbygnVXBsb2FkIFhMU1ggaGFzIGJlZW4gdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1VwbG9hZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldEF1ZGllbmNlLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRBdWRpZW5jZTogdGhpcy5jYXRlZ29yeVNlbGVjdGVkLm1hcCgodCkgPT4gdC5pZCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlckNvdW50OiB0aGlzLmNhdGVnb3J5U2VsZWN0ZWQucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1bSwgeCkgPT4gc3VtICsgeC50b3RhbE1lbWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVXBsb2FkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlTmFtZVMzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VVJMOiByZXNwLmRhdGE/LnRhcmdldFVSTCB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiAodGhpcy5pc1VwbG9hZCA9IGZhbHNlKVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vicyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChlYWNoKSA9PiBlYWNoLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==