@openziti/ziti-console-lib 0.6.8 → 0.7.0

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 (87) hide show
  1. package/assets/scripts/components/codemirror/codemirror.css +25 -25
  2. package/assets/scripts/components/codemirror/modes/addons/show-hint.css +8 -8
  3. package/assets/scripts/components/column.css +28 -28
  4. package/assets/scripts/components/leaflet/leaflet.css +94 -94
  5. package/assets/scripts/components/network/vis-network.css +209 -209
  6. package/assets/scripts/components/network/vis-network.min.css +1 -1
  7. package/assets/styles/chart.min.css +1 -1
  8. package/assets/styles/dark.css +2 -2
  9. package/assets/styles/datetimepicker.css +1 -1
  10. package/assets/styles/forms.css +119 -119
  11. package/assets/styles/global.scss +233 -232
  12. package/assets/styles/growler.css +50 -50
  13. package/assets/styles/header.css +65 -65
  14. package/assets/styles/navigation.css +45 -45
  15. package/assets/styles/select2.css +84 -84
  16. package/assets/styles/spectrum.css +79 -79
  17. package/assets/styles/tables.css +118 -118
  18. package/assets/styles/tooltip.css +18 -18
  19. package/assets/styles/ziti.css +728 -728
  20. package/esm2022/lib/features/card/card.component.mjs +2 -2
  21. package/esm2022/lib/features/card-list/card-list.component.mjs +2 -2
  22. package/esm2022/lib/features/confirm/confirm.component.mjs +2 -2
  23. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +2 -2
  24. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -2
  25. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +2 -2
  26. package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +2 -2
  27. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -2
  28. package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +2 -2
  29. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -2
  30. package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +2 -2
  31. package/esm2022/lib/features/data-table/data-table.component.mjs +12 -29
  32. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +2 -2
  33. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +2 -2
  34. package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +2 -2
  35. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +2 -2
  36. package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +2 -2
  37. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +2 -2
  38. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +2 -2
  39. package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +2 -2
  40. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +2 -2
  41. package/esm2022/lib/features/json-view/json-view.component.mjs +2 -2
  42. package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +2 -2
  43. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +2 -2
  44. package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -2
  45. package/esm2022/lib/features/messaging/growler.component.mjs +2 -2
  46. package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -2
  47. package/esm2022/lib/features/no-items/no-items.component.mjs +2 -2
  48. package/esm2022/lib/features/overrides/overrides.component.mjs +2 -2
  49. package/esm2022/lib/features/preview-list/preview-list.component.mjs +2 -2
  50. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +2 -2
  51. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +2 -2
  52. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +2 -2
  53. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +2 -2
  54. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +2 -2
  55. package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +2 -2
  56. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +2 -2
  57. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
  58. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +18 -3
  59. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +2 -2
  60. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +2 -2
  61. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +2 -2
  62. package/esm2022/lib/features/qr-code/qr-code.component.mjs +2 -2
  63. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +2 -2
  64. package/esm2022/lib/features/side-modal/side-modal.component.mjs +2 -2
  65. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
  66. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +2 -2
  67. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
  68. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -2
  69. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +2 -2
  70. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +20 -7
  71. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +162 -265
  72. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +2 -2
  73. package/esm2022/lib/pages/identities/identities-page.component.mjs +10 -3
  74. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +2 -2
  75. package/esm2022/lib/pages/services/services-page.component.mjs +2 -2
  76. package/esm2022/lib/version.mjs +2 -2
  77. package/fesm2022/openziti-ziti-console-lib.mjs +320 -405
  78. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  79. package/lib/features/data-table/data-table.component.d.ts +1 -0
  80. package/lib/features/data-table/data-table.component.d.ts.map +1 -1
  81. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +1 -0
  82. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  83. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts +1 -0
  84. package/lib/features/visualizer/network-visualizer/network-visualizer.component.d.ts.map +1 -1
  85. package/lib/features/visualizer/network-visualizer/network-visualizer.helper.d.ts.map +1 -1
  86. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  87. package/package.json +1 -1
@@ -66,6 +66,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
66
66
  this.resourceType = '';
67
67
  this.openNodes = [];
68
68
  this.contextmenuNodeType = [];
69
+ this.allPromises = [];
69
70
  // super(settingsService, zitiService);
70
71
  }
71
72
  ngOnInit() {
@@ -111,6 +112,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
111
112
  });
112
113
  });
113
114
  promises.push(tmp_promise);
115
+ this.allPromises.push(tmp_promise);
114
116
  }
115
117
  Promise.all(promises).then(() => {
116
118
  // this.identities_totalCount = this.identities.length;
@@ -145,6 +147,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
145
147
  });
146
148
  });
147
149
  s_promises.push(tmp_promise);
150
+ this.allPromises.push(tmp_promise);
148
151
  }
149
152
  Promise.all(s_promises).then(() => {
150
153
  // this.services_totalCount = this.services.length;
@@ -179,6 +182,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
179
182
  });
180
183
  });
181
184
  sp_promises.push(tmp_promise);
185
+ this.allPromises.push(tmp_promise);
182
186
  }
183
187
  Promise.all(sp_promises).then(() => {
184
188
  // this.service_policies_totalCount = this.service_policies.length;
@@ -213,6 +217,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
213
217
  });
214
218
  });
215
219
  r_promises.push(tmp_promise);
220
+ this.allPromises.push(tmp_promise);
216
221
  }
217
222
  Promise.all(r_promises).then(() => {
218
223
  // this.edgerouters_totalCount = this.edgerouters.length;
@@ -247,6 +252,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
247
252
  });
248
253
  });
249
254
  r_promises.push(tmp_promise);
255
+ this.allPromises.push(tmp_promise);
250
256
  }
251
257
  Promise.all(r_promises).then(() => {
252
258
  // this.edge_router_policies_totalCount = this.edge_router_policies.length;
@@ -268,7 +274,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
268
274
  this.isLoading = false;
269
275
  }
270
276
  else if (this.service_router_policies_totalCount < this.maxObjectsPerNode) {
271
- this.all_service_router_policies_fetched = false;
277
+ this.all_service_router_policies_fetched = true;
272
278
  const pages = Math.ceil(result.meta.pagination.totalCount / pagesize);
273
279
  const r_promises = [];
274
280
  for (let page = 2; page <= pages; page++) {
@@ -281,6 +287,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
281
287
  });
282
288
  });
283
289
  r_promises.push(tmp_promise);
290
+ this.allPromises.push(tmp_promise);
284
291
  }
285
292
  Promise.all(r_promises).then(() => {
286
293
  // this.service_router_policies_totalCount = this.service_router_policies.length;
@@ -314,6 +321,7 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
314
321
  });
315
322
  });
316
323
  r_promises.push(tmp_promise);
324
+ this.allPromises.push(tmp_promise);
317
325
  }
318
326
  Promise.all(r_promises).then(() => {
319
327
  const configs_totalCount = this.configs.length;
@@ -328,15 +336,20 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
328
336
  let networkVisPromises = [];
329
337
  const pagesize = 500;
330
338
  const eps = this.fetchIdentities(pagesize);
339
+ this.allPromises.push(eps);
331
340
  const ss = this.fetchServices(pagesize);
341
+ this.allPromises.push(ss);
332
342
  const sps = this.fetchServicePolicies(pagesize);
343
+ this.allPromises.push(sps);
333
344
  const ers = this.fetchEdgeRouters(pagesize);
345
+ this.allPromises.push(eps);
334
346
  const erps = this.findEdgeRouterPolicies(pagesize);
347
+ this.allPromises.push(erps);
335
348
  const serps = this.fetchServiceEdgeRouterPolicies(pagesize);
349
+ this.allPromises.push(serps);
336
350
  const cfg = this.fetchConfigs(pagesize);
337
- Promise.all([eps, ss, sps, ers, erps, erps, serps, cfg]).then(() => {
338
- resolve('end');
339
- });
351
+ this.allPromises.push(cfg);
352
+ Promise.all(this.allPromises).then((res) => { resolve('end'); });
340
353
  });
341
354
  }
342
355
  processFirstNetworkGraph() {
@@ -1674,12 +1687,12 @@ class NetworkVisualizerComponent extends VisualizerServiceClass {
1674
1687
  return info + '</div>';
1675
1688
  }
1676
1689
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerComponent, deps: [{ token: SETTINGS_SERVICE }, { token: ZITI_DATA_SERVICE }, { token: i1.HttpClient }, { token: i2.LoggerService }, { token: i3.TreeNodeProcessor }, { token: i4.NetworkVisualizerHelper }], target: i0.ɵɵFactoryTarget.Component }); }
1677
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NetworkVisualizerComponent, selector: "app-network-visualizer", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"nwSearchChange($event)\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n\n <div class=\"legend-item\">\n <div class=\"node-expand-help\"></div>\n <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n <div class=\"legend-icon-pointer\"></div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:1px;padding-left:3px;padding-right:3px;top:0}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0;padding-top:1px;padding-left:3px;padding-right:3px;background:#ebefff;background-image:linear-gradient(#d1dcff 2px,transparent 0),linear-gradient(90deg,#d1dcff 2px,transparent 0),linear-gradient(#d1dcff 1px,transparent 0),linear-gradient(90deg,#d1dcff 1px,transparent 0);background-size:40px 40px,40px 40px,10px 10px,10px 10px}.css-header{height:50px;font-size:25px;font-weight:600;margin:8px 0 0 10px;font-family:Russo One;color:#0027ab;font-size:30px;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:270px;flex-shrink:0;border-radius:27px;height:51px;margin-left:5px;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);color:var(--tableText);padding-left:20px}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 18px;background-repeat:no-repeat;background-size:18px;padding-right:38px}.no-results-warning{left:440px;font-size:15px;color:var(--tableText);padding-left:20px;padding-top:0;height:-moz-fit-content;height:fit-content;top:1px}.resource-type-error{border-width:3px;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:60px}.nf-net-vis-filter-container{max-width:490px;margin-top:0;margin-left:10px;flex:1 0 auto}.table-filter-container{max-width:300px;margin-top:0;margin-left:1px;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:15px;top:5px;width:20px;height:20px;font-size:18px;font-weight:600;color:var(--formBase);z-index:99999999}#ClearSearchFilter:hover{filter:brightness(90%)}#ClearSearchFilter:active{transform:translateY(1px);filter:brightness(80%)}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);border:2px #d3d3d3!important;text-align:center;border:2px;border-color:#d3d3d3;height:25px;top:2px;color:#fff;padding-right:5px;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:5px;top:-33px;width:25px;height:25px;font-size:15px;color:#fff;z-index:99999999}.copydatatable{width:135px;height:17px;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:5px;background:#fff;border:0px solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:50px;width:485px;border-radius:25px;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:10px;padding-right:15px}.nf-topology-select-container{max-width:400px;margin-top:20px;margin-left:20px;flex:1 0 auto}.nf-topology-select-input{height:45px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px}input:focus,textarea:focus,select:focus{box-shadow:0 20px 23px 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-filter-input{background:var(--visualizerBackground)!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px)}}.nf-topology-zoom-container{display:flex;margin-left:10px;flex:1 0 auto}.nf-topology-zoom-button.minus{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 6px 10px 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:10px}.nf-topology-zoom-button{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.placeholder{display:flex;align-items:center;justify-content:center;height:800px}.topotip{display:none;position:fixed;background:var(--navigation);border:0px;border-radius:12px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;font-size:15px;font-weight:600;color:var(--tableText);z-index:2000;opacity:1;max-width:400px;overflow:hidden}.nodes{cursor:pointer;box-shadow:0 30px 43px 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-150px}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:32px;margin-left:10px;flex:1 0 auto}.changeView .changeViewLabel{margin-top:3px;margin-left:5px}.node circle{fill:#fff;stroke:#07397d;stroke-width:14px;box-shadow:0 20px 23px 0 var(--shadow)}.node text{font:27px sans-serif;cursor:pointer}.node-text-container{color:var(--tableText);font-size:24px;font-weight:600;margin-left:2px;margin-top:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.link{fill:none;stroke:var(--table);stroke-width:5px;color:#fff}.nf-topology-legend{width:230px;border-radius:12px;margin-top:10px;margin-right:10px;position:absolute;top:0;right:0;background:#ffffff80!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px);border-color:var(--navigation);border-style:solid;border-width:var(--inputBorderWidth);display:inline-block;box-shadow:0 20px 23px 0 var(--shadow);padding:5px 5px 7px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.legend-item{width:100%;height:100%;display:inline-block;position:relative}.legend-itemA{width:100%;height:100%;margin-left:-3px;display:inline-block}.legend-circle{height:12px;width:12px;border-radius:15px;display:inline-block;margin-top:7px}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:15px;font-weight:600;color:var(--tableText);padding-left:7px;padding-bottom:4px}.legend-icon-text{display:inline-block;font-size:14px;font-weight:600;color:var(--tableText);padding-left:22px;padding-bottom:4px}.legend-icon-text.legend-associated-nodes{padding-left:20px}.legend-icon-pointer{background-size:16px 16px;background-image:url(/assets/svgs/cursor-pointer.svg);position:absolute;z-index:999999;width:20px;height:20px;top:10px;left:2px}.reset-button{height:50px;width:50px;border-radius:50px;margin-right:10px;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:.3s}.node-expand-help{border-radius:20px;border-width:4px;border-color:#08dc5a!important;border-style:solid;box-shadow:0 20px 23px 0 var(--shadow);width:16px;height:16px;position:absolute;background-color:brown;margin-left:-2px;top:2px}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:16px 10px;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:1px}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:1px black solid}.contextmenu_text{position:fixed;background:var(--navigation);border:1px;border-radius:5px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:5px;font-size:10px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:11px;box-shadow:2px 2px 2px #90908d;padding:2px;border-radius:12px;border:1px solid #c6c6c6;max-width:400px}.menuItems{display:block;color:#555;text-decoration:none;padding:6px 8px 6px 30px;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:4px}.container{margin:0 auto;padding:0 24px;max-width:960px}.context-menu__link{display:block;padding:4px 12px;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:250px;width:auto;height:360px;top:100px;border-bottom-left-radius:13px;border-bottom-right-radius:13px;display:none;background:#fff;border:2px solid gray!important;position:absolute!important}.table-filter-input{height:30px;width:100%;top:40px;border-radius:1px;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 20px 23px 0 var(--shadow);padding-top:3px;padding-left:2px;padding-right:2px}#topoDataTable{float:down;min-width:250px;width:auto;height:300px;top:55px;border-radius:10px;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:16px;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:300px}tr{width:auto;padding:5px}th{width:auto;font-family:sans-serif;font-size:16px;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:2px;border:1px solid #ccc;text-align:center}.context-menu{border-radius:12px;background:var(--navigation);width:200px;box-shadow:0 20px 23px 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0}.context-menu .menu-options .menu-option{font-weight:700;font-size:16px;line-height:36px;color:var(--tableText);padding:1px 4px 1px 20px;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:5px;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:4px}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:4px}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.endpoint circle{stroke:#0273fb!important;stroke-width:12px}.node.service circle{stroke:#08dc5a!important;stroke-width:12px}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:12px}.node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:12px}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:12px}.text-container{color:var(--tableText);font-size:24px;font-weight:700;margin-left:20px;margin-top:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:14px}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:14px}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:var(--inputBorderWidth)}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}.tool-tip-container{font-size:14px;font-family:Open Sans;font-weight:600;font-color:var(--tableText)}.tool-tip-container .prop-row{display:grid;grid-template-columns:1fr 3fr;grid-gap:10px;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:25px;align-items:center;padding:0 10px}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal;font-weight:400}.tool-tip-container .tooltip-help-text{font-size:12px;padding-left:10px;padding-right:10px;display:flex;height:22px;align-items:center}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }], encapsulation: i0.ViewEncapsulation.None }); }
1690
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NetworkVisualizerComponent, selector: "app-network-visualizer", usesInheritance: true, ngImport: i0, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"nwSearchChange($event)\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n\n <div class=\"legend-item\">\n <div class=\"node-expand-help\"></div>\n <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n <div class=\"legend-icon-pointer\"></div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:.0625rem;padding-left:.1875rem;padding-right:.1875rem;top:0rem}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0rem;padding-top:.0625rem;padding-left:.1875rem;padding-right:.1875rem;background:#ebefff;background-image:linear-gradient(#d1dcff .125rem,transparent 0),linear-gradient(90deg,#d1dcff .125rem,transparent 0),linear-gradient(#d1dcff .0625rem,transparent 0),linear-gradient(90deg,#d1dcff .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.css-header{height:3.125rem;font-size:1.5625rem;font-weight:600;margin:.5rem 0rem 0rem .625rem;font-family:Russo One;color:#0027ab;font-size:1.875rem;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:16.875rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:.3125rem;-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 1.125rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.375rem}.no-results-warning{left:27.5rem;font-size:.9375rem;color:var(--tableText);padding-left:1.25rem;padding-top:0rem;height:-moz-fit-content;height:fit-content;top:.0625rem}.resource-type-error{border-width:.1875rem;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:3.75rem}.nf-net-vis-filter-container{max-width:30.625rem;margin-top:0rem;margin-left:.625rem;flex:1 0 auto}.table-filter-container{max-width:18.75rem;margin-top:0rem;margin-left:.0625rem;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:.9375rem;top:.3125rem;width:1.25rem;height:1.25rem;font-size:1.125rem;font-weight:600;color:var(--formBase);z-index:99999999}#ClearSearchFilter:hover{filter:brightness(90%)}#ClearSearchFilter:active{transform:translateY(.0625rem);filter:brightness(80%)}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);border:.125rem #d3d3d3!important;text-align:center;border:.125rem;border-color:#d3d3d3;height:1.5625rem;top:.125rem;color:#fff;padding-right:.3125rem;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:.3125rem;top:-2.0625rem;width:1.5625rem;height:1.5625rem;font-size:.9375rem;color:#fff;z-index:99999999}.copydatatable{width:8.4375rem;height:1.0625rem;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:.3125rem;background:#fff;border:0rem solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:3.125rem;width:30.3125rem;border-radius:1.5625rem;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:.625rem;padding-right:.9375rem}.nf-topology-select-container{max-width:25rem;margin-top:1.25rem;margin-left:1.25rem;flex:1 0 auto}.nf-topology-select-input{height:2.8125rem;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}input:focus,textarea:focus,select:focus{box-shadow:0 1.25rem 1.4375rem 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.nf-topology-filter-input{background:var(--visualizerBackground)!important;-webkit-backdrop-filter:saturate(110%) blur(.3125rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.nf-topology-zoom-container{display:flex;margin-left:.625rem;flex:1 0 auto}.nf-topology-zoom-button.minus{height:3.125rem;width:3.125rem;margin-right:.625rem;border-radius:3.4375rem;border:unset;font-size:2.5rem;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:3.0625rem;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 .375rem .625rem 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:.625rem}.nf-topology-zoom-button{height:3.125rem;width:3.125rem;margin-right:.625rem;border-radius:3.4375rem;border:unset;font-size:2.5rem;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:3.0625rem;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.placeholder{display:flex;align-items:center;justify-content:center;height:50rem}.topotip{display:none;position:fixed;background:var(--navigation);border:0rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;font-size:.9375rem;font-weight:600;color:var(--tableText);z-index:2000;opacity:1;max-width:25rem;overflow:hidden}.nodes{cursor:pointer;box-shadow:0 1.875rem 2.6875rem 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-9.375rem}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:2rem;margin-left:.625rem;flex:1 0 auto}.changeView .changeViewLabel{margin-top:.1875rem;margin-left:.3125rem}.node circle{fill:#fff;stroke:#07397d;stroke-width:.875rem;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow)}.node text{font:1.6875rem sans-serif;cursor:pointer}.node-text-container{color:var(--tableText);font-size:1.5rem;font-weight:600;margin-left:.125rem;margin-top:.25rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.link{fill:none;stroke:var(--table);stroke-width:.3125rem;color:#fff}.nf-topology-legend{width:14.375rem;border-radius:.75rem;margin-top:.625rem;margin-right:.625rem;position:absolute;top:0rem;right:0rem;background:#ffffff80!important;-webkit-backdrop-filter:saturate(110%) blur(.3125rem);backdrop-filter:saturate(110%) blur(.9375rem);border-color:var(--navigation);border-style:solid;border-width:var(--inputBorderWidth);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:.3125rem .3125rem .4375rem}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.legend-item{width:100%;height:100%;display:inline-block;position:relative}.legend-itemA{width:100%;height:100%;margin-left:-.1875rem;display:inline-block}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-icon-text{display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:1.375rem;padding-bottom:.25rem}.legend-icon-text.legend-associated-nodes{padding-left:1.25rem}.legend-icon-pointer{background-size:1rem 1rem;background-image:url(/assets/svgs/cursor-pointer.svg);position:absolute;z-index:999999;width:1.25rem;height:1.25rem;top:.625rem;left:.125rem}.reset-button{height:3.125rem;width:3.125rem;border-radius:3.125rem;margin-right:.625rem;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:.3s}.node-expand-help{border-radius:1.25rem;border-width:.25rem;border-color:#08dc5a!important;border-style:solid;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);width:1rem;height:1rem;position:absolute;background-color:brown;margin-left:-.125rem;top:.125rem}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:1rem .625rem;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:.0625rem}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:.0625rem black solid}.contextmenu_text{position:fixed;padding:.125rem;background:var(--navigation);border:.0625rem;border-radius:.3125rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem;font-size:.625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:25rem}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:.6875rem;box-shadow:.125rem .125rem .125rem #90908d;padding:.125rem;border-radius:.75rem;border:.0625rem solid #c6c6c6;max-width:25rem}.menuItems{display:block;color:#555;text-decoration:none;padding:.375rem .5rem .375rem 1.875rem;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:.25rem}.container{margin:0 auto;padding:0 1.5rem;max-width:60rem}.context-menu__link{display:block;padding:.25rem .75rem;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:15.625rem;width:auto;height:22.5rem;top:6.25rem;border-bottom-left-radius:.8125rem;border-bottom-right-radius:.8125rem;display:none;background:#fff;border:.125rem solid gray!important;position:absolute!important}.table-filter-input{height:1.875rem;width:100%;top:2.5rem;border-radius:.0625rem;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-top:.1875rem;padding-left:.125rem;padding-right:.125rem}#topoDataTable{float:down;min-width:15.625rem;width:auto;height:18.75rem;top:3.4375rem;border-radius:.625rem;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:1rem;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:18.75rem}tr{width:auto;padding:.3125rem}th{width:auto;font-family:sans-serif;font-size:1rem;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:.125rem;border:.0625rem solid #ccc;text-align:center}.context-menu{border-radius:.75rem;background:var(--navigation);width:12.5rem;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0rem 0}.context-menu .menu-options .menu-option{font-weight:700;font-size:1rem;line-height:2.25rem;color:var(--tableText);padding:.0625rem .25rem .0625rem 1.25rem;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.3125rem solid var(--placeholder);border-right:.3125rem solid var(--placeholder);border-bottom:.3125rem solid transparent;border-left:.3125rem solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:.3125rem;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:.25rem}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:.25rem}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:.75rem}.node.endpoint circle{stroke:#0273fb!important;stroke-width:.75rem}.node.service circle{stroke:#08dc5a!important;stroke-width:.75rem}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:.75rem}.node.edge-router circle{stroke:#ffc000!important;stroke-width:.75rem}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:.75rem}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:.75rem}.text-container{color:var(--tableText);font-size:1.5rem;font-weight:700;margin-left:1.25rem;margin-top:.5rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:.875rem}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:.875rem}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:var(--inputBorderWidth)}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}.tool-tip-container{font-size:.875rem;font-family:Open Sans;font-weight:600;font-color:var(--tableText)}.tool-tip-container .prop-row{display:grid;grid-template-columns:1fr 3fr;grid-gap:.625rem;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:1.5625rem;align-items:center;padding:0 .625rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal;font-weight:400}.tool-tip-container .tooltip-help-text{font-size:.75rem;padding-left:.625rem;padding-right:.625rem;display:flex;height:1.375rem;align-items:center}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i7.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }], encapsulation: i0.ViewEncapsulation.None }); }
1678
1691
  }
1679
1692
  export { NetworkVisualizerComponent };
1680
1693
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NetworkVisualizerComponent, decorators: [{
1681
1694
  type: Component,
1682
- args: [{ selector: 'app-network-visualizer', encapsulation: ViewEncapsulation.None, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"nwSearchChange($event)\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n\n <div class=\"legend-item\">\n <div class=\"node-expand-help\"></div>\n <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n <div class=\"legend-icon-pointer\"></div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:1px;padding-left:3px;padding-right:3px;top:0}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0;padding-top:1px;padding-left:3px;padding-right:3px;background:#ebefff;background-image:linear-gradient(#d1dcff 2px,transparent 0),linear-gradient(90deg,#d1dcff 2px,transparent 0),linear-gradient(#d1dcff 1px,transparent 0),linear-gradient(90deg,#d1dcff 1px,transparent 0);background-size:40px 40px,40px 40px,10px 10px,10px 10px}.css-header{height:50px;font-size:25px;font-weight:600;margin:8px 0 0 10px;font-family:Russo One;color:#0027ab;font-size:30px;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:270px;flex-shrink:0;border-radius:27px;height:51px;margin-left:5px;-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);color:var(--tableText);padding-left:20px}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 18px;background-repeat:no-repeat;background-size:18px;padding-right:38px}.no-results-warning{left:440px;font-size:15px;color:var(--tableText);padding-left:20px;padding-top:0;height:-moz-fit-content;height:fit-content;top:1px}.resource-type-error{border-width:3px;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:60px}.nf-net-vis-filter-container{max-width:490px;margin-top:0;margin-left:10px;flex:1 0 auto}.table-filter-container{max-width:300px;margin-top:0;margin-left:1px;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:15px;top:5px;width:20px;height:20px;font-size:18px;font-weight:600;color:var(--formBase);z-index:99999999}#ClearSearchFilter:hover{filter:brightness(90%)}#ClearSearchFilter:active{transform:translateY(1px);filter:brightness(80%)}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);border:2px #d3d3d3!important;text-align:center;border:2px;border-color:#d3d3d3;height:25px;top:2px;color:#fff;padding-right:5px;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:5px;top:-33px;width:25px;height:25px;font-size:15px;color:#fff;z-index:99999999}.copydatatable{width:135px;height:17px;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:5px;background:#fff;border:0px solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:50px;width:485px;border-radius:25px;border-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:10px;padding-right:15px}.nf-topology-select-container{max-width:400px;margin-top:20px;margin-left:20px;flex:1 0 auto}.nf-topology-select-input{height:45px;border-radius:25px;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 20px 23px 0 var(--shadow);padding-left:20px}input:focus,textarea:focus,select:focus{box-shadow:0 20px 23px 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-filter-input{background:var(--visualizerBackground)!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px)}}.nf-topology-zoom-container{display:flex;margin-left:10px;flex:1 0 auto}.nf-topology-zoom-button.minus{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 6px 10px 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:10px}.nf-topology-zoom-button{height:50px;width:50px;margin-right:10px;border-radius:55px;border:unset;font-size:40px;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:49px;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.placeholder{display:flex;align-items:center;justify-content:center;height:800px}.topotip{display:none;position:fixed;background:var(--navigation);border:0px;border-radius:12px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;font-size:15px;font-weight:600;color:var(--tableText);z-index:2000;opacity:1;max-width:400px;overflow:hidden}.nodes{cursor:pointer;box-shadow:0 30px 43px 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-150px}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:32px;margin-left:10px;flex:1 0 auto}.changeView .changeViewLabel{margin-top:3px;margin-left:5px}.node circle{fill:#fff;stroke:#07397d;stroke-width:14px;box-shadow:0 20px 23px 0 var(--shadow)}.node text{font:27px sans-serif;cursor:pointer}.node-text-container{color:var(--tableText);font-size:24px;font-weight:600;margin-left:2px;margin-top:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.link{fill:none;stroke:var(--table);stroke-width:5px;color:#fff}.nf-topology-legend{width:230px;border-radius:12px;margin-top:10px;margin-right:10px;position:absolute;top:0;right:0;background:#ffffff80!important;-webkit-backdrop-filter:saturate(110%) blur(5px);backdrop-filter:saturate(110%) blur(15px);border-color:var(--navigation);border-style:solid;border-width:var(--inputBorderWidth);display:inline-block;box-shadow:0 20px 23px 0 var(--shadow);padding:5px 5px 7px}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.legend-item{width:100%;height:100%;display:inline-block;position:relative}.legend-itemA{width:100%;height:100%;margin-left:-3px;display:inline-block}.legend-circle{height:12px;width:12px;border-radius:15px;display:inline-block;margin-top:7px}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:15px;font-weight:600;color:var(--tableText);padding-left:7px;padding-bottom:4px}.legend-icon-text{display:inline-block;font-size:14px;font-weight:600;color:var(--tableText);padding-left:22px;padding-bottom:4px}.legend-icon-text.legend-associated-nodes{padding-left:20px}.legend-icon-pointer{background-size:16px 16px;background-image:url(/assets/svgs/cursor-pointer.svg);position:absolute;z-index:999999;width:20px;height:20px;top:10px;left:2px}.reset-button{height:50px;width:50px;border-radius:50px;margin-right:10px;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 20px 23px 0 var(--shadow);transition:.3s}.node-expand-help{border-radius:20px;border-width:4px;border-color:#08dc5a!important;border-style:solid;box-shadow:0 20px 23px 0 var(--shadow);width:16px;height:16px;position:absolute;background-color:brown;margin-left:-2px;top:2px}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:16px 10px;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:1px}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:1px black solid}.contextmenu_text{position:fixed;background:var(--navigation);border:1px;border-radius:5px;pointer-events:none;box-shadow:0 20px 23px 0 var(--shadow);transition:background-color .3s;padding:5px;font-size:10px;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:400px}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:11px;box-shadow:2px 2px 2px #90908d;padding:2px;border-radius:12px;border:1px solid #c6c6c6;max-width:400px}.menuItems{display:block;color:#555;text-decoration:none;padding:6px 8px 6px 30px;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:4px}.container{margin:0 auto;padding:0 24px;max-width:960px}.context-menu__link{display:block;padding:4px 12px;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:250px;width:auto;height:360px;top:100px;border-bottom-left-radius:13px;border-bottom-right-radius:13px;display:none;background:#fff;border:2px solid gray!important;position:absolute!important}.table-filter-input{height:30px;width:100%;top:40px;border-radius:1px;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 20px 23px 0 var(--shadow);padding-top:3px;padding-left:2px;padding-right:2px}#topoDataTable{float:down;min-width:250px;width:auto;height:300px;top:55px;border-radius:10px;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:16px;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:300px}tr{width:auto;padding:5px}th{width:auto;font-family:sans-serif;font-size:16px;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:2px;border:1px solid #ccc;text-align:center}.context-menu{border-radius:12px;background:var(--navigation);width:200px;box-shadow:0 20px 23px 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0}.context-menu .menu-options .menu-option{font-weight:700;font-size:16px;line-height:36px;color:var(--tableText);padding:1px 4px 1px 20px;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(15px)) or (backdrop-filter: saturate(110%) blur(15px))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(15px);backdrop-filter:saturate(110%) blur(15px)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:32px;height:32px;border-radius:50%;background:transparent;border-top:5px solid var(--placeholder);border-right:5px solid var(--placeholder);border-bottom:5px solid transparent;border-left:5px solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:5px;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:4px}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:4px}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.endpoint circle{stroke:#0273fb!important;stroke-width:12px}.node.service circle{stroke:#08dc5a!important;stroke-width:12px}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:12px}.node.edge-router circle{stroke:#ffc000!important;stroke-width:12px}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:12px}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:12px}.text-container{color:var(--tableText);font-size:24px;font-weight:700;margin-left:20px;margin-top:8px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:14px}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:14px}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:var(--inputBorderWidth)}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}.tool-tip-container{font-size:14px;font-family:Open Sans;font-weight:600;font-color:var(--tableText)}.tool-tip-container .prop-row{display:grid;grid-template-columns:1fr 3fr;grid-gap:10px;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:25px;align-items:center;padding:0 10px}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal;font-weight:400}.tool-tip-container .tooltip-help-text{font-size:12px;padding-left:10px;padding-right:10px;display:flex;height:22px;align-items:center}\n"] }]
1695
+ args: [{ selector: 'app-network-visualizer', encapsulation: ViewEncapsulation.None, template: "<div class=\"ziti-page-container ziti-identities-container\">\n\n <div class=\"nf-network-topology-container\" >\n\n <div class=\"css-header\">{{title}} </div><br>\n\n <div class=\"nf-net-vis-controls-header\">\n <div class=\"nf-topology-zoom-container\">\n <!--button (click)=\"zoomOut()\" class=\"nf-topology-zoom-button minus\"></button>\n <button (click)=\"zoomIn()\" class=\"nf-topology-zoom-button plus\"></button-->\n <div (click)=\"resetTree('Yes')\" class=\"reset-button\" title=\"Reset\"></div>\n </div>\n <select\n (change)=\"resourceTypeChanged()\"\n [(ngModel)]=\"resourceType\"\n [ngClass]=\"{ 'resource-type-error': resourceTypeError }\"\n class=\"resource-type-select\"\n id=\"ResourceTypeSelect\"\n >\n <option value=\"\">Select Resource Type</option>\n <option value=\"service-policies\">Service Policies</option>\n <option value=\"services\">Services</option>\n <option value=\"identities\">Identities</option>\n <option value=\"edge-routers\">Edge Routers</option>\n <option value=\"edge-router-policies\">Edge Router Policies</option>\n <option value=\"service-edge-router-policies\">Service Edge Router Policies</option>\n </select>\n\n <div class=\"nf-net-vis-filter-container listBox row\">\n <input\n (keyup)=\"nwSearchChange($event)\"\n [(ngModel)]=\"filterText\"\n [matAutocomplete]=\"auto\"\n class=\"nf-topology-filter-input\"\n id=\"filterText\"\n matInput\n placeholder=\"Type to Filter\"\n />\n\n <div\n (click)=\"clearSearchFilter()\"\n *ngIf=\"filterText !== ''\"\n class=\"buttonBall close icon-close\"\n id=\"ClearSearchFilter\"\n ></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"autocompleteSearch($event)\">\n <mat-option *ngFor=\"let option of autocompleteOptions\" [value]=\"option\">\n {{ option }}\n </mat-option>\n </mat-autocomplete>\n </div>\n </div>\n\n <div class=\"nf-topology-legend\">\n <div class=\"legend-item\">\n <div class=\"legend-circle servicepolicies\"></div>\n <div class=\"legend-text\">Service Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle services\"></div>\n <div class=\"legend-text\">Services</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle endpoints\"></div>\n <div class=\"legend-text\">Identities</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle edgerouters\"></div>\n <div class=\"legend-text\">Edge Routers</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle erpolicies\"></div>\n <div class=\"legend-text\">Edge Router Policies</div>\n </div>\n <div class=\"legend-item\">\n <div class=\"legend-circle serviceerpolicies\"></div>\n <div class=\"legend-text\">Service Router Policies</div>\n </div>\n\n <div class=\"legend-item\">\n <div class=\"node-expand-help\"></div>\n <div class=\"legend-icon-text legend-associated-nodes\">View Associated Nodes</div>\n <div class=\"legend-icon-pointer\"></div>\n </div>\n </div>\n\n <div class=\"topotip\" id=\"tooltip\"></div>\n <svg style='pointer-events:all' id=\"NetworkVisualizerSVG\"></svg>\n <lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>\n </div>\n\n</div>\n", styles: [".ziti-page-container{height:100%;width:100%;left:0;display:flex;flex-direction:column;position:absolute;padding-top:.0625rem;padding-left:.1875rem;padding-right:.1875rem;top:0rem}.nf-network-topology-container{overflow:hidden;width:100%;height:100%;background-color:var(--background);z-index:1001;margin:auto;inset:0rem;padding-top:.0625rem;padding-left:.1875rem;padding-right:.1875rem;background:#ebefff;background-image:linear-gradient(#d1dcff .125rem,transparent 0),linear-gradient(90deg,#d1dcff .125rem,transparent 0),linear-gradient(#d1dcff .0625rem,transparent 0),linear-gradient(90deg,#d1dcff .0625rem,transparent 0);background-size:2.5rem 2.5rem,2.5rem 2.5rem,.625rem .625rem,.625rem .625rem}.css-header{height:3.125rem;font-size:1.5625rem;font-weight:600;margin:.5rem 0rem 0rem .625rem;font-family:Russo One;color:#0027ab;font-size:1.875rem;text-transform:uppercase;font-weight:400;background-color:transparent}.resource-type-select{width:16.875rem;flex-shrink:0;border-radius:1.6875rem;height:3.1875rem;margin-left:.3125rem;-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem);background-color:#ffffff80!important;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);color:var(--tableText);padding-left:1.25rem}select{background-image:url(/assets/svgs/ArrowDown.svg);background-position:center right 1.125rem;background-repeat:no-repeat;background-size:1.125rem;padding-right:2.375rem}.no-results-warning{left:27.5rem;font-size:.9375rem;color:var(--tableText);padding-left:1.25rem;padding-top:0rem;height:-moz-fit-content;height:fit-content;top:.0625rem}.resource-type-error{border-width:.1875rem;border-color:var(--red)!important}.nf-links{stroke:#fff;stroke-opacity:1.6}.nf-net-vis-controls-header{display:flex;flex-direction:row;position:absolute;z-index:99999;flex:1 0 auto;top:3.75rem}.nf-net-vis-filter-container{max-width:30.625rem;margin-top:0rem;margin-left:.625rem;flex:1 0 auto}.table-filter-container{max-width:18.75rem;margin-top:0rem;margin-left:.0625rem;flex:1 0 auto}#ClearSearchFilter{position:absolute;right:.9375rem;top:.3125rem;width:1.25rem;height:1.25rem;font-size:1.125rem;font-weight:600;color:var(--formBase);z-index:99999999}#ClearSearchFilter:hover{filter:brightness(90%)}#ClearSearchFilter:active{transform:translateY(.0625rem);filter:brightness(80%)}#popupTableTitle{width:100%;font-weight:900;display:inline-block;background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);border:.125rem #d3d3d3!important;text-align:center;border:.125rem;border-color:#d3d3d3;height:1.5625rem;top:.125rem;color:#fff;padding-right:.3125rem;background:#000;cursor:move}#tra:hover{text-decoration:underline}#CloseDataTable{position:absolute;right:.3125rem;top:-2.0625rem;width:1.5625rem;height:1.5625rem;font-size:.9375rem;color:#fff;z-index:99999999}.copydatatable{width:8.4375rem;height:1.0625rem;font-size:10pt;font-family:tahoma;top:95%;right:0%;border-radius:.3125rem;background:#fff;border:0rem solid gray!important;position:absolute!important;text-transform:uppercase;cursor:pointer;z-index:999}.copydatatable:hover{text-decoration:underline}.nf-topology-filter-input{height:3.125rem;width:30.3125rem;border-radius:1.5625rem;border-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:.625rem;padding-right:.9375rem}.nf-topology-select-container{max-width:25rem;margin-top:1.25rem;margin-left:1.25rem;flex:1 0 auto}.nf-topology-select-input{height:2.8125rem;border-radius:1.5625rem;border-color:var(--navigation);background-color:var(--navigation);box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-left:1.25rem}input:focus,textarea:focus,select:focus{box-shadow:0 1.25rem 1.4375rem 0 var(--shadow)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.nf-topology-filter-input{background:var(--visualizerBackground)!important;-webkit-backdrop-filter:saturate(110%) blur(.3125rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.nf-topology-zoom-container{display:flex;margin-left:.625rem;flex:1 0 auto}.nf-topology-zoom-button.minus{height:3.125rem;width:3.125rem;margin-right:.625rem;border-radius:3.4375rem;border:unset;font-size:2.5rem;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:3.0625rem;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .5s;background-image:url(/assets/images/Icon_Minus.png);background-size:40%;background-color:var(--red);box-shadow:0 .375rem .625rem 0 var(--redShadow)}.nf-topology-zoom-label{padding-right:.625rem}.nf-topology-zoom-button{height:3.125rem;width:3.125rem;margin-right:.625rem;border-radius:3.4375rem;border:unset;font-size:2.5rem;font-family:icomoon!important;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:var(--primaryColor);line-height:3.0625rem;background-color:var(--navigation);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .5s}.nf-topology-zoom-button.plus:before{content:\"\\e937\"}.nf-topology-zoom-button.minus:before{content:\"\\e943\"}.nf-topology-zoom-button:hover{color:var(--white);background-color:var(--primaryColor);filter:brightness(90%);transition:background-color 1s;transition:.3s}.nf-topology-zoom-button:active{background-color:var(--icon);transform:scale(.97);transition:background-color 1s;transition:.3s}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.nf-topology-zoom-button{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.placeholder{display:flex;align-items:center;justify-content:center;height:50rem}.topotip{display:none;position:fixed;background:var(--navigation);border:0rem;border-radius:.75rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;font-size:.9375rem;font-weight:600;color:var(--tableText);z-index:2000;opacity:1;max-width:25rem;overflow:hidden}.nodes{cursor:pointer;box-shadow:0 1.875rem 2.6875rem 0 var(--shadow)}.nf-links{cursor:pointer}.linkWidth{color:#fff}.nf-network-topology-container .loader{margin-left:-9.375rem}.loader .bar1{background-color:var(--inputBorder)!important}.loader .bar2{background-color:var(--inputBorder)!important;animation-delay:-.7s}.loader .bar3{background-color:var(--inputBorder)!important;animation-delay:-.6s}.loader .bar4{background-color:var(--inputBorder)!important;animation-delay:-.5s}.loader .bar5{background-color:var(--inputBorder)!important;animation-delay:-.4s}.loader .bar6{background-color:var(--inputBorder)!important;animation-delay:-.3s}.changeView{display:flex;margin-top:2rem;margin-left:.625rem;flex:1 0 auto}.changeView .changeViewLabel{margin-top:.1875rem;margin-left:.3125rem}.node circle{fill:#fff;stroke:#07397d;stroke-width:.875rem;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow)}.node text{font:1.6875rem sans-serif;cursor:pointer}.node-text-container{color:var(--tableText);font-size:1.5rem;font-weight:600;margin-left:.125rem;margin-top:.25rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.link{fill:none;stroke:var(--table);stroke-width:.3125rem;color:#fff}.nf-topology-legend{width:14.375rem;border-radius:.75rem;margin-top:.625rem;margin-right:.625rem;position:absolute;top:0rem;right:0rem;background:#ffffff80!important;-webkit-backdrop-filter:saturate(110%) blur(.3125rem);backdrop-filter:saturate(110%) blur(.9375rem);border-color:var(--navigation);border-style:solid;border-width:var(--inputBorderWidth);display:inline-block;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding:.3125rem .3125rem .4375rem}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.nf-topology-legend{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.legend-item{width:100%;height:100%;display:inline-block;position:relative}.legend-itemA{width:100%;height:100%;margin-left:-.1875rem;display:inline-block}.legend-circle{height:.75rem;width:.75rem;border-radius:.9375rem;display:inline-block;margin-top:.4375rem}.legend-circle.servicepolicies{background-color:#ff0d49}.legend-circle.services{background-color:#08dc5a}.legend-circle.endpoints{background-color:#0273fb}.legend-circle.edgerouters{background-color:#ffc000}.legend-circle.erpolicies{background-color:#ff8400}.legend-circle.serviceerpolicies{background-color:#ff5900}.legend-text{display:inline-block;font-size:.9375rem;font-weight:600;color:var(--tableText);padding-left:.4375rem;padding-bottom:.25rem}.legend-icon-text{display:inline-block;font-size:.875rem;font-weight:600;color:var(--tableText);padding-left:1.375rem;padding-bottom:.25rem}.legend-icon-text.legend-associated-nodes{padding-left:1.25rem}.legend-icon-pointer{background-size:1rem 1rem;background-image:url(/assets/svgs/cursor-pointer.svg);position:absolute;z-index:999999;width:1.25rem;height:1.25rem;top:.625rem;left:.125rem}.reset-button{height:3.125rem;width:3.125rem;border-radius:3.125rem;margin-right:.625rem;background-size:contain;background-image:url(/assets/svgs/refresh.svg);cursor:pointer;overflow:hidden;z-index:24;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:.3s}.node-expand-help{border-radius:1.25rem;border-width:.25rem;border-color:#08dc5a!important;border-style:solid;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);width:1rem;height:1rem;position:absolute;background-color:brown;margin-left:-.125rem;top:.125rem}.reset-button:hover{filter:brightness(90%);transform:scale(.97);transition:.3s}.reset-button:active{transform:scale(.9);transition:.3s}.sign_out_button{background-color:#2fa4e7;padding:1rem .625rem;color:#fff;float:left;text-decoration:none}.sign_out_button:hover{background-color:#1892d7}.sign_out_button a{color:#fff;text-decoration:none}.contextmenu_mouseout{fill:#f4f4f4;stroke:#fff;stroke-width:.0625rem}.contextmenu_mouseover{fill:#c8c8c8}.menu2{position:fixed;background:#fff;color:#000;cursor:pointer;border:.0625rem black solid}.contextmenu_text{position:fixed;padding:.125rem;background:var(--navigation);border:.0625rem;border-radius:.3125rem;pointer-events:none;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);transition:background-color .3s;padding:.3125rem;font-size:.625rem;font-weight:700;color:var(--tableText);z-index:2000;opacity:1;max-width:25rem}.contextmenu{z-index:2000;opacity:1;position:fixed;background:#fff;color:#000;font-family:sans-serif;font-size:.6875rem;box-shadow:.125rem .125rem .125rem #90908d;padding:.125rem;border-radius:.75rem;border:.0625rem solid #c6c6c6;max-width:25rem}.menuItems{display:block;color:#555;text-decoration:none;padding:.375rem .5rem .375rem 1.875rem;position:relative}.context-menu{display:none;position:absolute;z-index:10}.context-menu__items{list-style:none;margin:0;padding:0}.context-menu__item{display:block;margin-bottom:.25rem}.container{margin:0 auto;padding:0 1.5rem;max-width:60rem}.context-menu__link{display:block;padding:.25rem .75rem;color:#06a;text-decoration:none}.contextmenu_text:hover .divItemsHover{color:#fff;background-color:#06a}.context-menu--active{display:block}#topoDataTableHeader{float:left;min-width:15.625rem;width:auto;height:22.5rem;top:6.25rem;border-bottom-left-radius:.8125rem;border-bottom-right-radius:.8125rem;display:none;background:#fff;border:.125rem solid gray!important;position:absolute!important}.table-filter-input{height:1.875rem;width:100%;top:2.5rem;border-radius:.0625rem;border-color:#d3d3d3;background-color:#d3d3d3;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);padding-top:.1875rem;padding-left:.125rem;padding-right:.125rem}#topoDataTable{float:down;min-width:15.625rem;width:auto;height:18.75rem;top:3.4375rem;border-radius:.625rem;position:absolute!important;overflow:auto;background:#fff;font-family:sans-serif;font-size:1rem;color:#06a;overflow-x:scroll}table{width:auto;height:auto;max-height:18.75rem}tr{width:auto;padding:.3125rem}th{width:auto;font-family:sans-serif;font-size:1rem;color:#06a;font-weight:700;background-color:#06a}td{width:auto}th{width:auto;font-weight:700;padding:.125rem;border:.0625rem solid #ccc;text-align:center}.context-menu{border-radius:.75rem;background:var(--navigation);width:12.5rem;box-shadow:0 1.25rem 1.4375rem 0 var(--shadow);position:relative;display:none}.context-menu .menu-options{list-style:none;padding:0rem 0}.context-menu .menu-options .menu-option{font-weight:700;font-size:1rem;line-height:2.25rem;color:var(--tableText);padding:.0625rem .25rem .0625rem 1.25rem;cursor:pointer}.context-menu .menu-options .menu-option:hover{background:var(--primaryColor);color:var(--navigation)}@supports ((-webkit-backdrop-filter: saturate(110%) blur(.9375rem)) or (backdrop-filter: saturate(110%) blur(.9375rem))){.context-menu{background:var(--glass);-webkit-backdrop-filter:saturate(110%) blur(.9375rem);backdrop-filter:saturate(110%) blur(.9375rem)}}.spinner{position:absolute;right:1em;top:1em;display:inline-block;width:2rem;height:2rem;border-radius:50%;background:transparent;border-top:.3125rem solid var(--placeholder);border-right:.3125rem solid var(--placeholder);border-bottom:.3125rem solid transparent;border-left:.3125rem solid transparent;animation:loading .5s infinite linear}.disabled{-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;-ms-user-select:none;pointer-events:none;cursor:pointer;opacity:.6}path:not(.loader path,.highcharts-root path){fill:none;stroke:var(--navigation);stroke-width:.3125rem;color:#fff}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.rotating{animation:rotating 2s linear infinite}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{background-color:var(--icon);border-width:.25rem}.mat-mdc-radio-button .mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--icon)}.mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-width:.25rem}#mat-radio-2>div>div>div.mdc-radio__background>div.mdc-radio__inner-circle .node.edge-router circle{stroke:#ffc000!important;stroke-width:.75rem}.node.endpoint circle{stroke:#0273fb!important;stroke-width:.75rem}.node.service circle{stroke:#08dc5a!important;stroke-width:.75rem}.node.service-policy circle{stroke:#ff0d49!important;stroke-width:.75rem}.node.edge-router circle{stroke:#ffc000!important;stroke-width:.75rem}.node.edge-router-policy circle{stroke:#ff8400!important;stroke-width:.75rem}.node.service-edge-router-policy circle{stroke:#ff5900!important;stroke-width:.75rem}.text-container{color:var(--tableText);font-size:1.5rem;font-weight:700;margin-left:1.25rem;margin-top:.5rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}svg>g>g.node:first-of-type.terminate{cursor:pointer}svg>g>g.node:first-of-type.terminate .text-container{cursor:pointer}svg>g>g.node:first-of-type.terminate circle{cursor:pointer}svg>g>g.node:first-of-type.terminate:hover>rect{fill:url(#NodeHoverGradient)}.node>rect{fill:url(#NodeGradient)}.node.terminate{cursor:default;stroke-width:.875rem}.node.terminate .text-container{cursor:default}.node.terminate circle{cursor:default;stroke-width:.875rem}.node.terminate:hover>rect{fill:url(#NodeGradient)}.node:hover>rect{fill:url(#NodeHoverGradient)}p-chips.error .p-chips.p-component .p-chips-multiple-container{border-color:var(--red);border-width:var(--inputBorderWidth)}.checkboxes.error .mat-checkbox-frame{border-color:var(--red)}.checkboxes.error .mat-checkbox-label{color:var(--red)}.stop1{stop-color:var(--table);stop-opacity:.9}.stop2{stop-color:var(--table);stop-opacity:.65}.stop3{stop-color:var(--table);stop-opacity:0}.stop1a{stop-color:var(--background);stop-opacity:1}.stop2a{stop-color:var(--background);stop-opacity:.7}.stop3a{stop-color:var(--background);stop-opacity:0}.tool-tip-container{font-size:.875rem;font-family:Open Sans;font-weight:600;font-color:var(--tableText)}.tool-tip-container .prop-row{display:grid;grid-template-columns:1fr 3fr;grid-gap:.625rem;grid-template-areas:\"propName propVal\";height:-moz-fit-content;height:fit-content;min-height:1.5625rem;align-items:center;padding:0 .625rem}.tool-tip-container .prop-row:nth-child(2n){background-color:var(--formBackground)}.tool-tip-container .prop-row .prop-name{grid-area:propName;font-weight:700}.tool-tip-container .prop-row .prop-val{grid-area:propVal;font-weight:400}.tool-tip-container .tooltip-help-text{font-size:.75rem;padding-left:.625rem;padding-right:.625rem;display:flex;height:1.375rem;align-items:center}\n"] }]
1683
1696
  }], ctorParameters: function () { return [{ type: i10.SettingsService, decorators: [{
1684
1697
  type: Inject,
1685
1698
  args: [SETTINGS_SERVICE]
@@ -1687,4 +1700,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1687
1700
  type: Inject,
1688
1701
  args: [ZITI_DATA_SERVICE]
1689
1702
  }] }, { type: i1.HttpClient }, { type: i2.LoggerService }, { type: i3.TreeNodeProcessor }, { type: i4.NetworkVisualizerHelper }]; } });
1690
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvbmV0d29yay12aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBRU4saUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0scUNBQXFDLENBQUM7QUFJN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFHLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVakMsTUFPYSwwQkFBMkIsU0FBUSxzQkFBc0I7SUFxRXBFLFlBQ29DLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELFVBQXNCLEVBQ3RCLE1BQXFCLEVBQ3RCLGlCQUFvQyxFQUNwQyxjQUF1QztRQUU5QyxLQUFLLEVBQUUsQ0FBQztRQVB5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQ3ZELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUF5QjtRQTFFbkQsK0RBQStEO1FBQzdELFVBQUssR0FBRyxvQkFBb0IsQ0FBQTtRQUU1QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRXpCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2Qsd0JBQW1CLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLDBCQUFxQixHQUFHLENBQUMsQ0FBQztRQUMxQiwyQkFBc0IsR0FBRyxLQUFLLENBQUM7UUFDL0IsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsMkJBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLDRCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNoQyxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsZ0NBQTJCLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLGlDQUE0QixHQUFHLEtBQUssQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsb0NBQStCLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLHFDQUFnQyxHQUFHLEtBQUssQ0FBQztRQUN6Qyw0QkFBdUIsR0FBRyxFQUFFLENBQUM7UUFDN0IsdUNBQWtDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLHdDQUFtQyxHQUFHLEtBQUssQ0FBQztRQUM1QyxZQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IseUJBQW9CLEdBQUcsaUJBQWlCLENBQUM7UUFNekMsNkJBQXdCLEdBQUcsRUFBRSxDQUFDO1FBQzlCLHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIseUJBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixxQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFHdEMsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQVVsQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBT2Ysd0JBQW1CLEdBQU8sRUFBRSxDQUFDO1FBZTNCLHVDQUF1QztJQUN6QyxDQUFDO0lBRVEsUUFBUTtRQUNkLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFQyxlQUFlLENBQUMsUUFBUTtRQUN4QixPQUFPLFNBQVMsQ0FBQztZQUNmLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRSxDQUFDO1lBQ1AsUUFBUSxFQUFFLE1BQU07WUFDaEIsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsUUFBUTtTQUNoQixDQUFDLENBQUE7SUFDRixDQUFDO0lBRUgsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUNyQixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUEsS0FBSyxDQUFDLGVBQWUsQ0FBRSxRQUFRO1FBQzVCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVc7YUFDNUIsR0FBRyxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUM7YUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDekI7aUJBQU0sSUFBSSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUM5RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO2dCQUNuQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNwQixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN4QyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUM5QixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXO3lCQUN4QyxHQUFHLENBQ0YsWUFBWSxFQUNYLGlCQUFpQixFQUNsQixFQUFFLENBQ0gsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTt3QkFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzdCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO29CQUNKLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzVCO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDL0IsdURBQXVEO2dCQUN4RCxDQUFDLENBQUMsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUUsb0JBQW9CO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVE7UUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVc7YUFDdEIsR0FBRyxDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDO2FBQ3BDLElBQUksQ0FBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFBLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO2lCQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDNUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztnQkFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtvQkFDeEMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQzVCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVc7eUJBQ3ZDLEdBQUcsQ0FDRixVQUFVLEVBQ1QsZUFBZSxFQUNoQixFQUFFLENBQ0g7eUJBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMzQixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2pDLG1EQUFtRDtnQkFDcEQsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRSxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsUUFBUTtRQUM5QixNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXO2FBQ3hCLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRSxFQUFFLENBQUM7YUFDcEQsSUFBSSxDQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQywyQkFBMkIsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqSCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUN4QjtpQkFBTSxJQUFJLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3BFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7Z0JBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3hDLHVCQUF1QixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVc7eUJBQ3ZDLEdBQUcsQ0FDRixrQkFBa0IsRUFDakIsdUJBQXVCLEVBQ3hCLEVBQUUsQ0FDSDt5QkFDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTt3QkFDbkIsVUFBVSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNsRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNuQyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUMvQjtnQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLG1FQUFtRTtnQkFDcEUsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNOLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsUUFBUTtRQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVzthQUN6QixHQUFHLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUM7YUFDdkMsSUFBSSxDQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDeEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMvRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN4QyxjQUFjLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDM0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVzt5QkFDdkMsR0FBRyxDQUNGLGNBQWMsRUFDYixjQUFjLEVBQ2YsRUFBRSxDQUNIO3lCQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO3dCQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDOUI7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUMvQix5REFBeUQ7Z0JBQzNELENBQUMsQ0FBQyxDQUFDO2FBQ0w7UUFDTixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUYsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFFBQVE7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXO2FBQ3hCLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUM7YUFDbEQsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pELElBQUksQ0FBQywrQkFBK0IsR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwSCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN4RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUN4QjtpQkFBTSxJQUFJLElBQUksQ0FBQywrQkFBK0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hFLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUM7Z0JBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3hDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQzlCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVc7eUJBQ3ZDLEdBQUcsQ0FDRixzQkFBc0IsRUFDckIsaUJBQWlCLEVBQ2xCLEVBQUUsQ0FDSDt5QkFDQSxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTt3QkFDbkIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDdkMsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDOUI7Z0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNqQywyRUFBMkU7Z0JBQzVFLENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDTixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNULENBQUM7SUFDRCxLQUFLLENBQUMsOEJBQThCLENBQUMsUUFBUTtRQUN6QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXO2FBQ3ZCLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO2FBQ3BELElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUMsa0NBQWtDLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEgsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7YUFDeEI7aUJBQU0sSUFBSSxJQUFJLENBQUMsa0NBQWtDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMzRSxJQUFJLENBQUMsbUNBQW1DLEdBQUcsS0FBSyxDQUFDO2dCQUNqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUN4QyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDeEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVzt5QkFDdkMsR0FBRyxDQUNGLDhCQUE4QixFQUM3QixXQUFXLEVBQ1osRUFBRSxDQUNIO3lCQUNBLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO3dCQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMxQyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLGlGQUFpRjtnQkFDakYsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNOLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUNELEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUTtRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVzthQUN0QixHQUFHLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUM7YUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDOUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7YUFDbkI7aUJBQU0sSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLEtBQUssSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQ3hDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO29CQUMzQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXO3lCQUN2QyxHQUFHLENBQ0YsU0FBUyxFQUNSLGNBQWMsRUFDZixFQUFFLENBQ0g7eUJBQ0EsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7d0JBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMxQixDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztvQkFDTCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUVaLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNsQixNQUFNLFNBQVMsR0FBSSxNQUFNLElBQUksT0FBTyxDQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pELElBQUksa0JBQWtCLEdBQUUsRUFBRSxDQUFDO1lBQzNCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2xFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVBLHdCQUF3QjtRQUNsQixJQUFJO1lBQ0EsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FDbEQsMEJBQTBCLEVBQzFCLDRCQUE0QixFQUM1QixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLElBQUksQ0FBQyx1QkFBdUIsRUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQ2pGLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsK0JBQStCLEVBQ3RFLElBQUksQ0FBQyxrQ0FBa0MsRUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyx1QkFBdUIsRUFDdkgsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLElBQUksQ0FBQyxtQ0FBbUMsQ0FDbEYsQ0FBQztZQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztnQkFDakQsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsMERBQTBEO1lBQzFELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO1lBRTNDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQzFELElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLHdCQUF3QixFQUM3QixlQUFlLENBQ2xCLENBQUM7WUFDRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUNuRCxJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsU0FBUyxDQUNaLENBQUM7WUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUNyRCxJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxtQkFBbUIsRUFDeEIsVUFBVSxDQUNiLENBQUM7WUFDRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUN0RCxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQ3pCLFFBQVEsQ0FDWCxDQUFDO1lBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FDckQsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLGVBQWUsQ0FDbEIsQ0FBQztZQUVGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQ2xFLElBQUksQ0FBQyx1QkFBdUIsRUFDNUIsSUFBSSxDQUFDLGdDQUFnQyxFQUNyQyx1QkFBdUIsQ0FDMUIsQ0FBQztZQUVGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDMUQ7UUFBQyxPQUFPLEdBQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNsQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFQSx5QkFBeUIsQ0FBQyxjQUFjLEVBQUUsR0FBRyxFQUFFLFFBQVE7UUFDckQsY0FBYyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNoRCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sR0FBRyxDQUFDO0lBQ1osQ0FBQztJQUVGLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxHQUFHLEdBQUc7UUFDMUIsSUFBSSxLQUFLLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBSztRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFlBQVksSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFJLFdBQVcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFJLE9BQU8sRUFBRTtZQUN6SSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUM7WUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0YsQ0FBQztJQUVDLGtCQUFrQixDQUFDLEtBQUs7UUFDcEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLEdBQUUsRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDL0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztTQUM1RDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQ3RFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7U0FDckQ7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssWUFBWSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMxRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQ3ZEO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDN0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztTQUN4RDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxzQkFBc0IsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7WUFDOUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUN2RDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsbUNBQW1DLEVBQUU7WUFDekcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztTQUNwRTtRQUVELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUM3QixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztJQUVELDRCQUE0QixDQUFDLFNBQVM7UUFDcEMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEVBQUUsSUFBSSxTQUFTLEtBQUssRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDL0IsT0FBTztTQUNkO2FBQU07WUFDRixJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsU0FBUztRQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM3QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxTQUFTLEtBQUssRUFBRSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQ2hDO2FBQU07WUFDSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFFN0IsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssa0JBQWtCLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2hGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNLEVBQUUsR0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSwrQkFBK0I7Z0JBQzlCLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3RDO2dCQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsRUFBRSxFQUFFO29CQUN6QyxJQUFJLENBQUMsS0FBSSxDQUFDLEVBQUU7d0JBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDekI7Z0JBQ0osQ0FBQyxDQUFFLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGtCQUFrQixJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtnQkFDdEYsV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNyRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUM5RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDdkUsTUFBTSxFQUFFLEdBQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEUsK0JBQStCO2dCQUM5QixJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN0QztnQkFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRTtvQkFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3hCO2dCQUNKLENBQUMsQ0FBRSxDQUFDO2dCQUNKLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRS9CLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7Z0JBQzdFLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtnQkFDdkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sRUFBRSxHQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVELEVBQUUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNyQztnQkFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3hCO2dCQUNILENBQUMsQ0FBRSxDQUFDO2FBRVA7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3RFLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtnQkFDM0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sRUFBRSxHQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdELEVBQUUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNyQztnQkFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2xGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3hCO2dCQUNILENBQUMsQ0FBRSxDQUFDO2FBQ1A7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzFFLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7aUJBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLHNCQUFzQixJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxFQUFFO2dCQUNoRyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztnQkFDdEUsTUFBTSxFQUFFLEdBQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDckUsRUFBRSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUM7Z0JBRTVCLElBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0JBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3BDO2dCQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7b0JBQ2hFLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsRUFBRSxFQUFFO29CQUMxQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDeEI7Z0JBQ0gsQ0FBQyxDQUFFLENBQUM7Z0JBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNyRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssc0JBQXNCLElBQUksSUFBSSxDQUFDLGdDQUFnQyxFQUFFO2dCQUM3RixXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ3RGO2lCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyw4QkFBOEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTtnQkFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQ3ZFLE1BQU0sRUFBRSxHQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsaUNBQWlDLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVFLEVBQUUsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixJQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO29CQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN0QztnQkFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUUsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ3hCO2dCQUNILENBQUMsQ0FBRSxDQUFDO2dCQUNKLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQ3JGO2lCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsbUNBQW1DLEVBQUU7Z0JBQ3hHLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDdEY7WUFDRCxvRUFBb0U7WUFDcEUsS0FBSyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLDZEQUE2RDtnQkFDN0QsYUFBYTtnQkFDYixFQUFFLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQU07b0JBQzFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDM0MsMENBQTBDO29CQUMxQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3hELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO3dCQUM3RSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUI7cUJBQzlEO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FFSjtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBWSxFQUFFLEVBQUU7UUFDNUIsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUksRUFBRSxDQUFDLElBQUksQ0FBRSxDQUFDO0lBQ2xFLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE9BQU87UUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pELElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRTtnQkFDZixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUN4QjtnQkFDRCxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQzthQUNqQjtTQUNIO1FBQ0MsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVztRQUNuRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6Qyw0Q0FBNEM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU87U0FDVjtRQUNELElBQUksVUFBVSxJQUFJLFVBQVUsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0RixXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUMzRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxVQUFVLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDdkU7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBQ0QscUJBQXFCO1FBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBRSxVQUFzQixDQUFLO1lBQzdELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFLO1lBQ3RELE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLO1FBQzVCLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25CLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbEM7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUMvQjtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMzQjtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFL0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsNEJBQTRCO1FBQ2xELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsRUFBRTtZQUMxQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0M7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFO1lBQ3pDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxZQUFZLEVBQUU7WUFDM0MsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsRUFBRTtZQUM3QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0M7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssc0JBQXNCLEVBQUU7WUFDckQsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLDhCQUE4QixFQUFFO1lBQzdELFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUNELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxzQ0FBc0M7UUFDeEgsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsWUFBWTtZQUNaLGdGQUFnRjtZQUNoRixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDckMsaUJBQWlCO2dCQUNqQixNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXO2dCQUNyQyxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtvQkFDdkMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLG1CQUFtQjtvQkFDL0UsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLE1BQU07d0JBQ3pDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxDQUFDO29CQUNILEVBQUUsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO29CQUNsQixFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDcEIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLE9BQU87d0JBQzlDLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzFDLENBQUMsQ0FBQyxDQUFDO29CQUNILFNBQVMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzVDLE1BQU07aUJBQ1Q7YUFDSjtpQkFBTTtnQkFDSCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO29CQUN4QyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsTUFBTTt3QkFDMUMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDL0MsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsU0FBUyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7b0JBQ3pCLFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO29CQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzVDLE1BQU07aUJBQ1Q7YUFDSjtTQUNKO1FBQ0QsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQUMsNEJBQTRCO1FBQ2xELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsRUFBRTtZQUMxQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsRUFBRTtZQUN6QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksRUFBRTtZQUMzQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsRUFBRTtZQUM3QyxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLHNCQUFzQixFQUFFO1lBQ3JELFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssOEJBQThCLEVBQUU7WUFDN0QsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUNELElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLE1BQU07Z0JBQ2xELE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxDQUFDLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMvQzthQUFNO1lBQ0gsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUN0QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO29CQUN2Qyw0QkFBNEI7b0JBQzVCLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsTUFBTTt3QkFDdEQsT0FBTyxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUMxQyxDQUFDLENBQUMsQ0FBQztvQkFDSCxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztvQkFDN0IsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLE9BQU87d0JBQzlDLE9BQU8sT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsU0FBUyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUM7b0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDNUMsTUFBTTtpQkFDVDthQUNKO1NBQ0o7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQW9CLENBQUs7WUFDdEQsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDMUM7aUJBQU07Z0JBQ0gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzVDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxXQUFXO1FBQ2pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUMxQjtRQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO2dCQUNqQixDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7Z0JBQ3pCLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzVDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRTtnQkFDakIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtTQUNKO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0QsTUFBTSxDQUFDLENBQUM7UUFDSixJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU7WUFDYixDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDekIsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNKLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ1osQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QjtTQUNKO0lBQ0wsQ0FBQztJQUNGLGFBQWE7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDMUIsQ0FBQztJQUNELEtBQUssQ0FBQyxxQkFBcUI7UUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxtQ0FBbUMsSUFBSSxDQUFDLFVBQVUseUNBQXlDLENBQUM7UUFDNUgsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXO2FBQzVCLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDVCxJQUFJLENBQUMsQ0FBQyxNQUFVLEVBQUUsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUM1Qjs7O3NCQUdNO2dCQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBRSxDQUFDO1lBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsTUFBTSxNQUFNLEdBQUksTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxlQUFlLEdBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRSxrQkFBa0IsR0FBRSxNQUFNLEdBQUUsT0FBTyxHQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRSxVQUFVLENBQUM7UUFDakosQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUVELGlCQUFpQjtRQUNaLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsNEJBQTRCLEVBQUU7WUFDL0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUN2RSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGtCQUFrQixJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQ3hGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUN6RSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUMvQjthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxZQUFZLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzFFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDbEUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQy9ELENBQUM7U0FDTDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDNUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDL0I7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssY0FBYyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM3RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ25FLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUMvRCxDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQy9FLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLHNCQUFzQixJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUM5RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUMvRCxDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssc0JBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDL0I7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssOEJBQThCLElBQUksSUFBSSxDQUFDLG1DQUFtQyxFQUFFO1lBQ3pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDL0UsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQy9ELENBQUM7U0FDTDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyw4QkFBOEIsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRTtZQUMzRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztTQUMvQjtJQUNOLENBQUM7SUFDRCxNQUFNO0lBRU4sQ0FBQztJQUNELE9BQU87SUFFUCxDQUFDO0lBQ0QsaUJBQWlCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQiw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsd0JBQXdCO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQztRQUM1QyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssa0JBQWtCLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFO1lBQy9FLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDdkUsSUFBSSxDQUFDLFVBQVUsS0FBRyxFQUFFLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3ZGLENBQUM7U0FDTDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUN4RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNoRSxJQUFJLENBQUMsVUFBVSxLQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDdkYsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFVBQVUsSUFBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUN6RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDMUUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNsRSxJQUFJLENBQUMsVUFBVSxLQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDdkYsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM1RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7WUFDN0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNuRSxJQUFJLENBQUMsVUFBVSxLQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDdkYsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUMvRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1NBQ2hDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLHNCQUFzQixJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUM5RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xFLElBQUksQ0FBQyxVQUFVLEtBQUcsRUFBRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUN2RixDQUFDO1NBQ0w7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssc0JBQXNCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUU7WUFDaEcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztTQUNoQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyw4QkFBOEIsSUFBSSxJQUFJLENBQUMsbUNBQW1DLEVBQUU7WUFDekcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUMvRSxJQUFJLENBQUMsVUFBVSxLQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDdkYsQ0FBQztTQUNMO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLDhCQUE4QixJQUFJLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFO1lBQzNHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7U0FDaEM7SUFDTixDQUFDO0lBRUQsZUFBZTtRQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELFNBQVM7UUFDTCwyQ0FBMkM7UUFDM0MsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVGLGFBQWEsQ0FBQyxDQUFDO1FBQ1YsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ1osQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0QsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDckI7SUFDTixDQUFDO0lBRUQsWUFBWTtRQUNOLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDNUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUVsRCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV2QixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7YUFDUixNQUFNLENBQUMsdUJBQXVCLENBQUM7YUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7YUFDckIsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7YUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDZixJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsR0FBRyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxHQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4RyxNQUFNLENBQUMsR0FBRyxDQUFDO2FBQ1gsSUFBSSxDQUFDLFdBQVcsRUFBRSxZQUFZLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUU3RCxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUU7WUFDMUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLGNBQWM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5Qyw2RUFBNkU7UUFDNUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixTQUFTLFFBQVEsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7Z0JBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztnQkFDaEMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDdEI7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ1osQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDckI7UUFDTCxDQUFDO0lBQ1AsQ0FBQztJQUVDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUs7UUFDOUIsSUFBSSxPQUFPLEVBQUU7WUFDVCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUk7WUFDQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO1FBQUMsT0FBTyxDQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDakU7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRixjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRSxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzRSxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUU1RSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3pGLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVFLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdFLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7WUFDakUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUk7YUFDckIsS0FBSyxFQUFFO2FBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQzthQUNYLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqQixJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFbkIsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUU7Z0JBQ3JGLFNBQVMsR0FBRyxhQUFhLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO2dCQUNqTCxTQUFTLEdBQUcsVUFBVSxDQUFDO2FBQzFCO1lBQ0QsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQy9FLFNBQVMsR0FBRyxTQUFTLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsRUFBRTtnQkFDMUYsU0FBUyxHQUFHLFNBQVMsQ0FBQzthQUN6QjtZQUNELElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUc7Z0JBQ3RJLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQzthQUNqQztZQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtnQkFDMUYsU0FBUyxHQUFHLGdCQUFnQixDQUFDO2FBQ2hDO1lBQ0QsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsRUFBRTtnQkFDakcsU0FBUyxHQUFHLG9CQUFvQixDQUFDO2FBQ3BDO1lBQ0QsSUFDSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLDhCQUE4QixDQUFDO2dCQUN6RCxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLHVCQUF1QixDQUFDLEVBQ3BEO2dCQUNFLFNBQVMsR0FBRyw0QkFBNEIsQ0FBQzthQUM1QztZQUVELFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7WUFFOUUsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUM7WUFDMUIsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRTtnQkFDcEIsT0FBTyxZQUFZLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0gsT0FBTyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7YUFDL0M7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDL0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ3JDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUVyRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtnQkFDN0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztxQkFDeEIsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7cUJBQzdCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ25DLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7cUJBQ2xDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbEM7aUJBQU07Z0JBQ0gsT0FBTzthQUNWO1lBQ0QsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxrQkFBa0IsQ0FBRSxFQUFHO2dCQUN0RixJQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksRUFBRTtvQkFDaEMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO29CQUN4QixRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFDOUIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUMxQjtxQkFBTTtvQkFDSixTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3pCLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUMvQixTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQzNCO2dCQUNBLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBRW5CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxVQUFVLENBQUM7YUFDekM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhLEVBQUU7Z0JBQ3ZELElBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFO29CQUNsQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQ3hCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUM5QixRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNMLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDekIsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQy9CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDeEI7Z0JBQ0QsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUV0QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsQ0FBQzthQUU1QztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtnQkFDakQsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNuQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QixTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDO2FBRXhDO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ3hELFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDO2FBQy9DO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxFQUFFO2dCQUN2RCxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDL0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN6QixTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxlQUFlLENBQUM7YUFFOUM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ2pELFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDckIsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNsQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztnQkFDckMsR0FBRyxHQUFHLEVBQUUsQ0FBQzthQUNaO2lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssdUJBQXVCLEVBQUU7Z0JBQy9ELFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDcEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNwQixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BCLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ25CLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDO2FBRXREO1lBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUM7WUFDM0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUzthQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ2hCLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO2FBQ3JCLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2FBQ2IsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUM7WUFDdEIsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JELENBQUMsQ0FBQzthQUNELEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO2FBQ0QsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDdEMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUM7YUFDRCxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRyxLQUFLLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUNyRixFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLEVBQUU7cUJBQ3BDLFFBQVEsQ0FBQyxHQUFHLENBQUM7cUJBQ2QsS0FBSyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUM7cUJBQzNCLFVBQVUsRUFBRTtxQkFDWixRQUFRLENBQUMsR0FBRyxDQUFDO3FCQUNaLEtBQUssQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDO3FCQUMxQixVQUFVLEVBQUU7cUJBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQztxQkFDYixLQUFLLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQztxQkFDM0IsVUFBVSxFQUFFO3FCQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUM7cUJBQ2IsS0FBSyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUM7cUJBQzFCLFVBQVUsRUFBRTtxQkFDWixRQUFRLENBQUMsR0FBRyxDQUFDO3FCQUNiLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkM7WUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtnQkFDN0MsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDMUQ7WUFDRCxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDbkM7Z0JBQ0QsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUNyQjtpQkFBTTtnQkFDSCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN2QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNsQztnQkFDRCxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtvQkFDbkMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ25CLElBQ0ksQ0FBQyxDQUFDLElBQUk7d0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO3dCQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUs7d0JBQ3pCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVTs0QkFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUM7d0JBQ25DLENBQUMsQ0FBQyxDQUFDLFFBQVE7d0JBQ1gsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUNkO3dCQUNFLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQzt3QkFDbEMsTUFBTSxHQUFHLEdBQUksTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQ25FLENBQUMsRUFDRCxJQUFJLENBQUMsWUFBWSxFQUNqQixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksQ0FBQyxNQUFNLEVBQ1gsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FDZixDQUFDO3dCQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7NEJBQ25DLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN0Qjt5QkFBTSxJQUNILENBQUMsQ0FBQyxJQUFJO3dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTt3QkFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLO3dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTO3dCQUN6QixDQUFDLENBQUMsQ0FBQyxRQUFRO3dCQUNYLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDZDt3QkFDRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7d0JBQ2xDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLDJCQUEyQixDQUNoRSxDQUFDLEVBQ0QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxXQUFXLENBQ25CLENBQUM7d0JBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTs0QkFDbkMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3BDLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3RCO3lCQUFNLElBQ0gsQ0FBQyxDQUFDLElBQUk7d0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO3dCQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUs7d0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQjt3QkFDaEMsQ0FBQyxDQUFDLENBQUMsUUFBUTt3QkFDWCxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2Q7d0JBQ0UsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO3dCQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQ0FBa0MsQ0FDdkUsQ0FBQyxFQUNELElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFDO3dCQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7NEJBQ25DLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN0Qjt5QkFBTSxJQUNILENBQUMsQ0FBQyxJQUFJO3dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTt3QkFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLO3dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxhQUFhO3dCQUM3QixDQUFDLENBQUMsQ0FBQyxRQUFRO3dCQUNYLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDZDt3QkFDQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7d0JBQ2pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLDhCQUE4QixDQUNuRSxDQUFDLEVBQ0QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsRUFDaEIsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFDO3dCQUNGLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7NEJBQ25DLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN0Qjt5QkFBTSxJQUNILENBQUMsQ0FBQyxJQUFJO3dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTt3QkFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLO3dCQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxlQUFlO3dCQUMvQixDQUFDLENBQUMsQ0FBQyxRQUFRO3dCQUNYLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDZDt3QkFDQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7d0JBQ2pDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFDQUFxQyxDQUMxRSxDQUFDLEVBQ0QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsTUFBTSxFQUNYLElBQUksQ0FBQyxXQUFXLENBQ25CLENBQUM7d0JBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTs0QkFDbkMsV0FBVyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ3BDLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3RCO3lCQUFNLElBQ0gsQ0FBQyxDQUFDLElBQUk7d0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO3dCQUNmLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUs7d0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLHVCQUF1Qjt3QkFDdkMsQ0FBQyxDQUFDLENBQUMsUUFBUTt3QkFDWCxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQ2Q7d0JBQ0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO3dCQUNqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyw0Q0FBNEMsQ0FDakYsQ0FBQyxFQUNELElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyx1QkFBdUIsRUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsV0FBVyxDQUNuQixDQUFDO3dCQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7NEJBQ25DLFdBQVcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUNwQyxDQUFDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN0Qjt5QkFBTTt3QkFDSCxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7cUJBQzVCO2lCQUNKO3FCQUFNO29CQUNILENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztpQkFDNUI7Z0JBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFO29CQUNiLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2lCQUN0QjthQUNKO1lBRUQsSUFBSSxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEI7WUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSwyQkFBMkIsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzRCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEQsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLFdBQVcsS0FBSyxLQUFLLEVBQUU7Z0JBQzdDLHdCQUF3QixFQUFFLENBQUM7YUFDOUI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxTQUFTO2FBQ1QsTUFBTSxDQUFDLGVBQWUsQ0FBQzthQUN2QixJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQzthQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQztZQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUEsQ0FBQyxDQUFDLEtBQUssQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2pFLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDO2FBQ2YsSUFBSSxDQUFDLEdBQUcsRUFBRyxVQUFVLENBQUM7WUFDbEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBRyxLQUFLLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQSxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9ELENBQUMsQ0FBQzthQUNGLE1BQU0sQ0FBQyxZQUFZLENBQUM7YUFDcEIsS0FBSyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7YUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNiLE9BQU8sMENBQTBDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUM7UUFDaEYsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsVUFBVTthQUNWLFVBQVUsRUFBRTthQUNaLFFBQVEsQ0FBQyxRQUFRLENBQUM7YUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUM7WUFDMUIsT0FBTyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSTthQUNwQixJQUFJLEVBQUU7YUFDTixVQUFVLEVBQUU7YUFDWixRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1lBQzFCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BCLE9BQU8sWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNILE9BQU8sWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQy9DO1FBQ0wsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxFQUFFLENBQUM7UUFFZCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7WUFDcEUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUk7YUFDdEIsS0FBSyxFQUFFO2FBQ1AsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7YUFDbkIsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUM7YUFDckIsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUM7WUFDbEIsSUFBSSxDQUFDLENBQUM7WUFDTixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUNwQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ3BDO2lCQUFNO2dCQUNILENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUI7WUFDRCxPQUFPLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDLFVBQVU7YUFDVixVQUFVLEVBQUU7YUFDWixRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1lBQ2xCLE9BQU8sUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSTthQUNwQixJQUFJLEVBQUU7YUFDTixVQUFVLEVBQUU7YUFDWixRQUFRLENBQUMsUUFBUSxDQUFDO2FBQ2xCLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxDQUFDO1lBQ04sSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRTtnQkFDcEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNwQztpQkFBTTtnQkFDSCxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUM7YUFDRCxNQUFNLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBTTtZQUMvQixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsU0FBUyxDQUFDLElBQUk7WUFDbkIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxTQUFTLFFBQVEsQ0FBQyxJQUFJO1lBQ2xCLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsU0FBUyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztpQkFDdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ3RCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2lCQUN0QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVsQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBRUQsU0FBUyx3QkFBd0I7WUFDN0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFNO2dCQUN4QyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtvQkFDbEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUMxQztxQkFBTSxJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtvQkFDekQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztvQkFDeEQsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN4QztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUVELFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRSxTQUFTO1lBQy9CLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxFQUFFO2dCQUN4QixPQUFPO2FBQ1Y7WUFDRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7Z0JBQ3BFLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3BELEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDN0IsSUFBSSxHQUFHLENBQUMsU0FBUztvQkFDYixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUN2QixXQUFXLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUNoQyxDQUFDLENBQUMsQ0FBQztnQkFDUCxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzthQUN2QjtZQUVELElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLEdBQUcsQ0FBQyxRQUFRO29CQUNaLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ3RCLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ2hDLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7UUFDTCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRTtZQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzNDO0lBQ0wsQ0FBQyxDQUFDLG9CQUFvQjtJQUV0QixTQUFTO1FBQ0wsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNuRSxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDaEUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUMvRCxNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sZUFBZSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFeEMsSUFBSSxlQUFlLElBQUksWUFBWSxFQUFFO1lBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsS0FBSyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDaEU7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRTtZQUM5QyxPQUFPLGtCQUFrQixDQUFDO1NBQzdCO2FBQU07WUFDSCxPQUFPLGtCQUFrQixDQUFDO1NBQzdCO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsS0FBSzthQUNMLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7WUFDbkIsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUNuQixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDO1lBQ3BDLE9BQU8sWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFDO1FBQ1IsT0FBTyxDQUFDLFlBQVksTUFBTSxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDO0lBQzNELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFVO1FBQ3ZCLElBQUksSUFBSSxHQUFHLHVEQUF1RCxDQUFDO1FBQ25FLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyQyxNQUFNLElBQUksR0FBUSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNILElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDbkU7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQsU0FBUyxDQUFDLENBQUM7UUFDUCxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFO1lBQ3RCLE9BQU8sU0FBUyxDQUFDO1NBQ3BCO2FBQU07WUFDSCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM5QztRQUNELENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDWixDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBQ0QsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxNQUFNLFFBQVEsR0FBVSxVQUFVLEdBQUUsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksSUFBSSxHQUFHLGtDQUFrQyxDQUFDO1FBQzlDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNwQixJQUNJLENBQUMsS0FBSyxZQUFZO2dCQUNsQixDQUFDLEtBQUssVUFBVTtnQkFDaEIsQ0FBQyxLQUFLLGFBQWE7Z0JBQ25CLENBQUMsS0FBSyxNQUFNO2dCQUNaLENBQUMsS0FBSyxRQUFRO2dCQUNkLENBQUMsS0FBSyxjQUFjO2dCQUNwQixDQUFDLEtBQUssVUFBVTtnQkFDaEIsQ0FBQyxLQUFLLElBQUk7Z0JBQ1YsQ0FBQyxLQUFLLFVBQVU7Z0JBQ2hCLENBQUMsS0FBSyxRQUFRO2dCQUNkLENBQUMsS0FBSyxPQUFPO2dCQUNiLENBQUMsS0FBSyxHQUFHO2dCQUNULENBQUMsS0FBSyxHQUFHO2dCQUNULENBQUMsS0FBSyxVQUFVO2dCQUNoQixDQUFDLEtBQUssSUFBSTtnQkFDVixDQUFDLEtBQUssSUFBSSxFQUNaO2dCQUNFLFlBQVk7YUFDZjtpQkFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLEVBQUU7Z0JBQzlCLElBQUk7b0JBQ0EsSUFBSTt3QkFDSiwrQ0FBK0M7d0JBQy9DLENBQUM7d0JBQ0QsK0JBQStCO3dCQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDO3dCQUMzQyxjQUFjLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLElBQUksR0FBRyxJQUFJLEdBQUcsK0NBQStDLEdBQUcsQ0FBQyxHQUFHLCtCQUErQixHQUFHLE9BQU8sR0FBRyxjQUFjLENBQUM7YUFDbEk7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUMsQ0FBQyxFQUFFO1lBQ3hGLElBQUksR0FBRyxJQUFJLEdBQUcsdUZBQXVGLENBQUM7U0FDMUc7YUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFDO1lBQzVGLElBQUksR0FBRyxJQUFJLEdBQUcsMkVBQTJFLENBQUM7U0FDOUY7UUFDRCxPQUFPLElBQUksR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQzsrR0ExekRRLDBCQUEwQixrQkFzRTFCLGdCQUFnQixhQUNoQixpQkFBaUI7bUdBdkVqQiwwQkFBMEIscUZDM0N2QywyeEhBNkZBOztTRGxEYSwwQkFBMEI7NEZBQTFCLDBCQUEwQjtrQkFQdEMsU0FBUzsrQkFDRSx3QkFBd0IsaUJBQ25CLGlCQUFpQixDQUFDLElBQUk7OzBCQTJFakMsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUN2QixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBwcmVmZXItY29uc3Q6IDEgKi9cbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0NoaWxkLFxuICBJbmplY3QsXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEluamVjdGFibGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIFNFVFRJTkdTX1NFUlZJQ0UsXG4gIFNldHRpbmdzU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQge1xuICBaSVRJX0RBVEFfU0VSVklDRSxcbiAgWml0aURhdGFTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZSc7XG5pbXBvcnQge0RhdGFUYWJsZUZpbHRlclNlcnZpY2UsIEZpbHRlck9ian0gZnJvbSBcIi4uLy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtjYXRjaEVycm9yfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7Zmlyc3RWYWx1ZUZyb20sIG1hcCwgT2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IFZpc3VhbGl6ZXJTZXJ2aWNlQ2xhc3MgIH0gZnJvbSAnLi4vdmlzdWFsaXplci1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgVHJlZU5vZGVQcm9jZXNzb3IgfSBmcm9tICcuL25ldHdvcmstdmlzdWFsaXplci50cmVlbm9kZXByb2Nlc3Nvcic7XG5pbXBvcnQgeyBOZXR3b3JrVmlzdWFsaXplckhlbHBlciB9IGZyb20gJy4vbmV0d29yay12aXN1YWxpemVyLmhlbHBlcic7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvbG9nZ2VyLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW5ldHdvcmstdmlzdWFsaXplcicsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiAnLi9uZXR3b3JrLXZpc3VhbGl6ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uZXR3b3JrLXZpc3VhbGl6ZXIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBOZXR3b3JrVmlzdWFsaXplckNvbXBvbmVudCBleHRlbmRzIFZpc3VhbGl6ZXJTZXJ2aWNlQ2xhc3MgaW1wbGVtZW50cyBPbkluaXQge1xuLy8gZXhwb3J0IGNsYXNzIE5ldHdvcmtWaXN1YWxpemVyQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHRpdGxlID0gJ05ldHdvcmsgVmlzdWFsaXplcidcbiAgcHVibGljIGQzO1xuICB1bmlxSWQgPSAwO1xuICBtYXhPYmplY3RzUGVyTm9kZSA9IDEwMDE7XG4gIHRyZWV0b29sdGlwO1xuICBmdWxsU2NyZWVuID0gZmFsc2U7XG4gIGlzTG9hZGluZyA9IHRydWU7XG4gIG5vU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gIHNlcnZpY2VzID0gW107XG4gIHNlcnZpY2VzX3RvdGFsQ291bnQgPSAwO1xuICBhbGxfc2VydmljZXNfZmV0Y2hlZCA9IGZhbHNlO1xuICBpZGVudGl0aWVzID0gW107XG4gIGlkZW50aXRpZXNfdG90YWxDb3VudCA9IDA7XG4gIGFsbF9pZGVudGl0aWVzX2ZldGNoZWQgPSBmYWxzZTtcbiAgZWRnZXJvdXRlcnMgPSBbXTtcbiAgZWRnZXJvdXRlcnNfdG90YWxDb3VudCA9IDA7XG4gIGFsbF9lZGdlcm91dGVyc19mZXRjaGVkID0gZmFsc2U7XG4gIHNlcnZpY2VfcG9saWNpZXMgPSBbXTtcbiAgc2VydmljZV9wb2xpY2llc190b3RhbENvdW50ID0gMDtcbiAgYWxsX3NlcnZpY2VfcG9saWNpZXNfZmV0Y2hlZCA9IGZhbHNlO1xuICBlZGdlX3JvdXRlcl9wb2xpY2llcyA9IFtdO1xuICBlZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ID0gMDtcbiAgYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQgPSBmYWxzZTtcbiAgc2VydmljZV9yb3V0ZXJfcG9saWNpZXMgPSBbXTtcbiAgc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCA9IDA7XG4gIGFsbF9zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkID0gZmFsc2U7XG4gIGNvbmZpZ3MgPSBbXTtcbiAgZmlsZXJSZXNwb25zZU1lc3NhZ2UgPSAnc2VhcmNoIGZpbHRlci4uJztcbiAgYmFzZU5ldHdvcmtHcmFwaDtcbiAgbmV0d29ya0dyYXBoO1xuICBjdXJyZW50TmV0d29yaztcbiAgc2VhcmNoUm9vdE5vZGU7XG5cbiAgc2VydmljZVBvbGljaWVzVHJlZU5vZGVzID0gW107XG4gIHNlcnZpY2VzVHJlZU5vZGVzID0gW107XG4gIGlkZW50aXRpZXNUcmVlTm9kZXMgPSBbXTtcbiAgZWRnZXJvdXRlcnNUcmVlTm9kZXMgPSBbXTtcbiAgZXJQb2xpY2llc1RyZWVOb2RlcyA9IFtdO1xuICBzZXJ2aWNlRWRnZVJvdXRlclBvbGljeVRyZWVOb2RlcyA9IFtdO1xuXG4gIGF1dG9jb21wbGV0ZU9wdGlvbnM7XG4gIHJlc291cmNlVHlwZUVycm9yID0gZmFsc2U7XG4gIGZpbHRlclRleHQgPSAnJztcbiAgc2VhcmNoV29yZCA9ICcnO1xuICByZXNvdXJjZVR5cGUgPSAnJztcbiAgem9vbTtcbiAgc3ZnO1xuICB0cmVlbWFwO1xuICBub2RlcztcbiAgbm9kZTtcbiAgbGluaztcbiAgbGlua3M7XG4gIGxpbmtFeGl0O1xuICBsaW5rVXBkYXRlO1xuICBvcGVuTm9kZXMgPSBbXTtcbiAgdHJhbnNmb3JtO1xuICBub2RlVXBkYXRlO1xuICBub2RlRXhpdDtcbiAgbm9kZUVudGVyO1xuICBjb250ZXh0bWVudU5vZGU7XG4gIGNpcmNsZXM7XG4gIGNvbnRleHRtZW51Tm9kZVR5cGU6YW55ID0gW107XG4gIHNpbXVsYXRpb247XG4gIHRyZWVEYXRhO1xuICBncmFwaHRvb2x0aXA7XG4gIHNlYXJjaENhY2hlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IFNldHRpbmdzU2VydmljZSxcbiAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICBwcml2YXRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICBwdWJsaWMgdHJlZU5vZGVQcm9jZXNzb3I6IFRyZWVOb2RlUHJvY2Vzc29yLFxuICAgICBwdWJsaWMgdG9wb2xvZ3lIZWxwZXI6IE5ldHdvcmtWaXN1YWxpemVySGVscGVyLFxuICApIHtcbiAgICAgc3VwZXIoKTtcbiAgICAvLyBzdXBlcihzZXR0aW5nc1NlcnZpY2UsIHppdGlTZXJ2aWNlKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICB0aGlzLmdldE5ldHdvcmtPYmplY3RzKCk7XG4gIH1cblxuICAgIGdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSkge1xuICAgIHJldHVybiBjbG9uZURlZXAoe1xuICAgICAgZmlsdGVyOiBcIlwiLFxuICAgICAgbm9TZWFyY2g6IHRydWUsXG4gICAgICBvcmRlcjogXCJhc2NcIixcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBzZWFyY2hPbjogXCJuYW1lXCIsXG4gICAgICBzb3J0OiBcIm5hbWVcIixcbiAgICAgIHRvdGFsOiBwYWdlc2l6ZVxuICAgIH0pXG4gICAgfVxuXG4gIGFzeW5jIGdldE5ldHdvcmtPYmplY3RzKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgYXdhaXQgdGhpcy5yZWFkQWxsT2JqZWN0cygpO1xuICAgICB0aGlzLnByb2Nlc3NGaXJzdE5ldHdvcmtHcmFwaCgpO1xuICB9XG5cbiAgIGFzeW5jIGZldGNoSWRlbnRpdGllcyAocGFnZXNpemUpIHtcbiAgICAgIGNvbnN0IGlkZW50aXRpZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgIC5nZXQoYGlkZW50aXRpZXNgLCBpZGVudGl0aWVzX3BhZ2luZywgW10pXG4gICAgICAudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICB0aGlzLmlkZW50aXRpZXMgPSByZXN1bHQuZGF0YT8gcmVzdWx0LmRhdGE6IFtdO1xuICAgICAgICAgdGhpcy5pZGVudGl0aWVzX3RvdGFsQ291bnQgPSByZXN1bHQubWV0YSAmJiByZXN1bHQubWV0YS5wYWdpbmF0aW9uPyByZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAwO1xuICAgICAgICAgaWYgKCF0aGlzLmlkZW50aXRpZXMgfHwgdGhpcy5pZGVudGl0aWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0aWVzID0gW107XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlkZW50aXRpZXNfdG90YWxDb3VudCA8IHRoaXMubWF4T2JqZWN0c1Blck5vZGUgKXtcbiAgICAgICAgICAgdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgaWRlbnRpdGllc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgYGlkZW50aXRpZXNgLFxuICAgICAgICAgICAgICAgICBpZGVudGl0aWVzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICApLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5pZGVudGl0aWVzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgIHByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICB9XG4gICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuaWRlbnRpdGllc190b3RhbENvdW50ID0gdGhpcy5pZGVudGl0aWVzLmxlbmd0aDtcbiAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBJZGVudGl0aWVzJywgZXJyb3IubWVzc2FnZSk7XG4gICAgIH0pOyAgLy8gaWRlbnRpdHkgcHJvbWlzZXNcbiAgfVxuXG4gIGFzeW5jIGZldGNoU2VydmljZXMocGFnZXNpemUpIHtcbiAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYHNlcnZpY2VzYCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAudGhlbiggYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHJlc3VsdC5kYXRhPyByZXN1bHQuZGF0YTogW107XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzX3RvdGFsQ291bnQgPSByZXN1bHQubWV0YSAmJiByZXN1bHQubWV0YS5wYWdpbmF0aW9uPyByZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzIHx8IHRoaXMuc2VydmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2aWNlc190b3RhbENvdW50IDwgdGhpcy5tYXhPYmplY3RzUGVyTm9kZSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgICBjb25zdCBzX3Byb21pc2VzID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBgc2VydmljZXNgLFxuICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc19wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBQcm9taXNlLmFsbChzX3Byb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgIC8vIHRoaXMuc2VydmljZXNfdG90YWxDb3VudCA9IHRoaXMuc2VydmljZXMubGVuZ3RoO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgc2VydmljZXMnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBmZXRjaFNlcnZpY2VQb2xpY2llcyhwYWdlc2l6ZSkge1xuICAgICAgIGNvbnN0IHNlcnZpY2VzUG9saWNpZXNfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAuZ2V0KGBzZXJ2aWNlLXBvbGljaWVzYCwgc2VydmljZXNQb2xpY2llc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKCBhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMgPSByZXN1bHQuZGF0YT8gcmVzdWx0LmRhdGE6IFtdO1xuICAgICAgICAgICAgIHRoaXMuc2VydmljZV9wb2xpY2llc190b3RhbENvdW50ID0gcmVzdWx0Lm1ldGEgJiYgcmVzdWx0Lm1ldGEucGFnaW5hdGlvbj8gcmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IDogMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZXJ2aWNlX3BvbGljaWVzIHx8IHRoaXMuc2VydmljZV9wb2xpY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzID0gW107XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmljZV9wb2xpY2llc190b3RhbENvdW50IDwgdGhpcy5tYXhPYmplY3RzUGVyTm9kZSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHNwX3Byb21pc2VzID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc1BvbGljaWVzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgICAgIGBzZXJ2aWNlLXBvbGljaWVzYCxcbiAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VzUG9saWNpZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhICYmIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3BfcHJvbWlzZXMucHVzaCh0bXBfcHJvbWlzZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBQcm9taXNlLmFsbChzcF9wcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAvLyB0aGlzLnNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCA9IHRoaXMuc2VydmljZV9wb2xpY2llcy5sZW5ndGg7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgc2VydmljZS1wb2xpY2llcycsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRWRnZVJvdXRlcnMocGFnZXNpemUpIHtcbiAgICAgICBjb25zdCByb3V0ZXJzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYGVkZ2Utcm91dGVyc2AsIHJvdXRlcnNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAudGhlbiggYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycyA9IHJlc3VsdC5kYXRhPyByZXN1bHQuZGF0YTogW107XG4gICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQgPSByZXN1bHQubWV0YSAmJiByZXN1bHQubWV0YS5wYWdpbmF0aW9uPyByZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVkZ2Vyb3V0ZXJzIHx8IHRoaXMuZWRnZXJvdXRlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lZGdlcm91dGVyc190b3RhbENvdW50IDwgdGhpcy5tYXhPYmplY3RzUGVyTm9kZSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbF9lZGdlcm91dGVyc19mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgICBjb25zdCByX3Byb21pc2VzID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICByb3V0ZXJzX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgICAgIGBlZGdlLXJvdXRlcnNgLFxuICAgICAgICAgICAgICAgICAgICAgcm91dGVyc19wYWdpbmcsXG4gICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnMucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByX3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHJfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAvLyB0aGlzLmVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQgPSB0aGlzLmVkZ2Vyb3V0ZXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBlZGdlLXJvdXRlcnMnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICB9KTtcbiAgfVxuXG4gYXN5bmMgZmluZEVkZ2VSb3V0ZXJQb2xpY2llcyhwYWdlc2l6ZSkge1xuICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyA9IFtdO1xuICAgICAgY29uc3QgZXJwb2xpY2llc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYGVkZ2Utcm91dGVyLXBvbGljaWVzYCwgZXJwb2xpY2llc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXMgPSByZXN1bHQuZGF0YT8gcmVzdWx0LmRhdGE6IFtdO1xuICAgICAgICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ID0gcmVzdWx0Lm1ldGEgJiYgcmVzdWx0Lm1ldGEucGFnaW5hdGlvbj8gcmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IDogMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyB8fCB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICAgIGVycG9saWNpZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICAgICAgYGVkZ2Utcm91dGVyLXBvbGljaWVzYCxcbiAgICAgICAgICAgICAgICAgICAgIGVycG9saWNpZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcl9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHJfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgLy8gdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ID0gdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcy5sZW5ndGg7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluIGZldGNoaW5nIGVkZ2Utcm91dGVyLXBvbGljaWVzJywgZXJyb3IpO1xuICAgICAgIH0pO1xuIH1cbiBhc3luYyBmZXRjaFNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMocGFnZXNpemUpIHtcbiAgICAgdGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llcyA9IFtdO1xuICAgICBjb25zdCBzZXJwX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgcmV0dXJuIGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAuZ2V0KGBzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzYCwgc2VycF9wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzID0gcmVzdWx0LmRhdGE/IHJlc3VsdC5kYXRhOiBbXTtcbiAgICAgICAgICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPSByZXN1bHQubWV0YSAmJiByZXN1bHQubWV0YS5wYWdpbmF0aW9uPyByZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzIHx8IHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCA8IHRoaXMubWF4T2JqZWN0c1Blck5vZGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxfc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICAgIHNlcnBfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICAgICAgYHNlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXNgLFxuICAgICAgICAgICAgICAgICAgICAgc2VycF9wYWdpbmcsXG4gICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEuZm9yRWFjaCgoc2VydikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByX3Byb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHJfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAvLyB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPSB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycsIGVycm9yKTtcbiAgICAgICB9KTtcbiB9XG4gYXN5bmMgZmV0Y2hDb25maWdzKHBhZ2VzaXplKSB7XG4gICAgdGhpcy5jb25maWdzID0gW107XG4gICAgY29uc3QgY29uZmlnc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAuZ2V0KGBjb25maWdzYCwgY29uZmlnc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IHJlc3VsdC5kYXRhPyByZXN1bHQuZGF0YTogW107XG4gICAgICAgICAgIGNvbnN0IGNvbmZpZ3NfdG90YWxDb3VudCA9IHJlc3VsdC5tZXRhICYmIHJlc3VsdC5tZXRhLnBhZ2luYXRpb24/IHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCA6IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlncyB8fCB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWdzX3RvdGFsQ291bnQgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgICAgY29uc3Qgcl9wcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBgY29uZmlnc2AsXG4gICAgICAgICAgICAgICAgICAgICBjb25maWdzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcl9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBQcm9taXNlLmFsbChyX3Byb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ3NfdG90YWxDb3VudCA9IHRoaXMuY29uZmlncy5sZW5ndGg7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgY29uZmlncycsIGVycm9yKTtcbiAgICAgICAgICB9KTtcblxuIH1cblxuIGFzeW5jIHJlYWRBbGxPYmplY3RzKCkge1xuICAgY29uc3QgbXlQcm9taXNlID0gIGF3YWl0IG5ldyBQcm9taXNlKCAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICBsZXQgbmV0d29ya1Zpc1Byb21pc2VzID1bXTtcbiAgICAgY29uc3QgcGFnZXNpemUgPSA1MDA7XG4gICAgIGNvbnN0IGVwcyA9IHRoaXMuZmV0Y2hJZGVudGl0aWVzKHBhZ2VzaXplKTtcbiAgICAgY29uc3Qgc3MgPSB0aGlzLmZldGNoU2VydmljZXMocGFnZXNpemUpO1xuICAgICBjb25zdCBzcHMgPSB0aGlzLmZldGNoU2VydmljZVBvbGljaWVzKHBhZ2VzaXplKTtcbiAgICAgY29uc3QgZXJzID0gdGhpcy5mZXRjaEVkZ2VSb3V0ZXJzKHBhZ2VzaXplKTtcbiAgICAgY29uc3QgZXJwcyA9IHRoaXMuZmluZEVkZ2VSb3V0ZXJQb2xpY2llcyhwYWdlc2l6ZSk7XG4gICAgIGNvbnN0IHNlcnBzID0gdGhpcy5mZXRjaFNlcnZpY2VFZGdlUm91dGVyUG9saWNpZXMocGFnZXNpemUpO1xuICAgICBjb25zdCBjZmcgPSB0aGlzLmZldGNoQ29uZmlncyhwYWdlc2l6ZSk7XG4gICAgIFByb21pc2UuYWxsKFtlcHMsIHNzLCBzcHMsIGVycywgZXJwcywgZXJwcywgc2VycHMsIGNmZ10pLnRoZW4oKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgnZW5kJyk7XG4gICAgIH0pO1xuICAgfSk7XG5cbiB9XG5cbiAgcHJvY2Vzc0ZpcnN0TmV0d29ya0dyYXBoKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdHJlZU9iaiA9IHRoaXMudG9wb2xvZ3lIZWxwZXIuZ2V0UmVzb3VyY2VUcmVlT2JqKFxuICAgICAgICAgICAgICAgICd0aGlzLmN1cnJlbnROZXR3b3JrLm5hbWUnLFxuICAgICAgICAgICAgICAgICd0aGlzLmN1cnJlbnROZXR3b3JrLnN0YXR1cycsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyxcbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXRpZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzLFxuICAgICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnMsXG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNfdG90YWxDb3VudCwgdGhpcy5pZGVudGl0aWVzX3RvdGFsQ291bnQsIHRoaXMuZWRnZXJvdXRlcnNfdG90YWxDb3VudCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCwgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCxcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlcixcbiAgICAgICAgICAgICAgICB0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQsIHRoaXMuYWxsX3NlcnZpY2VzX2ZldGNoZWQsIHRoaXMuYWxsX2lkZW50aXRpZXNfZmV0Y2hlZCwgdGhpcy5hbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCxcbiAgICAgICAgICAgICAgICB0aGlzLmFsbF9lZGdlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkLCB0aGlzLmFsbF9zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnVuaXFJZCA9IHRyZWVPYmoubGFzdElkO1xuICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodHJlZU9iaiwgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGhpcy5iYXNlTmV0d29ya0dyYXBoID0gXy5jbG9uZURlZXAodGhpcy5uZXR3b3JrR3JhcGgpO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlUG9saWNpZXNUcmVlTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXNUcmVlTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllc1RyZWVOb2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVyc1RyZWVOb2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5lclBvbGljaWVzVHJlZU5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VFZGdlUm91dGVyUG9saWN5VHJlZU5vZGVzID0gW107XG5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZVBvbGljaWVzVHJlZU5vZGVzID0gdGhpcy5maWxsQXV0b0NvbXBsZXRlVHJlZU5vZGVzKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9wb2xpY2llcyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VQb2xpY2llc1RyZWVOb2RlcyxcbiAgICAgICAgICAgICAgICAnU2VydmljZVBvbGljeSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzVHJlZU5vZGVzID0gdGhpcy5maWxsQXV0b0NvbXBsZXRlVHJlZU5vZGVzKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1RyZWVOb2RlcyxcbiAgICAgICAgICAgICAgICAnU2VydmljZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmlkZW50aXRpZXNUcmVlTm9kZXMgPSB0aGlzLmZpbGxBdXRvQ29tcGxldGVUcmVlTm9kZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5pZGVudGl0aWVzLFxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllc1RyZWVOb2RlcyxcbiAgICAgICAgICAgICAgICAnSWRlbnRpdHknXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVyc1RyZWVOb2RlcyA9IHRoaXMuZmlsbEF1dG9Db21wbGV0ZVRyZWVOb2RlcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzLFxuICAgICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnNUcmVlTm9kZXMsXG4gICAgICAgICAgICAgICAgJ1JvdXRlcidcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZXJQb2xpY2llc1RyZWVOb2RlcyA9IHRoaXMuZmlsbEF1dG9Db21wbGV0ZVRyZWVOb2RlcyhcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLFxuICAgICAgICAgICAgICAgIHRoaXMuZXJQb2xpY2llc1RyZWVOb2RlcyxcbiAgICAgICAgICAgICAgICAnUm91dGVyIFBvbGljeSdcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuc2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lUcmVlTm9kZXMgPSB0aGlzLmZpbGxBdXRvQ29tcGxldGVUcmVlTm9kZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llcyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VFZGdlUm91dGVyUG9saWN5VHJlZU5vZGVzLFxuICAgICAgICAgICAgICAgICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmluaXRUb3BvVmlldygpO1xuICAgICAgICAgICAgdGhpcy5iYXNlTmV0d29ya0dyYXBoID0gXy5jbG9uZURlZXAodGhpcy5uZXR3b3JrR3JhcGgpO1xuICAgICAgICB9IGNhdGNoIChlcnI6YW55KSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgIGZpbGxBdXRvQ29tcGxldGVUcmVlTm9kZXMocmVzb3VyY2VzQXJyYXksIGFyciwgdHlwZU5hbWUpIHtcbiAgICAgcmVzb3VyY2VzQXJyYXkgJiYgcmVzb3VyY2VzQXJyYXkuZm9yRWFjaCggKG9iKSA9PiB7XG4gICAgICBhcnIucHVzaChvYi5uYW1lKTtcbiAgICAgfSk7XG4gICAgcmV0dXJuIGFycjtcbiAgIH1cblxuICBkZWJvdW5jZShmdW5jLCB0aW1lb3V0ID0gMTUwKXtcbiAgICBsZXQgdGltZXI7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpOyB9LCB0aW1lb3V0KTtcbiAgICB9O1xuICB9XG5cbiAgbndTZWFyY2hDaGFuZ2UoZXZlbnQpe1xuICAgaWYgKHRoaXMuZmlsdGVyVGV4dC5sZW5ndGggPiAxICYmIGV2ZW50LmtleSAhPT0nRXNjYXBlJyAmJiBldmVudC5rZXkgIT09ICdBcnJvd1JpZ2h0JyAmJiBldmVudC5rZXkgIT09J0Fycm93TGVmdCcgJiYgZXZlbnQua2V5ICE9PSdFbnRlcicpIHtcbiAgICAgdGhpcy5maWxlclJlc3BvbnNlTWVzc2FnZSA9ICdzZWFyY2ggZmlsdGVyLi4nO1xuICAgICB0aGlzLmRlYm91bmNlKHRoaXMuZmlsdGVyU2VhcmNoQXJyYXkoKSk7XG4gICB9XG4gIH1cblxuICAgIGF1dG9jb21wbGV0ZVNlYXJjaChldmVudCkge1xuICAgICAgICBjb25zdCBzdHIgPSBldmVudCA/IGV2ZW50Lm9wdGlvbi52YWx1ZSA6ICcnO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlQ29uZGl0aW9uQ2hlY2soc3RyKTtcbiAgICB9XG5cbiAgICByZXNvdXJjZVR5cGVDaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLmZpbGVyUmVzcG9uc2VNZXNzYWdlID0gJ3NlYXJjaCBmaWx0ZXIuLic7XG4gICAgICAgIHRoaXMuc2VhcmNoQ2FjaGUgPSBbXTtcbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE5vZGUoKTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaExpbmtDb2xvcnMoKTtcbiAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVFcnJvciA9ICFfLmlzRW1wdHkodGhpcy5maWx0ZXJUZXh0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbHRlclRleHQgPSAnJztcbiAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPVtdO1xuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZVBvbGljaWVzVHJlZU5vZGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnICYmIHRoaXMuYWxsX3NlcnZpY2VzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZXNUcmVlTm9kZXM7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiB0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuaWRlbnRpdGllc1RyZWVOb2RlcztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycgJiYgdGhpcy5hbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5lZGdlcm91dGVyc1RyZWVOb2RlcztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9lZGdlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLmVyUG9saWNpZXNUcmVlTm9kZXM7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VFZGdlUm91dGVyUG9saWN5VHJlZU5vZGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5maWx0ZXJUZXh0KSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZUNvbmRpdGlvbkNoZWNrKHRoaXMuZmlsdGVyVGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZWFyY2hSZXNvdXJjZUNvbmRpdGlvbkNoZWNrKHNlYXJjaFR4dCkge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnJyAmJiBzZWFyY2hUeHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICB0aGlzLnJlc291cmNlVHlwZUVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZUluVHJlZShzZWFyY2hUeHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlYXJjaFJlc291cmNlSW5UcmVlKHNlYXJjaFR4dCkge1xuICAgICAgICB0aGlzLm5vU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc291cmNlVHlwZUVycm9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzZXRUcmVlKG51bGwpO1xuICAgICAgICBpZiAoc2VhcmNoVHh0ID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaExpbmtDb2xvcnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWFyY2hOb2RlKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoTGlua0NvbG9ycygpO1xuXG4gICAgICAgICAgICBsZXQgcGF0aHMgPSBbXTtcbiAgICAgICAgICAgIGxldCB0YXJnZXROb2RlcyA9IFtdO1xuICAgICAgICAgICAgY29uc3Qgbm9kZUlkcyA9IFtdO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgIXRoaXMuYWxsX3NlcnZpY2VfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd09iID0gdGhpcy5zZWFyY2hDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlYXJjaFR4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQ6YW55ID0gdGhpcy50b3BvbG9neUhlbHBlci5jcmVhdGVTZXJ2aWNlUG9saWN5Tm9kZShyYXdPYik7XG4gICAgICAgICAgICAgICAvLyBpZC5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc05vZGVFeGlzdHModGhpcy5ub2Rlc1sxXSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1sxXS5kYXRhLmNoaWxkcmVuLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeSh0aGlzLm5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5mb3JFYWNoKChuZCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgaWYgKGkgIT09MCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhDb2xsYXBzZShuZCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXNbMF0gPSByYXdPYjtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5ub2Rlc1sxXSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbMV0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmIHRoaXMuYWxsX3NlcnZpY2VfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldE5vZGVzID0gdGhpcy5wcm9jZXNzU2VhcmNoSW5QcmVvcmRlcih0aGlzLm5vZGVzWzFdLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlcnMnICYmICF0aGlzLmFsbF9lZGdlcm91dGVyc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3T2IgPSB0aGlzLnNlYXJjaENhY2hlLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gc2VhcmNoVHh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZDphbnkgPSB0aGlzLnRvcG9sb2d5SGVscGVyLmNyZWF0ZUVkZ2VSb3V0ZXJOb2RlKHJhd09iKTtcbiAgICAgICAgICAgICAgIC8vIGlkLmNsaWNrUHJvY2VzcyA9IFwiTm90IFlldFwiO1xuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmlzTm9kZUV4aXN0cyh0aGlzLm5vZGVzWzRdLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzWzRdLmRhdGEuY2hpbGRyZW4ucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeSh0aGlzLm5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5mb3JFYWNoKChuZCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhDb2xsYXBzZShuZCk7XG4gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVyc1swXSA9IHJhd09iO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5vZGVzWzRdKTtcblxuICAgICAgICAgICAgICAgIHRhcmdldE5vZGVzID0gdGhpcy5wcm9jZXNzU2VhcmNoSW5QcmVvcmRlcih0aGlzLm5vZGVzWzRdLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlcnMnICYmIHRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1s0XSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnICYmICF0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3T2IgPSB0aGlzLnNlYXJjaENhY2hlLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gc2VhcmNoVHh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZDphbnkgPSB0aGlzLnRvcG9sb2d5SGVscGVyLmNyZWF0ZVNlcnZpY2VOb2RlKHJhd09iKTtcbiAgICAgICAgICAgICAgICBpZC5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc05vZGVFeGlzdHModGhpcy5ub2Rlc1syXSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzWzJdLmRhdGEuY2hpbGRyZW4ucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeSh0aGlzLm5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1swXSA9IHJhd09iO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5vZGVzWzJdKTtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1syXSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaCgobmQsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCBpICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhDb2xsYXBzZShuZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnICYmIHRoaXMuYWxsX3NlcnZpY2VzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1syXSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnaWRlbnRpdGllcycgJiYgIXRoaXMuYWxsX2lkZW50aXRpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd09iID0gdGhpcy5zZWFyY2hDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlYXJjaFR4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQ6YW55ID0gdGhpcy50b3BvbG9neUhlbHBlci5jcmVhdGVJZGVudGl0eU5vZGUocmF3T2IpO1xuICAgICAgICAgICAgICAgIGlkLmNsaWNrUHJvY2VzcyA9IFwiTm90IFlldFwiO1xuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmlzTm9kZUV4aXN0cyh0aGlzLm5vZGVzWzNdLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1szXS5kYXRhLmNoaWxkcmVuLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeSh0aGlzLm5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllc1swXSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllc1swXSA9IHJhd09iO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5vZGVzWzNdKTtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1szXSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaCgobmQsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFwaENvbGxhcHNlKG5kKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnaWRlbnRpdGllcycgJiYgdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbM10sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiAhdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgY29uc3QgcmF3T2IgPSB0aGlzLnNlYXJjaENhY2hlLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gc2VhcmNoVHh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZDphbnkgPSB0aGlzLnRvcG9sb2d5SGVscGVyLmNyZWF0ZUVkZ2VSb3V0ZXJQb2xpY3lOb2RlKHJhd09iKTtcbiAgICAgICAgICAgICAgICBpZC5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcblxuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmlzTm9kZUV4aXN0cyh0aGlzLm5vZGVzWzVdLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1s1XS5kYXRhLmNoaWxkcmVuLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodGhpcy5uZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaCgobmQsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFwaENvbGxhcHNlKG5kKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaChuZCA9PiB0aGlzLmdyYXBoQ29sbGFwc2UobmQpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llc1swXSA9IHJhd09iO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5vZGVzWzVdKTtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1s1XSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbNV0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmICF0aGlzLmFsbF9zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3T2IgPSB0aGlzLnNlYXJjaENhY2hlLmZpbmQoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gc2VhcmNoVHh0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpZDphbnkgPSB0aGlzLnRvcG9sb2d5SGVscGVyLmNyZWF0ZVNlcnZpY2VFZGdlUm91dGVyUG9saWN5Tm9kZShyYXdPYik7XG4gICAgICAgICAgICAgICAgaWQuY2xpY2tQcm9jZXNzID0gXCJOb3QgWWV0XCI7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXNOb2RlRXhpc3RzKHRoaXMubm9kZXNbNl0sIGlkKSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1s2XS5kYXRhLmNoaWxkcmVuLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGQzLmhpZXJhcmNoeSh0aGlzLm5ldHdvcmtHcmFwaC5kYXRhLCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5mb3JFYWNoKChuZCxpKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoaSAhPT0gNSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoQ29sbGFwc2UobmQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc1swXSA9IHJhd09iO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5vZGVzWzZdKTtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1s2XSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycgJiYgdGhpcy5hbGxfc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1s2XSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5mb3JFYWNoKG5kID0+IHRoaXMuZ3JhcGhDb2xsYXBzZShuZCkpO1xuICAgICAgICAgICAgcGF0aHMgPSB0aGlzLmV4cGxvcmVQYXRoc0ZvclNlYXJjaGVkTm9kZXModGFyZ2V0Tm9kZXMsIHBhdGhzLCBub2RlSWRzKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXROb2RlcyAmJiB0YXJnZXROb2Rlcy5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9TZWFyY2hSZXN1bHRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoTGlua0NvbG9ycygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5QYXRocyhwYXRocywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBkMy5zZWxlY3RBbGwoJ2NpcmNsZScpLmZpbHRlcihmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFOYW1lID0gXy5nZXQoZCwgJ2RhdGEubmFtZScsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgZGF0YUlkID0gXy5nZXQoZCwgJ2RhdGEuaWQnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVOYW1lID0gXy5nZXQodGFyZ2V0Tm9kZXNbMF0sICdkYXRhLm5hbWUnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhTmFtZS50b0xvd2VyQ2FzZSgpID09PSBzZWFyY2hUeHQudG9Mb3dlckNhc2UoKSAmJiBub2RlTmFtZSA9PT0gZGF0YU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgnZmlsbCcsICcjYTYwMzAzJyk7IC8vIzAwNDQ0NywgNDcwMDAwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNOb2RlRXhpc3RzKHJvb3ROb2RlOmFueSwgaWQpIHtcbiAgICAgcmV0dXJuIHJvb3ROb2RlLmRhdGEuY2hpbGRyZW4uZmluZCggKG5kKSA9PiBuZC51dWlkID09PWlkLnV1aWQgKTtcbiAgICB9XG5cbiAgICBleHBsb3JlUGF0aHNGb3JTZWFyY2hlZE5vZGVzKHRhcmdldE5vZGVzLCBwYXRocywgbm9kZUlkcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IHRhcmdldE5vZGVzICYmIGkgPCB0YXJnZXROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgbGV0IG5kID0gdGFyZ2V0Tm9kZXNbaV07XG4gICAgICAgICAgIHBhdGhzLnB1c2gobmQpO1xuICAgICAgICAgd2hpbGUgKG5kLnBhcmVudCkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUlkID0gXy5nZXQobmQucGFyZW50LCAnZGF0YS5pZCcpO1xuICAgICAgICAgICAgaWYgKG5vZGVJZHMuaW5kZXhPZihub2RlSWQpIDwgMCkge1xuICAgICAgICAgICAgICAgbm9kZUlkcy5wdXNoKG5vZGVJZCk7XG4gICAgICAgICAgICAgICBwYXRocy5wdXNoKG5kLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZCA9IG5kLnBhcmVudDtcbiAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhdGhzO1xuICAgIH1cblxuICAgIHByb2Nlc3NTZWFyY2hJblByZW9yZGVyKG5vZGVPYmosIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IF8uZ2V0KG5vZGVPYmosICdkYXRhLm5hbWUnKTtcbiAgICAgICAgLy8gY29uc3Qgbm9kZUlkID0gXy5nZXQobm9kZU9iaiwgJ2RhdGEuaWQnKTtcbiAgICAgICAgY29uc3QgaXNSb290Tm9kZSA9IF8uZ2V0KG5vZGVPYmosICdkYXRhLnJvb3ROb2RlJyk7XG4gICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Jvb3ROb2RlICYmIGlzUm9vdE5vZGUgPT09ICdZZXMnICYmIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoVHh0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRhcmdldE5vZGVzLnB1c2gobm9kZU9iaik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vZGVPYmouY2hpbGRyZW4gPyBub2RlT2JqLmNoaWxkcmVuIDogbm9kZU9iai5fY2hpbGRyZW47XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBjaGlsZE5vZGVzICYmIGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKGNoaWxkTm9kZXNbaV0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YXJnZXROb2RlcztcbiAgICB9XG4gICAgY2xlYXJTZWFyY2hMaW5rQ29sb3JzKCkge1xuICAgICAgICB0aGlzLnN2Zy5zZWxlY3RBbGwoJ3BhdGgubGluaycpLmVhY2goIGZ1bmN0aW9uICh0aGlzOiBhbnksICBkOmFueSkge1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdzdHJva2UnLCAnd2hpdGUnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnY2lyY2xlJykuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZDphbnkpIHtcbiAgICAgICAgICAgIHJldHVybiBkLl9jaGlsZHJlbiA/ICd2YXIoLS10YWJsZVRleHQpJyA6ICcjZmZmJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblBhdGhzKHBhdGhzLCBkb1Jlc2V0ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcGF0aElkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5Ob2Rlcy5pbmRleE9mKGwuZGF0YS5pZCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTm9kZXMucHVzaChsLmRhdGEuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHBhbmQocGF0aHNbaV0pO1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGwsIGRvUmVzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aElkcy5wdXNoKGwuZGF0YS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0aElkcy5wdXNoKHBhdGhzWzFdLmRhdGEuaWQpO1xuICAgICAgICBwYXRoSWRzLnB1c2gocGF0aHNbMF0uZGF0YS5pZCk7XG5cbiAgICAgICAgbGV0IGNoaWxkcmVuZyA9IG51bGw7IC8vIGdldCAybmQgbGV2ZWwgZGF0YSBub2Rlcy5cbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuZyA9IHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlblsxXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2lkZW50aXRpZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlblsyXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuZyA9IHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuWzNdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXItcG9saWNpZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbls0XTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbls1XTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZGRfY2hpbGRzID0gY2hpbGRyZW5nLmNoaWxkcmVuID8gY2hpbGRyZW5nLmNoaWxkcmVuIDogY2hpbGRyZW5nLl9jaGlsZHJlbjsgLy8gMm5kIGxldmVsIGNoYWlsZHMuIGdyb3Vwcy9jaGlsZHJlbnNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZGRfY2hpbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyAyc3QgbGV2ZWxcbiAgICAgICAgICAgIC8vICBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlbmRwb2ludHMnIHx8IHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnKSB7XG4gICAgICAgICAgICBpZiAobmRkX2NoaWxkc1tpXS5kYXRhLnR5cGUgPT09ICdHcm91cCcpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGdyb3Vwc1xuICAgICAgICAgICAgICAgIGNvbnN0IGQxID0gbmRkX2NoaWxkc1tpXTsgLy9nZXQgZ3JvdXBcbiAgICAgICAgICAgICAgICBpZiAoZDEgJiYgcGF0aHNbMV0uZGF0YS5pZCA9PT0gZDEuZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjAgPSBkMS5jaGlsZHJlbiA/IGQxLmNoaWxkcmVuIDogZDEuX2NoaWxkcmVuOyAvLyAzcmQgbGV2ZWwgY2hpbGRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGNoaWxkcmVuMC5maWx0ZXIoZnVuY3Rpb24gKHJlcGxPYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxPYi5kYXRhLmlkID09PSBwYXRoc1swXS5kYXRhLmlkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZDEuY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIGQxLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycmdycCA9IG5kZF9jaGlsZHMuZmlsdGVyKGZ1bmN0aW9uIChyZXBsT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iai5kYXRhLmlkID09PSBkMS5kYXRhLmlkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5nLmNoaWxkcmVuID0gYXJyZ3JwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5uZXR3b3JrR3JhcGgsIGRvUmVzZXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbmcuZGF0YS5pZCA9PT0gcGF0aHNbMV0uZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBuZGRfY2hpbGRzLmZpbHRlcihmdW5jdGlvbiAocmVwbE9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iLmRhdGEuaWQgPT09IHBhdGhzWzBdLmRhdGEuaWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbmcuY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuZy5fY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5uZXR3b3JrR3JhcGgsIGRvUmVzZXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGFub2RlcyA9IG51bGw7IC8vIGdldCAybmQgbGV2ZWwgZGF0YSBub2Rlcy5cbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bMF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlcycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bMV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJykge1xuICAgICAgICAgICAgZGF0YW5vZGVzID0gdGhpcy5uZXR3b3JrR3JhcGguZGF0YS5jaGlsZHJlblsyXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bM107XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bNF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJykge1xuICAgICAgICAgICAgZGF0YW5vZGVzID0gdGhpcy5uZXR3b3JrR3JhcGguZGF0YS5jaGlsZHJlbls1XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YW5vZGVzLmlkID09PSBwYXRoc1sxXS5kYXRhLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBkYXRhbm9kZXMuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChyZXBsT2IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iLmlkID09PSBwYXRoc1swXS5kYXRhLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhbm9kZXMuY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5uZXR3b3JrR3JhcGgsIGRvUmVzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBOb2RlcyA9IGRhdGFub2Rlcy5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZ3JvdXBOb2Rlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChncm91cE5vZGVzW2tdLmlkID09PSBwYXRoc1sxXS5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHNlYXJjaGVkIGdyb3VwIG5vZGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gZ3JvdXBOb2Rlc1trXS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKHJlcGxPYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxPYi5pZCA9PT0gcGF0aHNbMF0uZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwTm9kZXNba10uY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycmdycCA9IGdyb3VwTm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChyZXBsT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iai5pZCA9PT0gcGF0aHNbMV0uZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFub2Rlcy5jaGlsZHJlbiA9IGFycmdycDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKHRoaXMubmV0d29ya0dyYXBoLCBkb1Jlc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVUcmVlKHRoaXMubmV0d29ya0dyYXBoLCBkb1Jlc2V0KTtcbiAgICAgICAgdGhpcy5zZWFyY2hSb290Tm9kZSA9IHBhdGhzWzFdO1xuXG4gICAgICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnLmxpbmsnKS5lYWNoKGZ1bmN0aW9uICh0aGlzOmFueSwgZDphbnkpIHtcbiAgICAgICAgICAgIGlmIChwYXRoSWRzLmluZGV4T2YoZC5kYXRhLmlkKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdzdHJva2UnLCAncmVkJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgnc3Ryb2tlJywgJ3doaXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0U2VhcmNoTm9kZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoUm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gXy5jbG9uZURlZXAodGhpcy5iYXNlTmV0d29ya0dyYXBoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5ldHdvcmtHcmFwaCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldFRyZWUoY2xlYXJTZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE5vZGUoKTtcbiAgICAgICAgaWYgKGNsZWFyU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoRmlsdGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoVHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLm9wZW5Ob2Rlcy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gdGhpcy5vcGVuTm9kZXNbaV07XG4gICAgICAgICAgICBpZiAoZCAmJiBkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZC5fY2hpbGRyZW4gPSBkLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGQuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZShkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5ub2Rlcy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gdGhpcy5ub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChkICYmIGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaExpbmtDb2xvcnMoKTtcbiAgICAgICAgdGhpcy5vcGVuTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zaXplVG9GaXQoKTtcbiAgICAgICAgdGhpcy5yZXNldFpvb20oKTtcbiAgICB9XG4gICAgZXhwYW5kKGQpIHtcbiAgICAgICAgaWYgKGQuX2NoaWxkcmVuKSB7XG4gICAgICAgICAgICBkLmNoaWxkcmVuID0gZC5fY2hpbGRyZW47XG4gICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb2xsYXBzZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMub3Blbk5vZGVzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLm5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgZmluZE1vZGVsTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGU7XG4gICB9XG4gICBhc3luYyBzZWFyY2hPYmplY3RzVXNpbmdBcGkoKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IG1vZGVsX25hbWUgPSB0aGlzLmZpbmRNb2RlbE5hbWUoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFdvcmQgPSBfLmNsb25lKHRoaXMuZmlsdGVyVGV4dCk7XG4gICAgICAgICAgY29uc3Qgc3RyID0gYCR7dGhpcy5yZXNvdXJjZVR5cGV9P2ZpbHRlcj0lMjBuYW1lJTIwY29udGFpbnMlMjAlMjIke3RoaXMuc2VhcmNoV29yZH0lMjImbGltaXQ9NSZvZmZzZXQ9MCZzb3J0PW5hbWUlMjAlMjBhc2NgO1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgLmNhbGwoc3RyKVxuICAgICAgICAgIC50aGVuKChyZXN1bHQ6YW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENhY2hlID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChyZXMpID0+IHtcbiAgICAgICAgICAgIC8qIGNvbnN0IG9iajogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgICAgICAgICBuYW1lOiByZXMubmFtZSxcbiAgICAgICAgICAgICB9OyAqL1xuICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5wdXNoKHJlcy5uYW1lKTtcbiAgICAgICAgICAgfSApO1xuICAgICAgICAgICB0aGlzLm5vU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgICAgIGNvbnN0IGNvdW50QSA9ICByZXN1bHQuZGF0YT8ubGVuZ3RoID4gMD8gcmVzdWx0LmRhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgICAgdGhpcy5maWxlclJlc3BvbnNlTWVzc2FnZSA9IFwic2VhcmNoIHdvcmQ6J1wiKyB0aGlzLnNlYXJjaFdvcmQgK1wiJywgIHJlc3VsdDogdG9wIFwiKyBjb3VudEEgK1wiIG9mICBcIityZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgK1wiIHJlY29yZHNcIjtcbiAgICAgICAgICB9KS5jYXRjaCggKGVycm9yKSA9PiB7XG4gICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICB9KTtcblxuICAgfVxuXG4gICBmaWx0ZXJTZWFyY2hBcnJheSgpIHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVFcnJvciA9ICFfLmlzRW1wdHkodGhpcy5maWx0ZXJUZXh0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZVBvbGljaWVzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmICF0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hPYmplY3RzVXNpbmdBcGkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAgJiYgdGhpcy5hbGxfc2VydmljZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5zZXJ2aWNlc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlcycgICYmICF0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuc2VhcmNoT2JqZWN0c1VzaW5nQXBpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiB0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuaWRlbnRpdGllc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiAhdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuc2VhcmNoT2JqZWN0c1VzaW5nQXBpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlcnMnICYmIHRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuZWRnZXJvdXRlcnNUcmVlTm9kZXMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXJzJyAmJiAhdGhpcy5hbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCkge1xuICAgICAgICAgICB0aGlzLnNlYXJjaE9iamVjdHNVc2luZ0FwaSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuZXJQb2xpY2llc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hPYmplY3RzVXNpbmdBcGkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lUcmVlTm9kZXMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hPYmplY3RzVXNpbmdBcGkoKTtcbiAgICAgICAgfVxuICAgfVxuICAgem9vbUluKCkge1xuXG4gICB9XG4gICB6b29tT3V0KCkge1xuXG4gICB9XG4gICBjbGVhclNlYXJjaEZpbHRlcigpIHtcbiAgICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgICAgdGhpcy5yZXNldEF1dG9Db21wbGV0ZU9wdGlvbnMoKTtcbiAgICAgIHRoaXMucmVzb3VyY2VUeXBlRXJyb3IgPSBmYWxzZTtcbiAgICAgIC8vIHRoaXMuZmlsdGVyU2VhcmNoQXJyYXkoKTtcbiAgICAgIHRoaXMucmVzZXRTZWFyY2hOb2RlKCk7XG4gICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICB0aGlzLmNsZWFyU2VhcmNoTGlua0NvbG9ycygpO1xuICAgfVxuXG4gICByZXNldEF1dG9Db21wbGV0ZU9wdGlvbnMoKXtcbiAgICAgIHRoaXMuc2VhcmNoQ2FjaGUgPSBbXTtcbiAgICAgIHRoaXMuZmlsZXJSZXNwb25zZU1lc3NhZ2UgPSAnc2VhcmNoIGZpbHRlci4uJztcbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgdGhpcy5hbGxfc2VydmljZV9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VQb2xpY2llc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclRleHQ9PT0nJyB8fCBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiAhdGhpcy5hbGxfc2VydmljZV9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnICAmJiB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dD09PScnIHx8IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAgJiYgIXRoaXMuYWxsX3NlcnZpY2VzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiB0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuaWRlbnRpdGllc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclRleHQ9PT0nJyB8fCBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiAhdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXJzJyAmJiB0aGlzLmFsbF9lZGdlcm91dGVyc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLmVkZ2Vyb3V0ZXJzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dD09PScnIHx8IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycgJiYgIXRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycgJiYgdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5lclBvbGljaWVzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dD09PScnIHx8IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiAhdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lUcmVlTm9kZXMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUZXh0PT09JycgfHwgb3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIH1cbiAgIH1cblxuICAgY2xlYXJTZWFyY2hUeXBlKCkge1xuICAgICAgICB0aGlzLnJlc291cmNlVHlwZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgIH1cblxuICAgcmVzZXRab29tKCkge1xuICAgICAgIC8vIGNvbnN0IGN1cnJlbnRab29tID0gdGhpcy5nZXRab29tU2NhbGUoKTtcbiAgICAgICBjb25zdCB0cmFuc2Zvcm06IGFueSA9IHRoaXMudHJhbnNmb3JtIHx8IF8uY2xvbmVEZWVwKGQzLnpvb21JZGVudGl0eSk7XG4gICAgICAgdHJhbnNmb3JtLmsgPSAxO1xuICAgICAgIHRoaXMuc3ZnLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSk7XG4gICB9XG5cbiAgZ3JhcGhDb2xsYXBzZShkKSB7XG4gICAgICAgaWYgKGQuZGF0YS5yb290Tm9kZSA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgZC5kYXRhLmNsaWNrUHJvY2VzcyA9ICdOb3QgWWV0JztcbiAgICAgICAgICAgZC5fY2hpbGRyZW4gPSBudWxsO1xuICAgICAgIH1cbiAgICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47XG4gICAgICAgICAgIGQuX2NoaWxkcmVuICYmIGQuX2NoaWxkcmVuPy5maW5kKG5kID0+IHRoaXMuZ3JhcGhDb2xsYXBzZSk7XG4gICAgICAgICAgIGQuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgIH1cbiAgfVxuXG4gIGluaXRUb3BvVmlldygpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHsgdG9wOiAyMCwgcmlnaHQ6IDE5MCwgYm90dG9tOiAzMCwgbGVmdDogMCB9O1xuICAgICAgICBjb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gIG1hcmdpbi5yaWdodDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gbWFyZ2luLmJvdHRvbTtcblxuICAgICAgICB0aGlzLnRyZWV0b29sdGlwID0gZDMuc2VsZWN0KCcjdG9vbHRpcCcpO1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2VUeXBlRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWx0ZXJUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMucmVzb3VyY2VUeXBlID0gJyc7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlWm9vbSA9IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN2Zy5hdHRyKCd0cmFuc2Zvcm0nLCBlLnRyYW5zZm9ybSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuem9vbSA9IGQzLnpvb20oKS5vbignem9vbScsIGhhbmRsZVpvb20pO1xuXG4gICAgICAgIHRoaXMuc3ZnID0gZDNcbiAgICAgICAgICAgIC5zZWxlY3QoJyNOZXR3b3JrVmlzdWFsaXplclNWRycpXG4gICAgICAgICAgICAuYXR0cignd2lkdGgnLCAnMTAwJScpXG4gICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAgICAgLmNhbGwodGhpcy56b29tKVxuICAgICAgICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCAnLTIwIC00NTAgJyArICh3aWR0aCAtIG1hcmdpbi50b3AqMiAtIG1hcmdpbi5ib3R0b20pICsgJyAnICsgKyhoZWlnaHQqMiAtbWFyZ2luLmJvdHRvbSkpXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAtMjAgKyAnLCcgKyAyMDAgKyAnKScpO1xuXG4gICAgICAgIGQzLnNlbGVjdCgnYm9keScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGQzLnNlbGVjdCgnI3RvcG9jb250ZXh0bWVudScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZDMuc2VsZWN0QWxsKCdnID4gKicpLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRyZWVtYXAgPSBkMy50cmVlKCkubm9kZVNpemUoWzg1LCA1XSk7XG4gICAgICAgIHRoaXMubmV0d29ya0dyYXBoLnggPSAxMDA7IC8vIGhlaWdodCAvIDQ7XG4gICAgICAgIHRoaXMubmV0d29ya0dyYXBoLnkgPSAxMDA7XG4gICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goY29sbGFwc2UpO1xuICAgICAgIC8vIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goIChuZDphbnkpID0+ICB0aGlzLmdyYXBoQ29sbGFwc2UobmQpICk7XG4gICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5ldHdvcmtHcmFwaCk7XG5cbiAgICAgICAgXy5kZWxheSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IGQzLnpvb21JZGVudGl0eTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnggPSAtMjAwO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ueSA9IDIwNTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmsgPSAxO1xuICAgICAgICAgICAgdGhpcy5zdmcudHJhbnNpdGlvbigpLmR1cmF0aW9uKDc1MCkuYXR0cigndHJhbnNmb3JtJywgdGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICB9LCA2MDApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbGxhcHNlKGQpIHtcbiAgICAgICAgICAgIGlmIChkLmRhdGEucm9vdE5vZGUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgZC5kYXRhLmNsaWNrUHJvY2VzcyA9ICdOb3QgWWV0JztcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGQuX2NoaWxkcmVuID0gZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbi5mb3JFYWNoKGNvbGxhcHNlKTtcbiAgICAgICAgICAgICAgICBkLmNoaWxkcmVuID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICB9XG5cbiAgICB1cGRhdGVUcmVlKHNvdXJjZSwgZG9SZXNldCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkb1Jlc2V0KSB7XG4gICAgICAgICAgICBkMy5zZWxlY3RBbGwoJ2cgPiAqJykucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSA3NTA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy50cmVlbWFwKHRoaXMubmV0d29ya0dyYXBoKTtcbiAgICAgICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLnRyZWVEYXRhLmRlc2NlbmRhbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy50cmVlRGF0YS5kZXNjZW5kYW50cygpLnNsaWNlKDEpO1xuICAgICAgICB9IGNhdGNoIChlOmFueSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBidWlsZGluZyB0cmVlIG9iamVjdDogJysgZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdmdEZWZzID0gdGhpcy5zdmcuYXBwZW5kKCdkZWZzJyk7XG4gICAgICAgIGNvbnN0IGxpbmVhckdyYWRpZW50ID0gc3ZnRGVmcy5hcHBlbmQoJ2xpbmVhckdyYWRpZW50JykuYXR0cignaWQnLCAnTm9kZUdyYWRpZW50Jyk7XG4gICAgICAgIGxpbmVhckdyYWRpZW50LmFwcGVuZCgnc3RvcCcpLmF0dHIoJ2NsYXNzJywgJ3N0b3AxJykuYXR0cignb2Zmc2V0JywgJzAlJyk7XG4gICAgICAgIGxpbmVhckdyYWRpZW50LmFwcGVuZCgnc3RvcCcpLmF0dHIoJ2NsYXNzJywgJ3N0b3AyJykuYXR0cignb2Zmc2V0JywgJzUwJScpO1xuICAgICAgICBsaW5lYXJHcmFkaWVudC5hcHBlbmQoJ3N0b3AnKS5hdHRyKCdjbGFzcycsICdzdG9wMycpLmF0dHIoJ29mZnNldCcsICcxMDAlJyk7XG5cbiAgICAgICAgY29uc3QgbGluZWFyR3JhZGllbnQyID0gc3ZnRGVmcy5hcHBlbmQoJ2xpbmVhckdyYWRpZW50JykuYXR0cignaWQnLCAnTm9kZUhvdmVyR3JhZGllbnQnKTtcbiAgICAgICAgbGluZWFyR3JhZGllbnQyLmFwcGVuZCgnc3RvcCcpLmF0dHIoJ2NsYXNzJywgJ3N0b3AxYScpLmF0dHIoJ29mZnNldCcsICcwJScpO1xuICAgICAgICBsaW5lYXJHcmFkaWVudDIuYXBwZW5kKCdzdG9wJykuYXR0cignY2xhc3MnLCAnc3RvcDJhJykuYXR0cignb2Zmc2V0JywgJzUwJScpO1xuICAgICAgICBsaW5lYXJHcmFkaWVudDIuYXBwZW5kKCdzdG9wJykuYXR0cignY2xhc3MnLCAnc3RvcDNhJykuYXR0cignb2Zmc2V0JywgJzEwMCUnKTtcblxuICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIGQueSA9IGQuZGVwdGggKiA0MDA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLnN2Zy5zZWxlY3RBbGwoJ2cubm9kZScpLmRhdGEodGhpcy5ub2RlcywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkLmRhdGEuaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZUVudGVyID0gdGhpcy5ub2RlXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChfLnN0YXJ0c1dpdGgoZC5kYXRhLm5hbWUsICdFZGdlIFJvdXRlcnMnKSB8fCBfLmluY2x1ZGVzKGQuZGF0YS50eXBlLCAnRWRnZSBSb3V0ZXInKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnZWRnZS1yb3V0ZXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhkLmRhdGEubmFtZSwgJ0lkZW50aXRpZXMnKSB8fCBfLmluY2x1ZGVzKGQuZGF0YS5uYW1lLCAnQXNzb2NpYXRlZCBJZGVudGl0aWVzJykgfHwgXy5pbmNsdWRlcyhkLmRhdGEudHlwZSwgJ0lkZW50aXR5JykgfHwgXy5pbmNsdWRlcyhkLmRhdGEudHlwZSwgJ0Jyb3daZXIgSWRlbnRpdHknKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnZW5kcG9pbnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnU2VydmljZXMnKSB8fCBfLnN0YXJ0c1dpdGgoZC5kYXRhLnR5cGUsICdTZXJ2aWNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3NlcnZpY2UnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnQmluZC1TZXJ2aWNlcycpIHx8IF8uc3RhcnRzV2l0aChkLmRhdGEubmFtZSwgJ0RpYWwtU2VydmljZXMnKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnc2VydmljZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfLnN0YXJ0c1dpdGgoZC5kYXRhLm5hbWUsICdCaW5kLVBvbGljaWVzJykgfHwgXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnRGlhbC1Qb2xpY2llcycpIHx8IF8uc3RhcnRzV2l0aChkLmRhdGEubmFtZSwgJ0JpbmQgUG9saWN5JykgKSB7XG4gICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnc2VydmljZS1wb2xpY3knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhkLmRhdGEubmFtZSwgJ1NlcnZpY2UgUG9saWNpZXMnKSB8fCBfLmluY2x1ZGVzKGQuZGF0YS50eXBlLCAnU2VydmljZSBQb2xpY3knKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnc2VydmljZS1wb2xpY3knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnRWRnZSBSb3V0ZXIgUG9saWNpZXMnKSB8fCBfLnN0YXJ0c1dpdGgoZC5kYXRhLnR5cGUsICdSb3V0ZXIgUG9saWN5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ2VkZ2Utcm91dGVyLXBvbGljeSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnU2VydmljZSBFZGdlIFJvdXRlciBQb2xpY2llcycpIHx8XG4gICAgICAgICAgICAgICAgICAgIF8uc3RhcnRzV2l0aChkLmRhdGEudHlwZSwgJ1NlcnZpY2UgUm91dGVyIFBvbGljeScpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljeSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gZC5fY2hpbGRyZW4gPyAnbm9kZSAnICsgY2xhc3NOYW1lIDogJ25vZGUgdGVybWluYXRlICcgKyBjbGFzc05hbWU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLngpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIHNvdXJjZS55ICsgJywnICsgc291cmNlLnggKyAnKSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIGQueSArICcsJyArIGQueCArICcpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVFbnRlci5vbignY29udGV4dG1lbnUnLCAoZXZlbnQsIGQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBkMy5zZWxlY3QoJyN0b29sdGlwJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICAgICAgY29uc3QgbncgPSB0aGlzLmN1cnJlbnROZXR3b3JrO1xuICAgICAgICAgICAgY29uc3QgcmF3RWRnZXJvdXRlcnMgPSB0aGlzLmVkZ2Vyb3V0ZXJzO1xuICAgICAgICAgICAgY29uc3QgcmF3RW5kcG9pbnRzID0gdGhpcy5pZGVudGl0aWVzO1xuICAgICAgICAgICAgY29uc3QgcmF3QXBwd2FucyA9IHRoaXMuc2VydmljZV9wb2xpY2llcztcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VSb3V0ZXJQb2xpY2llcyA9IHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXM7XG5cbiAgICAgICAgICAgIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEuY29udGV4dE1lbnUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjdG9wb2NvbnRleHRtZW51JylcbiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAgICAgICAgICAgICAgIC5zdHlsZSgnbGVmdCcsIGV2ZW50Lm9mZnNldFggKyAncHgnKVxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoJ3RvcCcsIGV2ZW50Lm9mZnNldFkgKyAncHgnKVxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG9iaiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZCAmJiBkLmRhdGEgJiYgKGQuZGF0YS50eXBlID09PSAnSWRlbnRpdHknIHx8IGQuZGF0YS50eXBlID09PSAnQnJvd1plciBJZGVudGl0eScgKSApIHtcbiAgICAgICAgICAgICAgIGlmKGQuZGF0YS5zdGF0dXMgPT09IFwiUmVnaXN0ZXJlZFwiKSB7XG4gICAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaVNpbmdsZUxUJyk7XG4gICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVVVCcpO1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVMVCcpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpVkMnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpQUwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVQcycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxBbGwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMU2luZ2xlUm91dGVyJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpQ0wnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUxUJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnaWRlbnRpdHknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEudHlwZSA9PT0gJ0VkZ2UgUm91dGVyJykge1xuICAgICAgICAgICAgICBpZihkLmRhdGEuc3RhdHVzID09PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpRkxTaW5nbGVSb3V0ZXInKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZVVUJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaU1ldCcpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpSW5zJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlFVicpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlBTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVBzJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTEFsbCcpO1xuXG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlDTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpTFQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnZWRnZS1yb3V0ZXInO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGQgJiYgZC5kYXRhICYmIGQuZGF0YS50eXBlID09PSAnU2VydmljZScpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpTWV0Jyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaVZDJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlJbnMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVWJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlBTCcpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlFUHMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMQWxsJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlMVCcpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlTaW5nbGVVVCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dG1lbnVOb2RlVHlwZSA9ICdzZXJ2aWNlJztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEudHlwZSA9PT0gJ1NlcnZpY2UgUG9saWN5Jykge1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpTWV0Jyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaVZDJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlJbnMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVWJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlBTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVBzJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTEFsbCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxTaW5nbGVSb3V0ZXInKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZUxUJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlDTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpTFQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZVVUJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnc2VydmljZS1wb2xpY3knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEudHlwZSA9PT0gJ1JvdXRlciBQb2xpY3knKSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUFMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlFUHMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMU2luZ2xlUm91dGVyJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxBbGwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAncm91dGVyLXBvbGljeSc7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmRhdGEgJiYgZC5kYXRhLnR5cGUgPT09ICdOZXR3b3JrJykge1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpQUwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVQcycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlGTEFsbCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxTaW5nbGVSb3V0ZXInKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZUxUJyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaUxUJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVVVCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dG1lbnVOb2RlVHlwZSA9ICduZXR3b3JrJztcbiAgICAgICAgICAgICAgICBvYmogPSBudztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmRhdGEgJiYgZC5kYXRhLnR5cGUgPT09ICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knKSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUFMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlFUHMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMQWxsJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnc2VydmljZS1yb3V0ZXItcG9saWN5JztcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0bWVudU5vZGUgPSBvYmo7XG4gICAgICAgICAgICBkMy5zZWxlY3QoJyN0b29sdGlwJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNpcmNsZXMgPSB0aGlzLm5vZGVFbnRlclxuICAgICAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdub2RlJylcbiAgICAgICAgICAgIC5hdHRyKCdyJywgMTApXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLl9jaGlsZHJlbiA/ICd2YXIoLS10YWJsZVRleHQpJyA6ICcjZmZmJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudCwgZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1RyZWVUb29sdGlwKGV2ZW50LCBkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgdGhpcy5yZW1vdmVUcmVlVG9vbHRpcClcbiAgICAgICAgICAgIC5vbignY29udGV4dG1lbnUnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBhc3luYyAoIGV2ZW50LCBkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgIGlmIChkLmRhdGEucm9vdE5vZGUgJiYgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJiBkLmRhdGEuY2xpY2tQcm9jZXNzID09PSAnTm90IFlldCcpIHtcbiAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KGV2ZW50LmN1cnJlbnRUYXJnZXQpLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBcIjEwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbig2MDApXG4gICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBcIjZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgXCIzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbig2MDApXG4gICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIFwiOVwiKVxuICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBcIjEyXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEuY29udGV4dE1lbnUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCgnI3RvcG9jb250ZXh0bWVudScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjdG9vbHRpcCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5jaGlsZHJlbiAmJiBkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5Ob2Rlcy5pbmRleE9mKGQuZGF0YS5pZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5Ob2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGQuX2NoaWxkcmVuID0gZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3Blbk5vZGVzLmluZGV4T2YoZC5kYXRhLmlkKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbk5vZGVzLnB1c2goZC5kYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5kYXRhLmNsaWNrUHJvY2VzcyA9PT0gJ05vdCBZZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkLmRhdGEudHlwZSA9PT0gJ0lkZW50aXR5JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS50eXBlID09PSAnQnJvd1plciBJZGVudGl0eScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSAgYXdhaXQgdGhpcy50cmVlTm9kZVByb2Nlc3Nvci5wcm9jZXNzSWRlbnRpdGllc0Zvck5vZGVDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBhcnJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZmluZCgobmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VGZXcobmQsIHRoaXMub3Blbk5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSA9PT0gJ1llcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEudHlwZSA9PT0gJ1NlcnZpY2UnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLnRyZWVOb2RlUHJvY2Vzc29yLnByb2Nlc3NTZXJ2aWNlc0Zvck5vZGVDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCA9IGFyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5maW5kKChuZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhuZCwgdGhpcy5vcGVuTm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZShkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS50eXBlID09PSAnU2VydmljZSBQb2xpY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLnRyZWVOb2RlUHJvY2Vzc29yLnByb2Nlc3NTZXJ2aWNlUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCA9IGFyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5maW5kKChuZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhuZCwgdGhpcy5vcGVuTm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZShkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS50eXBlID09PSAnRWRnZSBSb3V0ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLmNsaWNrUHJvY2VzcyA9ICdDb21wbGV0ZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGF3YWl0IHRoaXMudHJlZU5vZGVQcm9jZXNzb3IucHJvY2Vzc0VkZ2Vyb3V0ZXJzRm9yTm9kZUNsaWNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkID0gYXJyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gYXJyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZpbmQoKG5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlRmV3KG5kLCB0aGlzLm9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEucm9vdE5vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEucm9vdE5vZGUgPT09ICdZZXMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnR5cGUgPT09ICdSb3V0ZXIgUG9saWN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuX2NoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLnRyZWVOb2RlUHJvY2Vzc29yLnByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBhcnJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZmluZCgobmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VGZXcobmQsIHRoaXMub3Blbk5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSA9PT0gJ1llcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEudHlwZSA9PT0gJ1NlcnZpY2UgUm91dGVyIFBvbGljeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkLl9jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEuY2xpY2tQcm9jZXNzID0gJ0NvbXBsZXRlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gYXdhaXQgdGhpcy50cmVlTm9kZVByb2Nlc3Nvci5wcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0Zvck5vZGVDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkID0gYXJyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gYXJyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZpbmQoKG5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlRmV3KG5kLCB0aGlzLm9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmNoaWxkcmVuID0gZC5fY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkLmNoaWxkcmVuID0gZC5fY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGQuX2NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZC5jaGlsZHJlbiB8fCBkLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUoZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBfLmdldChkLCAnZGF0YS5jaGlsZHJlblswXS5yb290Tm9kZScsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJyb290Tm9kZSA9IF8uZ2V0KGQsICdkYXRhLnJvb3ROb2RlJywgJycpO1xuICAgICAgICAgICAgICAgIGlmIChyb290Tm9kZSA9PT0gJ1llcycgfHwgc3Vicm9vdE5vZGUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlaXNZZXNDb2xvckNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZUVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAnNTAnKVxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZCAmJiBkLmRhdGEgJiYgZC5kYXRhLm5hbWUubGVuZ3RoID49IDIwPyAnNTUwJzogJzMzMCc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAnMjAnKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCAgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGQgJiYgZC5kYXRhICYmIGQuZGF0YS5yb290Tm9kZT09PSdZZXMnPyAnLTUnOiAnLTQwJztcbiAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFwcGVuZCgneGh0bWw6Ym9keScpXG4gICAgICAgICAgICAuc3R5bGUoJ2JhY2tncm91bmQnLCAndHJhbnNwYXJlbnQnKVxuICAgICAgICAgICAgLmh0bWwoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJub2RlLXRleHQtY29udGFpbmVyXCI+PHNwYW4+JHtkLmRhdGEubmFtZX08L3NwYW4+PC9kaXY+YDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZVVwZGF0ZSA9IHRoaXMubm9kZUVudGVyLm1lcmdlKHRoaXMubm9kZSk7XG5cbiAgICAgICAgdGhpcy5ub2RlVXBkYXRlXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC55ICsgJywnICsgZC54ICsgJyknO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlVXBkYXRlLnNlbGVjdCgnY2lyY2xlLm5vZGUnKS5hdHRyKCdyJywgMTgpLmF0dHIoJ2N1cnNvcicsICdwb2ludGVyJyk7XG5cbiAgICAgICAgdGhpcy5ub2RlRXhpdCA9IHRoaXMubm9kZVxuICAgICAgICAgICAgLmV4aXQoKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxuICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSAmJiBzb3VyY2UueCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgc291cmNlLnkgKyAnLCcgKyBzb3VyY2UueCArICcpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC55ICsgJywnICsgZC54ICsgJyknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVtb3ZlKCk7XG5cbiAgICAgICAgdGhpcy5ub2RlRXhpdC5zZWxlY3QoJ2NpcmNsZScpLmF0dHIoJ3InLCAwKTtcbiAgICAgICAgdGhpcy5ub2RlRXhpdC5zZWxlY3QoJ3RleHQnKS5zdHlsZSgnZmlsbC1vcGFjaXR5JywgMTApO1xuICAgICAgICB0aGlzLmxpbmsgPSB0aGlzLnN2Zy5zZWxlY3RBbGwoJ3BhdGgubGluaycpLmRhdGEodGhpcy5saW5rcywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkLmRhdGEuaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpbmtVcGRhdGUgPSB0aGlzLmxpbmtcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuaW5zZXJ0KCdwYXRoJywgJ2cnKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpbmsnKVxuICAgICAgICAgICAgLmF0dHIoJ2QnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIGxldCBvO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLngpIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogc291cmNlLngsIHk6IHNvdXJjZS55IH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogZC54LCB5OiBkLnkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdvbmFsKG8sIG8sICcxJyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1lcmdlKHRoaXMubGluayk7XG5cbiAgICAgICAgdGhpcy5saW5rVXBkYXRlXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cignZCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdvbmFsKGQsIGQucGFyZW50LCAnMicpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5saW5rRXhpdCA9IHRoaXMubGlua1xuICAgICAgICAgICAgLmV4aXQoKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxuICAgICAgICAgICAgLmF0dHIoJ2QnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIGxldCBvO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLngpIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogc291cmNlLngsIHk6IHNvdXJjZS55IH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogZC54LCB5OiBkLnkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdvbmFsKG8sIG8sICczJyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlbW92ZSgpO1xuXG4gICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICBkLngwID0gZC54O1xuICAgICAgICAgICAgZC55MCA9IGQueTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gZGlzYWJsZUxpKGxpSWQpIHtcbiAgICAgICAgICAgIGQzLnNlbGVjdChsaUlkKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBlbmFibGVMaShsaUlkKSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QobGlJZCkuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRpYWdvbmFsKHMsIGQsIGxnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gYE0gJHtzLnl9ICR7cy54fVxuICAgICAgICAgICAgIEMgJHsocy55ICsgZC55KSAvIDJ9ICR7cy54fSxcbiAgICAgICAgICAgICAgICR7KHMueSArIGQueSkgLyAyfSAke2QueH0sXG4gICAgICAgICAgICAgICAke2QueX0gJHtkLnh9YDtcblxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByb290Tm9kZWlzWWVzQ29sb3JDaGFuZ2UoKSB7XG4gICAgICAgICAgICBkMy5zZWxlY3RBbGwoJ2NpcmNsZScpLmVhY2goZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gXy5nZXQoZCwgJ2RhdGEucm9vdE5vZGUnLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpY2tQcm9jZXNzID0gXy5nZXQoZCwgJ2RhdGEuY2xpY2tQcm9jZXNzJywgJycpO1xuICAgICAgICAgICAgICAgIGlmIChyb290Tm9kZSA9PT0gJ1llcycgJiYgY2xpY2tQcm9jZXNzID09PSAnTm90IFlldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdmaWxsJywgJ2Jyb3duJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb290Tm9kZSA9PT0gJ1llcycgJiYgY2xpY2tQcm9jZXNzICE9PSAnTm90IFlldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBkLl9jaGlsZHJlbiA/ICd2YXIoLS10YWJsZVRleHQpJyA6ICcjZmZmJztcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdmaWxsJywgY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY29sbGFwc2VGZXcoX25kLCBvcGVuTm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChfbmQuZGF0YS5pZCA9PT0gJyNhbGwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9uZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJiBfbmQuZGF0YS5jbGlja1Byb2Nlc3MgPT09ICdOb3QgWWV0Jykge1xuICAgICAgICAgICAgICAgIF9uZC5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfbmQuY2hpbGRyZW4gJiYgb3Blbk5vZGVzLmluZGV4T2YoX25kLmRhdGEuaWQpIDwgMCkge1xuICAgICAgICAgICAgICAgIF9uZC5fY2hpbGRyZW4gPSBfbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKF9uZC5fY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgICAgIF9uZC5fY2hpbGRyZW4uZmluZCgoX25kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhfbmQsIG9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIF9uZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfbmQuY2hpbGRyZW4gJiYgb3Blbk5vZGVzLmluZGV4T2YoX25kLmRhdGEuaWQpID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoX25kLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgICAgICBfbmQuY2hpbGRyZW4uZmluZCgoX25kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhfbmQsIG9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZS5jaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgXy5kZWxheSh0aGlzLnNpemVUb0ZpdC5iaW5kKHRoaXMpLCA2NTApO1xuICAgICAgICB9XG4gICAgfSAvLyBlbmQgb2YgdXBkYXRlVHJlZVxuXG4gICAgc2l6ZVRvRml0KCkge1xuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IHRoaXMuc3ZnLl9ncm91cHNbMF1bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbURlbHRhID0gYm91bmRpbmdCb3guaGVpZ2h0IC0gMTAwIC0gLWJvdW5kaW5nQm94LnRvcDtcbiAgICAgICAgY29uc3QgdG9wRGVsdGEgPSBib3VuZGluZ0JveC5oZWlnaHQgKyA1MDAgLSBib3VuZGluZ0JveC5ib3R0b207XG4gICAgICAgIGNvbnN0IHRvcE91dE9mVmlldyA9IHRvcERlbHRhIDwgMDtcbiAgICAgICAgY29uc3QgYm90dG9tT3V0T2ZWaWV3ID0gYm90dG9tRGVsdGEgPCAwO1xuXG4gICAgICAgIGlmIChib3R0b21PdXRPZlZpZXcgfHwgdG9wT3V0T2ZWaWV3KSB7XG4gICAgICAgICAgICBjb25zdCB0cmFucyA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICAgICAgdHJhbnMueSA9IHRvcE91dE9mVmlldyA/IDQwMCA6IDA7XG4gICAgICAgICAgICB0aGlzLnN2Zy50cmFuc2l0aW9uKCkuZHVyYXRpb24oNzUwKS5hdHRyKCd0cmFuc2Zvcm0nLCB0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb2xvcihkKSB7XG4gICAgICAgIGlmIChkLnN0YXR1cyA9PT0gJ0Vycm9yJyAmJiBkLmdyb3VwID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZC5zdGF0dXMgIT09ICdFcnJvcicgJiYgZC5ncm91cCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICd2YXIoLS10YWJsZVRleHQpJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAndmFyKC0tdGFibGVUZXh0KSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aWNrZWQoKSB7XG4gICAgICAgIHRoaXMubGlua3NcbiAgICAgICAgICAgIC5hdHRyKCd4MScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuc291cmNlLng7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoJ3kxJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5zb3VyY2UueTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cigneDInLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnRhcmdldC54O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKCd5MicsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQudGFyZ2V0Lnk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVzLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC54ICsgJywnICsgZC55ICsgJyknO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0FuT2JqZWN0KG8pIHtcbiAgICAgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBPYmplY3QgJiYgby5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgIH1cblxuICAgIHJlYWRPYmplY3RWYWx1ZXMobGlua09iamVjdCkge1xuICAgICAgICBsZXQgaW5mbyA9ICc8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmXCI+JztcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGxpbmtPYmplY3QuZGF0YSk7XG4gICAgICAgIGtleXMuZm9yRWFjaCggKGspID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQW5PYmplY3QobGlua09iamVjdC5kYXRhW2tdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtWYWw6IGFueSA9IGxpbmtPYmplY3QuZGF0YVtrXTtcbiAgICAgICAgICAgICAgICBpbmZvID0gaW5mbyArICcgICAnICsgayArICcgIDogICcgKyBrVmFsLmlkICsgJzxicj4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmZvID0gaW5mbyArICcgICAnICsgayArICcgIDogICcgKyBsaW5rT2JqZWN0LmRhdGFba10gKyAnPGJyPic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaW5mbyArICc8L3NwYW4+JztcbiAgICB9XG5cbiAgICBub2RlQ29sb3IoZCkge1xuICAgICAgICBpZiAoZC5zdGF0dXMgPT09ICdFcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiAnI0ZGMDAwMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JsdWUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ3N0YXJ0ZWQoZXZlbnQsIGQpIHtcbiAgICAgICAgaWYgKCFldmVudC5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwLjMpLnJlc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBkLmZ4ID0gZC54O1xuICAgICAgICBkLmZ5ID0gZC55O1xuICAgIH1cblxuICAgIGRyYWdnZWQoZCkge1xuICAgICAgICBkLmZ4ID0gZC54O1xuICAgICAgICBkLmZ5ID0gZC55O1xuICAgIH1cblxuICAgIGRyYWdlbmRlZChldmVudCwgZCkge1xuICAgICAgICBpZiAoIWV2ZW50LmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgZC5meCA9IG51bGw7XG4gICAgICAgIGQuZnkgPSBudWxsO1xuICAgIH1cbiAgICByZW1vdmVUcmVlVG9vbHRpcCgpIHtcbiAgICAgICAgdGhpcy50cmVldG9vbHRpcCA9IGQzLnNlbGVjdCgnI3Rvb2x0aXAnKTtcbiAgICAgICAgaWYgKHRoaXMudHJlZXRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMudHJlZXRvb2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRyYXdUcmVlVG9vbHRpcChldmVudCwgcykge1xuICAgICAgICB0aGlzLnRyZWV0b29sdGlwID0gZDMuc2VsZWN0KCcjdG9vbHRpcCcpO1xuICAgICAgICB0aGlzLnRyZWV0b29sdGlwLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIGNvbnN0IHggPSBldmVudC5wYWdlWCArICdweCc7XG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5wYWdlWSArIDE1ICsgJ3B4JztcbiAgICAgICAgdGhpcy50cmVldG9vbHRpcC5zdHlsZSgnbGVmdCcsIHgpO1xuICAgICAgICB0aGlzLnRyZWV0b29sdGlwLnN0eWxlKCd0b3AnLCB5KTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2x0aXAnKS5pbm5lckhUTUwgPSB0aGlzLnJlYWRUcmVlS2V5VmFsdWVzKGV2ZW50LCBzKTtcbiAgICB9XG4gICAgcmVhZFRyZWVLZXlWYWx1ZXMoZXZlbnQsIGQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBkLmRhdGEubmFtZS5pbmRleE9mKCcoJyk7XG4gICAgICBjb25zdCBmaW5JbmRleCA9IGQuZGF0YS5uYW1lLmluZGV4T2YoJyknKTtcbiAgICAgIGNvbnN0IGNvdW50U3RyOm51bWJlciA9IHN0YXJ0SW5kZXggPjA/IGQuZGF0YS5uYW1lLnN1YnN0cmluZyhzdGFydEluZGV4ICsgMSwgZmluSW5kZXgpOiAwO1xuICAgICAgICBsZXQgaW5mbyA9IGA8ZGl2IGNsYXNzPSd0b29sLXRpcC1jb250YWluZXInPmA7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkLmRhdGEpOyAvLyBtcC5rZXlzKCk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGsgPT09ICdmaXJzdENoaWxkJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdwcm90b2NvbCcgfHxcbiAgICAgICAgICAgICAgICBrID09PSAnY29udGV4dE1lbnUnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ3V1aWQnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ2xhc3RJZCcgfHxcbiAgICAgICAgICAgICAgICBrID09PSAnY2xpY2tQcm9jZXNzJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdyb290Tm9kZScgfHxcbiAgICAgICAgICAgICAgICBrID09PSAnaWQnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ2NoaWxkcmVuJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdwYXJlbnQnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ2RlcHRoJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICd4JyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICd5JyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdyb290Tm9kZScgfHxcbiAgICAgICAgICAgICAgICBrID09PSAneDAnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ3kwJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRba10gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIGluZm8gPVxuICAgICAgICAgICAgICAgICAgICBpbmZvICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPjxkaXYgY2xhc3M9XCJwcm9wLW5hbWVcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgayArXG4gICAgICAgICAgICAgICAgICAgICc6PC9kaXY+PGRpdiBjbGFzcz1cInByb3AtdmFsXCI+JyArXG4gICAgICAgICAgICAgICAgICAgIGRba10uam9pbignPGJyPiAmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7JykgK1xuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+PC9kaXY+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcFZhbCA9IGQuZGF0YVtrXSB8fCAnJztcbiAgICAgICAgICAgICAgICBpbmZvID0gaW5mbyArICc8ZGl2IGNsYXNzPVwicHJvcC1yb3dcIj48ZGl2IGNsYXNzPVwicHJvcC1uYW1lXCI+JyArIGsgKyAnOjwvZGl2PjxkaXYgY2xhc3M9XCJwcm9wLXZhbFwiPicgKyBwcm9wVmFsICsgJzwvZGl2PjwvZGl2Pic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZC5kYXRhLmZpcnN0Q2hpbGQgJiYgZC5kYXRhLmZpcnN0Q2hpbGQgPT09ICdZZXMnICYmIGNvdW50U3RyID4gdGhpcy5tYXhPYmplY3RzUGVyTm9kZS0xKSB7XG4gICAgICAgICAgICAgaW5mbyA9IGluZm8gKyAnPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWhlbHAtdGV4dFwiPk5vdGU6IGV4cGFuZCBub2RlIGRpc2FibGVkLiBVc2Ugc2VhcmNoIGZpbHRlci48L3NwYW4+JztcbiAgICAgICAgfSBlbHNlIGlmIChkLmRhdGEuZmlyc3RDaGlsZCAmJiBkLmRhdGEuZmlyc3RDaGlsZCA9PT0gJ1llcycgJiYgY291bnRTdHIgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKXtcbiAgICAgICAgICAgICBpbmZvID0gaW5mbyArICc8c3BhbiBjbGFzcz1cInRvb2x0aXAtaGVscC10ZXh0XCI+Tm90ZTogY2xpY2sgdG8gZXhwYW5kIGNoaWxkIG5vZGVzIDwvc3Bhbj4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmZvICsgJzwvZGl2Pic7XG4gICAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJ6aXRpLXBhZ2UtY29udGFpbmVyIHppdGktaWRlbnRpdGllcy1jb250YWluZXJcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJuZi1uZXR3b3JrLXRvcG9sb2d5LWNvbnRhaW5lclwiID5cblxuICAgICAgPGRpdiBjbGFzcz1cImNzcy1oZWFkZXJcIj57e3RpdGxlfX0gPC9kaXY+PGJyPlxuXG4gICAgICA8ZGl2ICBjbGFzcz1cIm5mLW5ldC12aXMtY29udHJvbHMtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZi10b3BvbG9neS16b29tLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDwhLS1idXR0b24gKGNsaWNrKT1cInpvb21PdXQoKVwiIGNsYXNzPVwibmYtdG9wb2xvZ3ktem9vbS1idXR0b24gbWludXNcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tSW4oKVwiIGNsYXNzPVwibmYtdG9wb2xvZ3ktem9vbS1idXR0b24gcGx1c1wiPjwvYnV0dG9uLS0+XG4gICAgICAgICAgPGRpdiAoY2xpY2spPVwicmVzZXRUcmVlKCdZZXMnKVwiIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgdGl0bGU9XCJSZXNldFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgKGNoYW5nZSk9XCJyZXNvdXJjZVR5cGVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXNvdXJjZVR5cGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncmVzb3VyY2UtdHlwZS1lcnJvcic6IHJlc291cmNlVHlwZUVycm9yIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZS10eXBlLXNlbGVjdFwiXG4gICAgICAgICAgICBpZD1cIlJlc291cmNlVHlwZVNlbGVjdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IFJlc291cmNlIFR5cGU8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VydmljZS1wb2xpY2llc1wiPlNlcnZpY2UgUG9saWNpZXM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VydmljZXNcIj5TZXJ2aWNlczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpZGVudGl0aWVzXCI+SWRlbnRpdGllczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlZGdlLXJvdXRlcnNcIj5FZGdlIFJvdXRlcnM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZWRnZS1yb3V0ZXItcG9saWNpZXNcIj5FZGdlIFJvdXRlciBQb2xpY2llczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzXCI+U2VydmljZSBFZGdlIFJvdXRlciBQb2xpY2llczwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibmYtbmV0LXZpcy1maWx0ZXItY29udGFpbmVyIGxpc3RCb3ggcm93XCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIChrZXl1cCk9XCJud1NlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcbiAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuZi10b3BvbG9neS1maWx0ZXItaW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cImZpbHRlclRleHRcIlxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gRmlsdGVyXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2hGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyVGV4dCAhPT0gJydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbkJhbGwgY2xvc2UgaWNvbi1jbG9zZVwiXG4gICAgICAgICAgICAgIGlkPVwiQ2xlYXJTZWFyY2hGaWx0ZXJcIlxuICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cImF1dG9jb21wbGV0ZVNlYXJjaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm5mLXRvcG9sb2d5LWxlZ2VuZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBzZXJ2aWNlcG9saWNpZXNcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5TZXJ2aWNlIFBvbGljaWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBzZXJ2aWNlc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlNlcnZpY2VzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBlbmRwb2ludHNcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5JZGVudGl0aWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBlZGdlcm91dGVyc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkVkZ2UgUm91dGVyczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgZXJwb2xpY2llc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkVkZ2UgUm91dGVyIFBvbGljaWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBzZXJ2aWNlZXJwb2xpY2llc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlNlcnZpY2UgUm91dGVyIFBvbGljaWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RlLWV4cGFuZC1oZWxwXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pY29uLXRleHQgbGVnZW5kLWFzc29jaWF0ZWQtbm9kZXNcIj5WaWV3IEFzc29jaWF0ZWQgTm9kZXM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWljb24tcG9pbnRlclwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidG9wb3RpcFwiIGlkPVwidG9vbHRpcFwiPjwvZGl2PlxuICAgICAgPHN2ZyBzdHlsZT0ncG9pbnRlci1ldmVudHM6YWxsJyBpZD1cIk5ldHdvcmtWaXN1YWxpemVyU1ZHXCI+PC9zdmc+XG4gICAgICA8bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG4iXX0=
1703
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay12aXN1YWxpemVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci9uZXR3b3JrLXZpc3VhbGl6ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Zpc3VhbGl6ZXIvbmV0d29yay12aXN1YWxpemVyL25ldHdvcmstdmlzdWFsaXplci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUNMLFNBQVMsRUFFVCxNQUFNLEVBRU4saUJBQWlCLEdBRWxCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFDTCxnQkFBZ0IsR0FFakIsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsaUJBQWlCLEdBRWxCLE1BQU0scUNBQXFDLENBQUM7QUFJN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFHLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFVakMsTUFPYSwwQkFBMkIsU0FBUSxzQkFBc0I7SUFzRXBFLFlBQ29DLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELFVBQXNCLEVBQ3RCLE1BQXFCLEVBQ3RCLGlCQUFvQyxFQUNwQyxjQUF1QztRQUU5QyxLQUFLLEVBQUUsQ0FBQztRQVB5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQ3ZELGVBQVUsR0FBVixV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QUFJLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7K0dBdjBEUSwwQkFBMEIsa0JBdUUxQixnQkFBZ0IsYUFDaEIsaUJBQWlCO21HQXhFakIsMEJBQTBCLHFGQzNDdkMsMnhIQTZGQTs7U0RsRGEsMEJBQTBCOzRGQUExQiwwQkFBMEI7a0JBUHRDLFNBQVM7K0JBQ0Usd0JBQXdCLGlCQUNuQixpQkFBaUIsQ0FBQyxJQUFJOzswQkE0RWpDLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgcHJlZmVyLWNvbnN0OiAxICovXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdDaGlsZCxcbiAgSW5qZWN0LFxuICBPbkluaXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbmplY3RhYmxlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBTRVRUSU5HU19TRVJWSUNFLFxuICBTZXR0aW5nc1NlcnZpY2UsXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgWklUSV9EQVRBX1NFUlZJQ0UsXG4gIFppdGlEYXRhU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHtEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlLCBGaWx0ZXJPYmp9IGZyb20gXCIuLi8uLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tLCBtYXAsIE9ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBWaXN1YWxpemVyU2VydmljZUNsYXNzICB9IGZyb20gJy4uL3Zpc3VhbGl6ZXItc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IEh0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRyZWVOb2RlUHJvY2Vzc29yIH0gZnJvbSAnLi9uZXR3b3JrLXZpc3VhbGl6ZXIudHJlZW5vZGVwcm9jZXNzb3InO1xuaW1wb3J0IHsgTmV0d29ya1Zpc3VhbGl6ZXJIZWxwZXIgfSBmcm9tICcuL25ldHdvcmstdmlzdWFsaXplci5oZWxwZXInO1xuaW1wb3J0IHtMb2dnZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2xvZ2dlci5zZXJ2aWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1uZXR3b3JrLXZpc3VhbGl6ZXInLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogJy4vbmV0d29yay12aXN1YWxpemVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmV0d29yay12aXN1YWxpemVyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuXG5leHBvcnQgY2xhc3MgTmV0d29ya1Zpc3VhbGl6ZXJDb21wb25lbnQgZXh0ZW5kcyBWaXN1YWxpemVyU2VydmljZUNsYXNzIGltcGxlbWVudHMgT25Jbml0IHtcbi8vIGV4cG9ydCBjbGFzcyBOZXR3b3JrVmlzdWFsaXplckNvbXBvbmVudCAgaW1wbGVtZW50cyBPbkluaXQge1xuICB0aXRsZSA9ICdOZXR3b3JrIFZpc3VhbGl6ZXInXG4gIHB1YmxpYyBkMztcbiAgdW5pcUlkID0gMDtcbiAgbWF4T2JqZWN0c1Blck5vZGUgPSAxMDAxO1xuICB0cmVldG9vbHRpcDtcbiAgZnVsbFNjcmVlbiA9IGZhbHNlO1xuICBpc0xvYWRpbmcgPSB0cnVlO1xuICBub1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICBzZXJ2aWNlcyA9IFtdO1xuICBzZXJ2aWNlc190b3RhbENvdW50ID0gMDtcbiAgYWxsX3NlcnZpY2VzX2ZldGNoZWQgPSBmYWxzZTtcbiAgaWRlbnRpdGllcyA9IFtdO1xuICBpZGVudGl0aWVzX3RvdGFsQ291bnQgPSAwO1xuICBhbGxfaWRlbnRpdGllc19mZXRjaGVkID0gZmFsc2U7XG4gIGVkZ2Vyb3V0ZXJzID0gW107XG4gIGVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQgPSAwO1xuICBhbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCA9IGZhbHNlO1xuICBzZXJ2aWNlX3BvbGljaWVzID0gW107XG4gIHNlcnZpY2VfcG9saWNpZXNfdG90YWxDb3VudCA9IDA7XG4gIGFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQgPSBmYWxzZTtcbiAgZWRnZV9yb3V0ZXJfcG9saWNpZXMgPSBbXTtcbiAgZWRnZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCA9IDA7XG4gIGFsbF9lZGdlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkID0gZmFsc2U7XG4gIHNlcnZpY2Vfcm91dGVyX3BvbGljaWVzID0gW107XG4gIHNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPSAwO1xuICBhbGxfc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCA9IGZhbHNlO1xuICBjb25maWdzID0gW107XG4gIGZpbGVyUmVzcG9uc2VNZXNzYWdlID0gJ3NlYXJjaCBmaWx0ZXIuLic7XG4gIGJhc2VOZXR3b3JrR3JhcGg7XG4gIG5ldHdvcmtHcmFwaDtcbiAgY3VycmVudE5ldHdvcms7XG4gIHNlYXJjaFJvb3ROb2RlO1xuXG4gIHNlcnZpY2VQb2xpY2llc1RyZWVOb2RlcyA9IFtdO1xuICBzZXJ2aWNlc1RyZWVOb2RlcyA9IFtdO1xuICBpZGVudGl0aWVzVHJlZU5vZGVzID0gW107XG4gIGVkZ2Vyb3V0ZXJzVHJlZU5vZGVzID0gW107XG4gIGVyUG9saWNpZXNUcmVlTm9kZXMgPSBbXTtcbiAgc2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lUcmVlTm9kZXMgPSBbXTtcblxuICBhdXRvY29tcGxldGVPcHRpb25zO1xuICByZXNvdXJjZVR5cGVFcnJvciA9IGZhbHNlO1xuICBmaWx0ZXJUZXh0ID0gJyc7XG4gIHNlYXJjaFdvcmQgPSAnJztcbiAgcmVzb3VyY2VUeXBlID0gJyc7XG4gIHpvb207XG4gIHN2ZztcbiAgdHJlZW1hcDtcbiAgbm9kZXM7XG4gIG5vZGU7XG4gIGxpbms7XG4gIGxpbmtzO1xuICBsaW5rRXhpdDtcbiAgbGlua1VwZGF0ZTtcbiAgb3Blbk5vZGVzID0gW107XG4gIHRyYW5zZm9ybTtcbiAgbm9kZVVwZGF0ZTtcbiAgbm9kZUV4aXQ7XG4gIG5vZGVFbnRlcjtcbiAgY29udGV4dG1lbnVOb2RlO1xuICBjaXJjbGVzO1xuICBjb250ZXh0bWVudU5vZGVUeXBlOmFueSA9IFtdO1xuICBzaW11bGF0aW9uO1xuICB0cmVlRGF0YTtcbiAgZ3JhcGh0b29sdGlwO1xuICBzZWFyY2hDYWNoZTtcbiAgYWxsUHJvbWlzZXMgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgcHVibGljIHRyZWVOb2RlUHJvY2Vzc29yOiBUcmVlTm9kZVByb2Nlc3NvcixcbiAgICAgcHVibGljIHRvcG9sb2d5SGVscGVyOiBOZXR3b3JrVmlzdWFsaXplckhlbHBlcixcbiAgKSB7XG4gICAgIHN1cGVyKCk7XG4gICAgLy8gc3VwZXIoc2V0dGluZ3NTZXJ2aWNlLCB6aXRpU2VydmljZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgdGhpcy5nZXROZXR3b3JrT2JqZWN0cygpO1xuICB9XG5cbiAgICBnZXRQYWdpbmdPYmplY3QocGFnZXNpemUpIHtcbiAgICByZXR1cm4gY2xvbmVEZWVwKHtcbiAgICAgIGZpbHRlcjogXCJcIixcbiAgICAgIG5vU2VhcmNoOiB0cnVlLFxuICAgICAgb3JkZXI6IFwiYXNjXCIsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoT246IFwibmFtZVwiLFxuICAgICAgc29ydDogXCJuYW1lXCIsXG4gICAgICB0b3RhbDogcGFnZXNpemVcbiAgICB9KVxuICAgIH1cblxuICBhc3luYyBnZXROZXR3b3JrT2JqZWN0cygpIHtcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgIGF3YWl0IHRoaXMucmVhZEFsbE9iamVjdHMoKTtcbiAgICAgdGhpcy5wcm9jZXNzRmlyc3ROZXR3b3JrR3JhcGgoKTtcbiAgfVxuXG4gICBhc3luYyBmZXRjaElkZW50aXRpZXMgKHBhZ2VzaXplKSB7XG4gICAgICBjb25zdCBpZGVudGl0aWVzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAuZ2V0KGBpZGVudGl0aWVzYCwgaWRlbnRpdGllc19wYWdpbmcsIFtdKVxuICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgdGhpcy5pZGVudGl0aWVzID0gcmVzdWx0LmRhdGE/IHJlc3VsdC5kYXRhOiBbXTtcbiAgICAgICAgIHRoaXMuaWRlbnRpdGllc190b3RhbENvdW50ID0gcmVzdWx0Lm1ldGEgJiYgcmVzdWx0Lm1ldGEucGFnaW5hdGlvbj8gcmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IDogMDtcbiAgICAgICAgIGlmICghdGhpcy5pZGVudGl0aWVzIHx8IHRoaXMuaWRlbnRpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pZGVudGl0aWVzX3RvdGFsQ291bnQgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlICl7XG4gICAgICAgICAgIHRoaXMuYWxsX2lkZW50aXRpZXNfZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgIGlkZW50aXRpZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgIGBpZGVudGl0aWVzYCxcbiAgICAgICAgICAgICAgICAgaWRlbnRpdGllc19wYWdpbmcsXG4gICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgKS50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllcy5wdXNoKHNlcnYpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICB9XG4gICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMuaWRlbnRpdGllc190b3RhbENvdW50ID0gdGhpcy5pZGVudGl0aWVzLmxlbmd0aDtcbiAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBJZGVudGl0aWVzJywgZXJyb3IubWVzc2FnZSk7XG4gICAgIH0pOyAgLy8gaWRlbnRpdHkgcHJvbWlzZXNcbiAgfVxuXG4gIGFzeW5jIGZldGNoU2VydmljZXMocGFnZXNpemUpIHtcbiAgIGNvbnN0IHNlcnZpY2VzX3BhZ2luZyA9IHRoaXMuZ2V0UGFnaW5nT2JqZWN0KHBhZ2VzaXplKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYHNlcnZpY2VzYCwgc2VydmljZXNfcGFnaW5nLCBbXSlcbiAgICAgICAgICAudGhlbiggYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IHJlc3VsdC5kYXRhPyByZXN1bHQuZGF0YTogW107XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzX3RvdGFsQ291bnQgPSByZXN1bHQubWV0YSAmJiByZXN1bHQubWV0YS5wYWdpbmF0aW9uPyByZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzIHx8IHRoaXMuc2VydmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VydmljZXMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2aWNlc190b3RhbENvdW50IDwgdGhpcy5tYXhPYmplY3RzUGVyTm9kZSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgICBjb25zdCBzX3Byb21pc2VzID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICBzZXJ2aWNlc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBgc2VydmljZXNgLFxuICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc19wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHNfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgLy8gdGhpcy5zZXJ2aWNlc190b3RhbENvdW50ID0gdGhpcy5zZXJ2aWNlcy5sZW5ndGg7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBzZXJ2aWNlcycsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoU2VydmljZVBvbGljaWVzKHBhZ2VzaXplKSB7XG4gICAgICAgY29uc3Qgc2VydmljZXNQb2xpY2llc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYHNlcnZpY2UtcG9saWNpZXNgLCBzZXJ2aWNlc1BvbGljaWVzX3BhZ2luZywgW10pXG4gICAgICAgICAgLnRoZW4oIGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZV9wb2xpY2llcyA9IHJlc3VsdC5kYXRhPyByZXN1bHQuZGF0YTogW107XG4gICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQgPSByZXN1bHQubWV0YSAmJiByZXN1bHQubWV0YS5wYWdpbmF0aW9uPyByZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgOiAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VfcG9saWNpZXMgfHwgdGhpcy5zZXJ2aWNlX3BvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMgPSBbXTtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsX3NlcnZpY2VfcG9saWNpZXNfZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3BfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VzUG9saWNpZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICAgICAgYHNlcnZpY2UtcG9saWNpZXNgLFxuICAgICAgICAgICAgICAgICAgICAgc2VydmljZXNQb2xpY2llc19wYWdpbmcsXG4gICAgICAgICAgICAgICAgICAgIFtdXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAudGhlbigocGFnZVJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYWdlUmVzdWx0LmRhdGEgJiYgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMucHVzaChzZXJ2KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzcF9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgUHJvbWlzZS5hbGwoc3BfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgLy8gdGhpcy5zZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQgPSB0aGlzLnNlcnZpY2VfcG9saWNpZXMubGVuZ3RoO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGluIGZldGNoaW5nIHNlcnZpY2UtcG9saWNpZXMnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBmZXRjaEVkZ2VSb3V0ZXJzKHBhZ2VzaXplKSB7XG4gICAgICAgY29uc3Qgcm91dGVyc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICAgcmV0dXJuIGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAuZ2V0KGBlZGdlLXJvdXRlcnNgLCByb3V0ZXJzX3BhZ2luZywgW10pXG4gICAgICAgICAgLnRoZW4oIGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnMgPSByZXN1bHQuZGF0YT8gcmVzdWx0LmRhdGE6IFtdO1xuICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVyc190b3RhbENvdW50ID0gcmVzdWx0Lm1ldGEgJiYgcmVzdWx0Lm1ldGEucGFnaW5hdGlvbj8gcmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IDogMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGdlcm91dGVycyB8fCB0aGlzLmVkZ2Vyb3V0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzID0gW107XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZWRnZXJvdXRlcnNfdG90YWxDb3VudCA8IHRoaXMubWF4T2JqZWN0c1Blck5vZGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgICAgY29uc3Qgcl9wcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgICAgcm91dGVyc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBgZWRnZS1yb3V0ZXJzYCxcbiAgICAgICAgICAgICAgICAgICAgIHJvdXRlcnNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcl9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHJfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAvLyB0aGlzLmVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQgPSB0aGlzLmVkZ2Vyb3V0ZXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBlZGdlLXJvdXRlcnMnLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICB9KTtcbiAgfVxuXG4gYXN5bmMgZmluZEVkZ2VSb3V0ZXJQb2xpY2llcyhwYWdlc2l6ZSkge1xuICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyA9IFtdO1xuICAgICAgY29uc3QgZXJwb2xpY2llc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYGVkZ2Utcm91dGVyLXBvbGljaWVzYCwgZXJwb2xpY2llc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXMgPSByZXN1bHQuZGF0YT8gcmVzdWx0LmRhdGE6IFtdO1xuICAgICAgICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50ID0gcmVzdWx0Lm1ldGEgJiYgcmVzdWx0Lm1ldGEucGFnaW5hdGlvbj8gcmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IDogMDtcbiAgICAgICAgICAgIGlmICghdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyB8fCB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICBjb25zdCBwYWdlcyA9IE1hdGguY2VpbChyZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgLyBwYWdlc2l6ZSk7XG4gICAgICAgICAgICAgIGNvbnN0IHJfcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcGFnZSA9IDI7IHBhZ2UgPD0gcGFnZXM7IHBhZ2UrKykge1xuICAgICAgICAgICAgICAgIGVycG9saWNpZXNfcGFnaW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcF9wcm9taXNlID0gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAgICAgLmdldChcbiAgICAgICAgICAgICAgICAgICAgYGVkZ2Utcm91dGVyLXBvbGljaWVzYCxcbiAgICAgICAgICAgICAgICAgICAgIGVycG9saWNpZXNfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcl9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgUHJvbWlzZS5hbGwocl9wcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAvLyB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPSB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgZWRnZS1yb3V0ZXItcG9saWNpZXMnLCBlcnJvcik7XG4gICAgICAgfSk7XG4gfVxuIGFzeW5jIGZldGNoU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llcyhwYWdlc2l6ZSkge1xuICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzID0gW107XG4gICAgIGNvbnN0IHNlcnBfcGFnaW5nID0gdGhpcy5nZXRQYWdpbmdPYmplY3QocGFnZXNpemUpO1xuICAgICByZXR1cm4gYXdhaXQgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgIC5nZXQoYHNlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXNgLCBzZXJwX3BhZ2luZywgW10pXG4gICAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMgPSByZXN1bHQuZGF0YT8gcmVzdWx0LmRhdGE6IFtdO1xuICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCA9IHJlc3VsdC5tZXRhICYmIHJlc3VsdC5tZXRhLnBhZ2luYXRpb24/IHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCA6IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMgfHwgdGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc190b3RhbENvdW50IDwgdGhpcy5tYXhPYmplY3RzUGVyTm9kZSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbF9zZXJ2aWNlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY29uc3QgcGFnZXMgPSBNYXRoLmNlaWwocmVzdWx0Lm1ldGEucGFnaW5hdGlvbi50b3RhbENvdW50IC8gcGFnZXNpemUpO1xuICAgICAgICAgICAgICBjb25zdCByX3Byb21pc2VzID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IHBhZ2UgPSAyOyBwYWdlIDw9IHBhZ2VzOyBwYWdlKyspIHtcbiAgICAgICAgICAgICAgICBzZXJwX3BhZ2luZy5wYWdlID0gcGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBfcHJvbWlzZSA9IGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5nZXQoXG4gICAgICAgICAgICAgICAgICAgIGBzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzYCxcbiAgICAgICAgICAgICAgICAgICAgIHNlcnBfcGFnaW5nLFxuICAgICAgICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnRoZW4oKHBhZ2VSZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVJlc3VsdC5kYXRhLmZvckVhY2goKHNlcnYpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcl9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHJfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAvLyB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQgPSB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRXJyb3IgaW4gZmV0Y2hpbmcgc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycsIGVycm9yKTtcbiAgICAgICB9KTtcbiB9XG4gYXN5bmMgZmV0Y2hDb25maWdzKHBhZ2VzaXplKSB7XG4gICAgdGhpcy5jb25maWdzID0gW107XG4gICAgY29uc3QgY29uZmlnc19wYWdpbmcgPSB0aGlzLmdldFBhZ2luZ09iamVjdChwYWdlc2l6ZSk7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAuZ2V0KGBjb25maWdzYCwgY29uZmlnc19wYWdpbmcsIFtdKVxuICAgICAgICAgIC50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IHJlc3VsdC5kYXRhPyByZXN1bHQuZGF0YTogW107XG4gICAgICAgICAgIGNvbnN0IGNvbmZpZ3NfdG90YWxDb3VudCA9IHJlc3VsdC5tZXRhICYmIHJlc3VsdC5tZXRhLnBhZ2luYXRpb24/IHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCA6IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uZmlncyB8fCB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29uZmlncyA9IFtdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWdzX3RvdGFsQ291bnQgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhZ2VzID0gTWF0aC5jZWlsKHJlc3VsdC5tZXRhLnBhZ2luYXRpb24udG90YWxDb3VudCAvIHBhZ2VzaXplKTtcbiAgICAgICAgICAgICAgY29uc3Qgcl9wcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMjsgcGFnZSA8PSBwYWdlczsgcGFnZSsrKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnc19wYWdpbmcucGFnZSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wX3Byb21pc2UgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBgY29uZmlnc2AsXG4gICAgICAgICAgICAgICAgICAgICBjb25maWdzX3BhZ2luZyxcbiAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC50aGVuKChwYWdlUmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VSZXN1bHQuZGF0YS5mb3JFYWNoKChzZXJ2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdzLnB1c2goc2Vydik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcl9wcm9taXNlcy5wdXNoKHRtcF9wcm9taXNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2godG1wX3Byb21pc2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFByb21pc2UuYWxsKHJfcHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgY29uc3QgY29uZmlnc190b3RhbENvdW50ID0gdGhpcy5jb25maWdzLmxlbmd0aDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBjb25maWdzJywgZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gfVxuXG4gYXN5bmMgcmVhZEFsbE9iamVjdHMoKSB7XG4gICBjb25zdCBteVByb21pc2UgPSAgYXdhaXQgbmV3IFByb21pc2UoICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgIGxldCBuZXR3b3JrVmlzUHJvbWlzZXMgPVtdO1xuICAgICBjb25zdCBwYWdlc2l6ZSA9IDUwMDtcbiAgICAgY29uc3QgZXBzID0gdGhpcy5mZXRjaElkZW50aXRpZXMocGFnZXNpemUpO1xuICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2goZXBzKTtcbiAgICAgY29uc3Qgc3MgPSB0aGlzLmZldGNoU2VydmljZXMocGFnZXNpemUpO1xuICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2goc3MpO1xuICAgICBjb25zdCBzcHMgPSB0aGlzLmZldGNoU2VydmljZVBvbGljaWVzKHBhZ2VzaXplKTtcbiAgICAgdGhpcy5hbGxQcm9taXNlcy5wdXNoKHNwcyk7XG4gICAgIGNvbnN0IGVycyA9IHRoaXMuZmV0Y2hFZGdlUm91dGVycyhwYWdlc2l6ZSk7XG4gICAgIHRoaXMuYWxsUHJvbWlzZXMucHVzaChlcHMpO1xuICAgICBjb25zdCBlcnBzID0gdGhpcy5maW5kRWRnZVJvdXRlclBvbGljaWVzKHBhZ2VzaXplKTtcbiAgICAgdGhpcy5hbGxQcm9taXNlcy5wdXNoKGVycHMpO1xuICAgICBjb25zdCBzZXJwcyA9IHRoaXMuZmV0Y2hTZXJ2aWNlRWRnZVJvdXRlclBvbGljaWVzKHBhZ2VzaXplKTtcbiAgICAgdGhpcy5hbGxQcm9taXNlcy5wdXNoKHNlcnBzKTtcbiAgICAgY29uc3QgY2ZnID0gdGhpcy5mZXRjaENvbmZpZ3MocGFnZXNpemUpO1xuICAgICB0aGlzLmFsbFByb21pc2VzLnB1c2goY2ZnKTtcbiAgICAgUHJvbWlzZS5hbGwodGhpcy5hbGxQcm9taXNlcykudGhlbigocmVzKSA9PiB7cmVzb2x2ZSgnZW5kJyk7IH0pO1xuICAgfSk7XG4gfVxuXG4gIHByb2Nlc3NGaXJzdE5ldHdvcmtHcmFwaCgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVPYmogPSB0aGlzLnRvcG9sb2d5SGVscGVyLmdldFJlc291cmNlVHJlZU9iaihcbiAgICAgICAgICAgICAgICAndGhpcy5jdXJyZW50TmV0d29yay5uYW1lJyxcbiAgICAgICAgICAgICAgICAndGhpcy5jdXJyZW50TmV0d29yay5zdGF0dXMnLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5pZGVudGl0aWVzLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9wb2xpY2llcyxcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzLFxuICAgICAgICAgICAgICAgIHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llcyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzX3RvdGFsQ291bnQsIHRoaXMuaWRlbnRpdGllc190b3RhbENvdW50LCB0aGlzLmVkZ2Vyb3V0ZXJzX3RvdGFsQ291bnQsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzX3RvdGFsQ291bnQsIHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXNfdG90YWxDb3VudCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2Vfcm91dGVyX3BvbGljaWVzX3RvdGFsQ291bnQsXG4gICAgICAgICAgICAgICAgdGhpcy51bmlxSWQsXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIsXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxfc2VydmljZV9wb2xpY2llc19mZXRjaGVkLCB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkLCB0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQsIHRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQsXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCwgdGhpcy5hbGxfc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy51bmlxSWQgPSB0cmVlT2JqLmxhc3RJZDtcbiAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KHRyZWVPYmosIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuY2hpbGRyZW47XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIHRoaXMuYmFzZU5ldHdvcmtHcmFwaCA9IF8uY2xvbmVEZWVwKHRoaXMubmV0d29ya0dyYXBoKTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZVBvbGljaWVzVHJlZU5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VzVHJlZU5vZGVzID0gW107XG4gICAgICAgICAgICB0aGlzLmlkZW50aXRpZXNUcmVlTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnNUcmVlTm9kZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZXJQb2xpY2llc1RyZWVOb2RlcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlRWRnZVJvdXRlclBvbGljeVRyZWVOb2RlcyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VQb2xpY2llc1RyZWVOb2RlcyA9IHRoaXMuZmlsbEF1dG9Db21wbGV0ZVRyZWVOb2RlcyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlUG9saWNpZXNUcmVlTm9kZXMsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2VQb2xpY3knXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1RyZWVOb2RlcyA9IHRoaXMuZmlsbEF1dG9Db21wbGV0ZVRyZWVOb2RlcyhcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNUcmVlTm9kZXMsXG4gICAgICAgICAgICAgICAgJ1NlcnZpY2UnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0aWVzVHJlZU5vZGVzID0gdGhpcy5maWxsQXV0b0NvbXBsZXRlVHJlZU5vZGVzKFxuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllcyxcbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXRpZXNUcmVlTm9kZXMsXG4gICAgICAgICAgICAgICAgJ0lkZW50aXR5J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnNUcmVlTm9kZXMgPSB0aGlzLmZpbGxBdXRvQ29tcGxldGVUcmVlTm9kZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycyxcbiAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vyb3V0ZXJzVHJlZU5vZGVzLFxuICAgICAgICAgICAgICAgICdSb3V0ZXInXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmVyUG9saWNpZXNUcmVlTm9kZXMgPSB0aGlzLmZpbGxBdXRvQ29tcGxldGVUcmVlTm9kZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyxcbiAgICAgICAgICAgICAgICB0aGlzLmVyUG9saWNpZXNUcmVlTm9kZXMsXG4gICAgICAgICAgICAgICAgJ1JvdXRlciBQb2xpY3knXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VFZGdlUm91dGVyUG9saWN5VHJlZU5vZGVzID0gdGhpcy5maWxsQXV0b0NvbXBsZXRlVHJlZU5vZGVzKFxuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlRWRnZVJvdXRlclBvbGljeVRyZWVOb2RlcyxcbiAgICAgICAgICAgICAgICAnU2VydmljZSBSb3V0ZXIgUG9saWN5J1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5pbml0VG9wb1ZpZXcoKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZU5ldHdvcmtHcmFwaCA9IF8uY2xvbmVEZWVwKHRoaXMubmV0d29ya0dyYXBoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyOmFueSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gICBmaWxsQXV0b0NvbXBsZXRlVHJlZU5vZGVzKHJlc291cmNlc0FycmF5LCBhcnIsIHR5cGVOYW1lKSB7XG4gICAgIHJlc291cmNlc0FycmF5ICYmIHJlc291cmNlc0FycmF5LmZvckVhY2goIChvYikgPT4ge1xuICAgICAgYXJyLnB1c2gob2IubmFtZSk7XG4gICAgIH0pO1xuICAgIHJldHVybiBhcnI7XG4gICB9XG5cbiAgZGVib3VuY2UoZnVuYywgdGltZW91dCA9IDE1MCl7XG4gICAgbGV0IHRpbWVyO1xuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsgZnVuYy5hcHBseSh0aGlzLCBhcmdzKTsgfSwgdGltZW91dCk7XG4gICAgfTtcbiAgfVxuXG4gIG53U2VhcmNoQ2hhbmdlKGV2ZW50KXtcbiAgIGlmICh0aGlzLmZpbHRlclRleHQubGVuZ3RoID4gMSAmJiBldmVudC5rZXkgIT09J0VzY2FwZScgJiYgZXZlbnQua2V5ICE9PSAnQXJyb3dSaWdodCcgJiYgZXZlbnQua2V5ICE9PSdBcnJvd0xlZnQnICYmIGV2ZW50LmtleSAhPT0nRW50ZXInKSB7XG4gICAgIHRoaXMuZmlsZXJSZXNwb25zZU1lc3NhZ2UgPSAnc2VhcmNoIGZpbHRlci4uJztcbiAgICAgdGhpcy5kZWJvdW5jZSh0aGlzLmZpbHRlclNlYXJjaEFycmF5KCkpO1xuICAgfVxuICB9XG5cbiAgICBhdXRvY29tcGxldGVTZWFyY2goZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RyID0gZXZlbnQgPyBldmVudC5vcHRpb24udmFsdWUgOiAnJztcbiAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZUNvbmRpdGlvbkNoZWNrKHN0cik7XG4gICAgfVxuXG4gICAgcmVzb3VyY2VUeXBlQ2hhbmdlZCgpIHtcbiAgICAgICAgdGhpcy5maWxlclJlc3BvbnNlTWVzc2FnZSA9ICdzZWFyY2ggZmlsdGVyLi4nO1xuICAgICAgICB0aGlzLnNlYXJjaENhY2hlID0gW107XG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hOb2RlKCk7XG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2hMaW5rQ29sb3JzKCk7XG4gICAgICAgIGlmIChfLmlzRW1wdHkodGhpcy5yZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2hGaWx0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VUeXBlRXJyb3IgPSAhXy5pc0VtcHR5KHRoaXMuZmlsdGVyVGV4dCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMucmVzb3VyY2VUeXBlRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID1bXTtcbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgdGhpcy5hbGxfc2VydmljZV9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VQb2xpY2llc1RyZWVOb2RlcztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VzVHJlZU5vZGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnaWRlbnRpdGllcycgJiYgdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLmlkZW50aXRpZXNUcmVlTm9kZXM7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlcnMnICYmIHRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuZWRnZXJvdXRlcnNUcmVlTm9kZXM7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycgJiYgdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5lclBvbGljaWVzVHJlZU5vZGVzO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycgJiYgdGhpcy5hbGxfc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5zZXJ2aWNlRWRnZVJvdXRlclBvbGljeVRyZWVOb2RlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuZmlsdGVyVGV4dCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VDb25kaXRpb25DaGVjayh0aGlzLmZpbHRlclRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VhcmNoUmVzb3VyY2VDb25kaXRpb25DaGVjayhzZWFyY2hUeHQpIHtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJycgJiYgc2VhcmNoVHh0ICE9PSAnJykge1xuICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VJblRyZWUoc2VhcmNoVHh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWFyY2hSZXNvdXJjZUluVHJlZShzZWFyY2hUeHQpIHtcbiAgICAgICAgdGhpcy5ub1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVFcnJvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2V0VHJlZShudWxsKTtcbiAgICAgICAgaWYgKHNlYXJjaFR4dCA9PT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2hMaW5rQ29sb3JzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VhcmNoTm9kZSgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaExpbmtDb2xvcnMoKTtcblxuICAgICAgICAgICAgbGV0IHBhdGhzID0gW107XG4gICAgICAgICAgICBsZXQgdGFyZ2V0Tm9kZXMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZHMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmICF0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdPYiA9IHRoaXMuc2VhcmNoQ2FjaGUuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBzZWFyY2hUeHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkOmFueSA9IHRoaXMudG9wb2xvZ3lIZWxwZXIuY3JlYXRlU2VydmljZVBvbGljeU5vZGUocmF3T2IpO1xuICAgICAgICAgICAgICAgLy8gaWQuY2xpY2tQcm9jZXNzID0gXCJOb3QgWWV0XCI7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXNOb2RlRXhpc3RzKHRoaXMubm9kZXNbMV0sIGlkKSkge1xuICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXNbMV0uZGF0YS5jaGlsZHJlbi5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodGhpcy5uZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaCgobmQsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgIGlmIChpICE9PTApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoQ29sbGFwc2UobmQpO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3BvbGljaWVzWzBdID0gcmF3T2I7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKHRoaXMubm9kZXNbMV0pO1xuICAgICAgICAgICAgICAgIHRhcmdldE5vZGVzID0gdGhpcy5wcm9jZXNzU2VhcmNoSW5QcmVvcmRlcih0aGlzLm5vZGVzWzFdLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1sxXSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXJzJyAmJiAhdGhpcy5hbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd09iID0gdGhpcy5zZWFyY2hDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlYXJjaFR4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQ6YW55ID0gdGhpcy50b3BvbG9neUhlbHBlci5jcmVhdGVFZGdlUm91dGVyTm9kZShyYXdPYik7XG4gICAgICAgICAgICAgICAvLyBpZC5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc05vZGVFeGlzdHModGhpcy5ub2Rlc1s0XSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1s0XS5kYXRhLmNoaWxkcmVuLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodGhpcy5uZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaCgobmQsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoQ29sbGFwc2UobmQpO1xuICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRnZXJvdXRlcnNbMF0gPSByYXdPYjtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5ub2Rlc1s0XSk7XG5cbiAgICAgICAgICAgICAgICB0YXJnZXROb2RlcyA9IHRoaXMucHJvY2Vzc1NlYXJjaEluUHJlb3JkZXIodGhpcy5ub2Rlc1s0XSwgc2VhcmNoVHh0LCB0YXJnZXROb2Rlcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXJzJyAmJiB0aGlzLmFsbF9lZGdlcm91dGVyc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbNF0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAmJiAhdGhpcy5hbGxfc2VydmljZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd09iID0gdGhpcy5zZWFyY2hDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlYXJjaFR4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQ6YW55ID0gdGhpcy50b3BvbG9neUhlbHBlci5jcmVhdGVTZXJ2aWNlTm9kZShyYXdPYik7XG4gICAgICAgICAgICAgICAgaWQuY2xpY2tQcm9jZXNzID0gXCJOb3QgWWV0XCI7XG4gICAgICAgICAgICAgICAgaWYoIXRoaXMuaXNOb2RlRXhpc3RzKHRoaXMubm9kZXNbMl0sIGlkKSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1syXS5kYXRhLmNoaWxkcmVuLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodGhpcy5uZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXNbMF0gPSByYXdPYjtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5ub2Rlc1syXSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbMl0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goKG5kLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICggaSAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoQ29sbGFwc2UobmQpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gKTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbMl0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2lkZW50aXRpZXMnICYmICF0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdPYiA9IHRoaXMuc2VhcmNoQ2FjaGUuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBzZWFyY2hUeHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkOmFueSA9IHRoaXMudG9wb2xvZ3lIZWxwZXIuY3JlYXRlSWRlbnRpdHlOb2RlKHJhd09iKTtcbiAgICAgICAgICAgICAgICBpZC5jbGlja1Byb2Nlc3MgPSBcIk5vdCBZZXRcIjtcbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc05vZGVFeGlzdHModGhpcy5ub2Rlc1szXSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgIHRoaXMubm9kZXNbM10uZGF0YS5jaGlsZHJlbi5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodGhpcy5uZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXRpZXNbMF0gPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlkZW50aXRpZXNbMF0gPSByYXdPYjtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5ub2Rlc1szXSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbM10sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goKG5kLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChpICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhDb2xsYXBzZShuZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2lkZW50aXRpZXMnICYmIHRoaXMuYWxsX2lkZW50aXRpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldE5vZGVzID0gdGhpcy5wcm9jZXNzU2VhcmNoSW5QcmVvcmRlcih0aGlzLm5vZGVzWzNdLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgIGNvbnN0IHJhd09iID0gdGhpcy5zZWFyY2hDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlYXJjaFR4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQ6YW55ID0gdGhpcy50b3BvbG9neUhlbHBlci5jcmVhdGVFZGdlUm91dGVyUG9saWN5Tm9kZShyYXdPYik7XG4gICAgICAgICAgICAgICAgaWQuY2xpY2tQcm9jZXNzID0gXCJOb3QgWWV0XCI7XG5cbiAgICAgICAgICAgICAgICBpZighdGhpcy5pc05vZGVFeGlzdHModGhpcy5ub2Rlc1s1XSwgaWQpKSB7XG4gICAgICAgICAgICAgICAgIHRoaXMubm9kZXNbNV0uZGF0YS5jaGlsZHJlbi5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gZDMuaGllcmFyY2h5KHRoaXMubmV0d29ya0dyYXBoLmRhdGEsIGZ1bmN0aW9uIChuZCkge1xuICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5kLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goKG5kLGkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChpICE9PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhDb2xsYXBzZShuZCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSApO1xuICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2gobmQgPT4gdGhpcy5ncmFwaENvbGxhcHNlKG5kKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGdlX3JvdXRlcl9wb2xpY2llcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXNbMF0gPSByYXdPYjtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5ub2Rlc1s1XSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbNV0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9lZGdlX3JvdXRlcl9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICAgICAgIHRhcmdldE5vZGVzID0gdGhpcy5wcm9jZXNzU2VhcmNoSW5QcmVvcmRlcih0aGlzLm5vZGVzWzVdLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiAhdGhpcy5hbGxfc2VydmljZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhd09iID0gdGhpcy5zZWFyY2hDYWNoZS5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IHNlYXJjaFR4dCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQ6YW55ID0gdGhpcy50b3BvbG9neUhlbHBlci5jcmVhdGVTZXJ2aWNlRWRnZVJvdXRlclBvbGljeU5vZGUocmF3T2IpO1xuICAgICAgICAgICAgICAgIGlkLmNsaWNrUHJvY2VzcyA9IFwiTm90IFlldFwiO1xuICAgICAgICAgICAgICAgIGlmKCF0aGlzLmlzTm9kZUV4aXN0cyh0aGlzLm5vZGVzWzZdLCBpZCkpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMubm9kZXNbNl0uZGF0YS5jaGlsZHJlbi5wdXNoKGlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBkMy5oaWVyYXJjaHkodGhpcy5uZXR3b3JrR3JhcGguZGF0YSwgZnVuY3Rpb24gKG5kKSB7XG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaCgobmQsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFwaENvbGxhcHNlKG5kKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlX3JvdXRlcl9wb2xpY2llcyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXNbMF0gPSByYXdPYjtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5ub2Rlc1s2XSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbNl0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgICAgICAgdGFyZ2V0Tm9kZXMgPSB0aGlzLnByb2Nlc3NTZWFyY2hJblByZW9yZGVyKHRoaXMubm9kZXNbNl0sIHNlYXJjaFR4dCwgdGFyZ2V0Tm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZm9yRWFjaChuZCA9PiB0aGlzLmdyYXBoQ29sbGFwc2UobmQpKTtcbiAgICAgICAgICAgIHBhdGhzID0gdGhpcy5leHBsb3JlUGF0aHNGb3JTZWFyY2hlZE5vZGVzKHRhcmdldE5vZGVzLCBwYXRocywgbm9kZUlkcyk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Tm9kZXMgJiYgdGFyZ2V0Tm9kZXMubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaExpbmtDb2xvcnMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGF0aHMocGF0aHMsIHRydWUpO1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0QWxsKCdjaXJjbGUnKS5maWx0ZXIoZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhTmFtZSA9IF8uZ2V0KGQsICdkYXRhLm5hbWUnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGRhdGFJZCA9IF8uZ2V0KGQsICdkYXRhLmlkJywgJycpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlTmFtZSA9IF8uZ2V0KHRhcmdldE5vZGVzWzBdLCAnZGF0YS5uYW1lJywgJycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gc2VhcmNoVHh0LnRvTG93ZXJDYXNlKCkgJiYgbm9kZU5hbWUgPT09IGRhdGFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkMy5zZWxlY3QodGhpcykuc3R5bGUoJ2ZpbGwnLCAnI2E2MDMwMycpOyAvLyMwMDQ0NDcsIDQ3MDAwMFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzTm9kZUV4aXN0cyhyb290Tm9kZTphbnksIGlkKSB7XG4gICAgIHJldHVybiByb290Tm9kZS5kYXRhLmNoaWxkcmVuLmZpbmQoIChuZCkgPT4gbmQudXVpZCA9PT1pZC51dWlkICk7XG4gICAgfVxuXG4gICAgZXhwbG9yZVBhdGhzRm9yU2VhcmNoZWROb2Rlcyh0YXJnZXROb2RlcywgcGF0aHMsIG5vZGVJZHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyB0YXJnZXROb2RlcyAmJiBpIDwgdGFyZ2V0Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgIGxldCBuZCA9IHRhcmdldE5vZGVzW2ldO1xuICAgICAgICAgICBwYXRocy5wdXNoKG5kKTtcbiAgICAgICAgIHdoaWxlIChuZC5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVJZCA9IF8uZ2V0KG5kLnBhcmVudCwgJ2RhdGEuaWQnKTtcbiAgICAgICAgICAgIGlmIChub2RlSWRzLmluZGV4T2Yobm9kZUlkKSA8IDApIHtcbiAgICAgICAgICAgICAgIG5vZGVJZHMucHVzaChub2RlSWQpO1xuICAgICAgICAgICAgICAgcGF0aHMucHVzaChuZC5wYXJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmQgPSBuZC5wYXJlbnQ7XG4gICAgICAgICB9XG4gICAgICB9XG4gICAgICAgIHJldHVybiBwYXRocztcbiAgICB9XG5cbiAgICBwcm9jZXNzU2VhcmNoSW5QcmVvcmRlcihub2RlT2JqLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBfLmdldChub2RlT2JqLCAnZGF0YS5uYW1lJyk7XG4gICAgICAgIC8vIGNvbnN0IG5vZGVJZCA9IF8uZ2V0KG5vZGVPYmosICdkYXRhLmlkJyk7XG4gICAgICAgIGNvbnN0IGlzUm9vdE5vZGUgPSBfLmdldChub2RlT2JqLCAnZGF0YS5yb290Tm9kZScpO1xuICAgICAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNSb290Tm9kZSAmJiBpc1Jvb3ROb2RlID09PSAnWWVzJyAmJiBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IHNlYXJjaFR4dC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICB0YXJnZXROb2Rlcy5wdXNoKG5vZGVPYmopO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBub2RlT2JqLmNoaWxkcmVuID8gbm9kZU9iai5jaGlsZHJlbiA6IG5vZGVPYmouX2NoaWxkcmVuO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgY2hpbGROb2RlcyAmJiBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU2VhcmNoSW5QcmVvcmRlcihjaGlsZE5vZGVzW2ldLCBzZWFyY2hUeHQsIHRhcmdldE5vZGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0Tm9kZXM7XG4gICAgfVxuXG4gICAgY2xlYXJTZWFyY2hMaW5rQ29sb3JzKCkge1xuICAgICAgICB0aGlzLnN2Zy5zZWxlY3RBbGwoJ3BhdGgubGluaycpLmVhY2goIGZ1bmN0aW9uICh0aGlzOiBhbnksICBkOmFueSkge1xuICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdzdHJva2UnLCAnd2hpdGUnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnY2lyY2xlJykuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZDphbnkpIHtcbiAgICAgICAgICAgIHJldHVybiBkLl9jaGlsZHJlbiA/ICd2YXIoLS10YWJsZVRleHQpJyA6ICcjZmZmJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3BlblBhdGhzKHBhdGhzLCBkb1Jlc2V0ID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcGF0aElkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gcGF0aHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGwgPSBwYXRoc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5Ob2Rlcy5pbmRleE9mKGwuZGF0YS5pZCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTm9kZXMucHVzaChsLmRhdGEuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5leHBhbmQocGF0aHNbaV0pO1xuICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGwsIGRvUmVzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGF0aElkcy5wdXNoKGwuZGF0YS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgcGF0aElkcy5wdXNoKHBhdGhzWzFdLmRhdGEuaWQpO1xuICAgICAgICBwYXRoSWRzLnB1c2gocGF0aHNbMF0uZGF0YS5pZCk7XG5cbiAgICAgICAgbGV0IGNoaWxkcmVuZyA9IG51bGw7IC8vIGdldCAybmQgbGV2ZWwgZGF0YSBub2Rlcy5cbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuZyA9IHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlblsxXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2lkZW50aXRpZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlblsyXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuZyA9IHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuWzNdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXItcG9saWNpZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbls0XTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnKSB7XG4gICAgICAgICAgICBjaGlsZHJlbmcgPSB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbls1XTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZGRfY2hpbGRzID0gY2hpbGRyZW5nLmNoaWxkcmVuID8gY2hpbGRyZW5nLmNoaWxkcmVuIDogY2hpbGRyZW5nLl9jaGlsZHJlbjsgLy8gMm5kIGxldmVsIGNoYWlsZHMuIGdyb3Vwcy9jaGlsZHJlbnNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZGRfY2hpbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAvLyAyc3QgbGV2ZWxcbiAgICAgICAgICAgIC8vICBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlbmRwb2ludHMnIHx8IHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnKSB7XG4gICAgICAgICAgICBpZiAobmRkX2NoaWxkc1tpXS5kYXRhLnR5cGUgPT09ICdHcm91cCcpIHtcbiAgICAgICAgICAgICAgICAvLyBwcm9jZXNzIGdyb3Vwc1xuICAgICAgICAgICAgICAgIGNvbnN0IGQxID0gbmRkX2NoaWxkc1tpXTsgLy9nZXQgZ3JvdXBcbiAgICAgICAgICAgICAgICBpZiAoZDEgJiYgcGF0aHNbMV0uZGF0YS5pZCA9PT0gZDEuZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbjAgPSBkMS5jaGlsZHJlbiA/IGQxLmNoaWxkcmVuIDogZDEuX2NoaWxkcmVuOyAvLyAzcmQgbGV2ZWwgY2hpbGRzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGNoaWxkcmVuMC5maWx0ZXIoZnVuY3Rpb24gKHJlcGxPYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxPYi5kYXRhLmlkID09PSBwYXRoc1swXS5kYXRhLmlkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgZDEuY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIGQxLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycmdycCA9IG5kZF9jaGlsZHMuZmlsdGVyKGZ1bmN0aW9uIChyZXBsT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iai5kYXRhLmlkID09PSBkMS5kYXRhLmlkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW5nLmNoaWxkcmVuID0gYXJyZ3JwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5uZXR3b3JrR3JhcGgsIGRvUmVzZXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbmcuZGF0YS5pZCA9PT0gcGF0aHNbMV0uZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBuZGRfY2hpbGRzLmZpbHRlcihmdW5jdGlvbiAocmVwbE9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iLmRhdGEuaWQgPT09IHBhdGhzWzBdLmRhdGEuaWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbmcuY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuZy5fY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5uZXR3b3JrR3JhcGgsIGRvUmVzZXQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGFub2RlcyA9IG51bGw7IC8vIGdldCAybmQgbGV2ZWwgZGF0YSBub2Rlcy5cbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bMF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlcycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bMV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJykge1xuICAgICAgICAgICAgZGF0YW5vZGVzID0gdGhpcy5uZXR3b3JrR3JhcGguZGF0YS5jaGlsZHJlblsyXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bM107XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycpIHtcbiAgICAgICAgICAgIGRhdGFub2RlcyA9IHRoaXMubmV0d29ya0dyYXBoLmRhdGEuY2hpbGRyZW5bNF07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzJykge1xuICAgICAgICAgICAgZGF0YW5vZGVzID0gdGhpcy5uZXR3b3JrR3JhcGguZGF0YS5jaGlsZHJlbls1XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YW5vZGVzLmlkID09PSBwYXRoc1sxXS5kYXRhLmlkKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBkYXRhbm9kZXMuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uIChyZXBsT2IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iLmlkID09PSBwYXRoc1swXS5kYXRhLmlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkYXRhbm9kZXMuY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUodGhpcy5uZXR3b3JrR3JhcGgsIGRvUmVzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBOb2RlcyA9IGRhdGFub2Rlcy5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZ3JvdXBOb2Rlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgIGlmIChncm91cE5vZGVzW2tdLmlkID09PSBwYXRoc1sxXS5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHNlYXJjaGVkIGdyb3VwIG5vZGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gZ3JvdXBOb2Rlc1trXS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKHJlcGxPYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxPYi5pZCA9PT0gcGF0aHNbMF0uZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwTm9kZXNba10uY2hpbGRyZW4gPSBhcnI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFycmdycCA9IGdyb3VwTm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChyZXBsT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbE9iai5pZCA9PT0gcGF0aHNbMV0uZGF0YS5pZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFub2Rlcy5jaGlsZHJlbiA9IGFycmdycDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKHRoaXMubmV0d29ya0dyYXBoLCBkb1Jlc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVUcmVlKHRoaXMubmV0d29ya0dyYXBoLCBkb1Jlc2V0KTtcbiAgICAgICAgdGhpcy5zZWFyY2hSb290Tm9kZSA9IHBhdGhzWzFdO1xuXG4gICAgICAgIHRoaXMuc3ZnLnNlbGVjdEFsbCgnLmxpbmsnKS5lYWNoKGZ1bmN0aW9uICh0aGlzOmFueSwgZDphbnkpIHtcbiAgICAgICAgICAgIGlmIChwYXRoSWRzLmluZGV4T2YoZC5kYXRhLmlkKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdzdHJva2UnLCAncmVkJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGQzLnNlbGVjdCh0aGlzKS5zdHlsZSgnc3Ryb2tlJywgJ3doaXRlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0U2VhcmNoTm9kZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoUm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gXy5jbG9uZURlZXAodGhpcy5iYXNlTmV0d29ya0dyYXBoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5ldHdvcmtHcmFwaCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldFRyZWUoY2xlYXJTZWFyY2gpIHtcbiAgICAgICAgdGhpcy5yZXNldFNlYXJjaE5vZGUoKTtcbiAgICAgICAgaWYgKGNsZWFyU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoRmlsdGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoVHlwZSgpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLm9wZW5Ob2Rlcy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gdGhpcy5vcGVuTm9kZXNbaV07XG4gICAgICAgICAgICBpZiAoZCAmJiBkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZC5fY2hpbGRyZW4gPSBkLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGQuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZShkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5ub2Rlcy5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gdGhpcy5ub2Rlc1tpXTtcbiAgICAgICAgICAgIGlmIChkICYmIGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaExpbmtDb2xvcnMoKTtcbiAgICAgICAgdGhpcy5vcGVuTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5zaXplVG9GaXQoKTtcbiAgICAgICAgdGhpcy5yZXNldFpvb20oKTtcbiAgICB9XG4gICAgZXhwYW5kKGQpIHtcbiAgICAgICAgaWYgKGQuX2NoaWxkcmVuKSB7XG4gICAgICAgICAgICBkLmNoaWxkcmVuID0gZC5fY2hpbGRyZW47XG4gICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb2xsYXBzZSgpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMub3Blbk5vZGVzLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSB0aGlzLm5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgZmluZE1vZGVsTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGU7XG4gICB9XG4gICBhc3luYyBzZWFyY2hPYmplY3RzVXNpbmdBcGkoKSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IG1vZGVsX25hbWUgPSB0aGlzLmZpbmRNb2RlbE5hbWUoKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaFdvcmQgPSBfLmNsb25lKHRoaXMuZmlsdGVyVGV4dCk7XG4gICAgICAgICAgY29uc3Qgc3RyID0gYCR7dGhpcy5yZXNvdXJjZVR5cGV9P2ZpbHRlcj0lMjBuYW1lJTIwY29udGFpbnMlMjAlMjIke3RoaXMuc2VhcmNoV29yZH0lMjImbGltaXQ9NSZvZmZzZXQ9MCZzb3J0PW5hbWUlMjAlMjBhc2NgO1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgLmNhbGwoc3RyKVxuICAgICAgICAgIC50aGVuKChyZXN1bHQ6YW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLnNlYXJjaENhY2hlID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgIHJlc3VsdC5kYXRhLmZvckVhY2goIChyZXMpID0+IHtcbiAgICAgICAgICAgIC8qIGNvbnN0IG9iajogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICAgIGlkOiByZXMuaWQsXG4gICAgICAgICAgICAgICBuYW1lOiByZXMubmFtZSxcbiAgICAgICAgICAgICB9OyAqL1xuICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5wdXNoKHJlcy5uYW1lKTtcbiAgICAgICAgICAgfSApO1xuICAgICAgICAgICB0aGlzLm5vU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgICAgIGNvbnN0IGNvdW50QSA9ICByZXN1bHQuZGF0YT8ubGVuZ3RoID4gMD8gcmVzdWx0LmRhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgICAgdGhpcy5maWxlclJlc3BvbnNlTWVzc2FnZSA9IFwic2VhcmNoIHdvcmQ6J1wiKyB0aGlzLnNlYXJjaFdvcmQgK1wiJywgIHJlc3VsdDogdG9wIFwiKyBjb3VudEEgK1wiIG9mICBcIityZXN1bHQubWV0YS5wYWdpbmF0aW9uLnRvdGFsQ291bnQgK1wiIHJlY29yZHNcIjtcbiAgICAgICAgICB9KS5jYXRjaCggKGVycm9yKSA9PiB7XG4gICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICAgICB9KTtcblxuICAgfVxuXG4gICBmaWx0ZXJTZWFyY2hBcnJheSgpIHtcbiAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnJlc291cmNlVHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5yZXNvdXJjZVR5cGVFcnJvciA9ICFfLmlzRW1wdHkodGhpcy5maWx0ZXJUZXh0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiB0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZVBvbGljaWVzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtcG9saWNpZXMnICYmICF0aGlzLmFsbF9zZXJ2aWNlX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hPYmplY3RzVXNpbmdBcGkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAgJiYgdGhpcy5hbGxfc2VydmljZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5zZXJ2aWNlc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlcycgICYmICF0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuc2VhcmNoT2JqZWN0c1VzaW5nQXBpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiB0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuaWRlbnRpdGllc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiAhdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuc2VhcmNoT2JqZWN0c1VzaW5nQXBpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlcnMnICYmIHRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuZWRnZXJvdXRlcnNUcmVlTm9kZXMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXJzJyAmJiAhdGhpcy5hbGxfZWRnZXJvdXRlcnNfZmV0Y2hlZCkge1xuICAgICAgICAgICB0aGlzLnNlYXJjaE9iamVjdHNVc2luZ0FwaSgpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuZXJQb2xpY2llc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX2VkZ2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hPYmplY3RzVXNpbmdBcGkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lUcmVlTm9kZXMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgb3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5zZWFyY2hPYmplY3RzVXNpbmdBcGkoKTtcbiAgICAgICAgfVxuICAgfVxuICAgem9vbUluKCkge1xuXG4gICB9XG4gICB6b29tT3V0KCkge1xuXG4gICB9XG4gICBjbGVhclNlYXJjaEZpbHRlcigpIHtcbiAgICAgIHRoaXMuZmlsdGVyVGV4dCA9ICcnO1xuICAgICAgdGhpcy5yZXNldEF1dG9Db21wbGV0ZU9wdGlvbnMoKTtcbiAgICAgIHRoaXMucmVzb3VyY2VUeXBlRXJyb3IgPSBmYWxzZTtcbiAgICAgIC8vIHRoaXMuZmlsdGVyU2VhcmNoQXJyYXkoKTtcbiAgICAgIHRoaXMucmVzZXRTZWFyY2hOb2RlKCk7XG4gICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICB0aGlzLmNsZWFyU2VhcmNoTGlua0NvbG9ycygpO1xuICAgfVxuXG4gICByZXNldEF1dG9Db21wbGV0ZU9wdGlvbnMoKXtcbiAgICAgIHRoaXMuc2VhcmNoQ2FjaGUgPSBbXTtcbiAgICAgIHRoaXMuZmlsZXJSZXNwb25zZU1lc3NhZ2UgPSAnc2VhcmNoIGZpbHRlci4uJztcbiAgICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1wb2xpY2llcycgJiYgdGhpcy5hbGxfc2VydmljZV9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VQb2xpY2llc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclRleHQ9PT0nJyB8fCBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdzZXJ2aWNlLXBvbGljaWVzJyAmJiAhdGhpcy5hbGxfc2VydmljZV9wb2xpY2llc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZXMnICAmJiB0aGlzLmFsbF9zZXJ2aWNlc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLnNlcnZpY2VzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dD09PScnIHx8IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2VzJyAgJiYgIXRoaXMuYWxsX3NlcnZpY2VzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiB0aGlzLmFsbF9pZGVudGl0aWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuaWRlbnRpdGllc1RyZWVOb2Rlcy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclRleHQ9PT0nJyB8fCBvcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlclRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdpZGVudGl0aWVzJyAmJiAhdGhpcy5hbGxfaWRlbnRpdGllc19mZXRjaGVkKSB7XG4gICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnZWRnZS1yb3V0ZXJzJyAmJiB0aGlzLmFsbF9lZGdlcm91dGVyc19mZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSB0aGlzLmVkZ2Vyb3V0ZXJzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dD09PScnIHx8IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVycycgJiYgIXRoaXMuYWxsX2VkZ2Vyb3V0ZXJzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5yZXNvdXJjZVR5cGUgPT09ICdlZGdlLXJvdXRlci1wb2xpY2llcycgJiYgdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gdGhpcy5lclBvbGljaWVzVHJlZU5vZGVzLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGV4dD09PScnIHx8IG9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ2VkZ2Utcm91dGVyLXBvbGljaWVzJyAmJiAhdGhpcy5hbGxfZWRnZV9yb3V0ZXJfcG9saWNpZXNfZmV0Y2hlZCkge1xuICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJlc291cmNlVHlwZSA9PT0gJ3NlcnZpY2UtZWRnZS1yb3V0ZXItcG9saWNpZXMnICYmIHRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHRoaXMuc2VydmljZUVkZ2VSb3V0ZXJQb2xpY3lUcmVlTm9kZXMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUZXh0PT09JycgfHwgb3B0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5maWx0ZXJUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucmVzb3VyY2VUeXBlID09PSAnc2VydmljZS1lZGdlLXJvdXRlci1wb2xpY2llcycgJiYgIXRoaXMuYWxsX3NlcnZpY2Vfcm91dGVyX3BvbGljaWVzX2ZldGNoZWQpIHtcbiAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIH1cbiAgIH1cblxuICAgY2xlYXJTZWFyY2hUeXBlKCkge1xuICAgICAgICB0aGlzLnJlc291cmNlVHlwZSA9ICcnO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMgPSBbXTtcbiAgIH1cblxuICAgcmVzZXRab29tKCkge1xuICAgICAgIC8vIGNvbnN0IGN1cnJlbnRab29tID0gdGhpcy5nZXRab29tU2NhbGUoKTtcbiAgICAgICBjb25zdCB0cmFuc2Zvcm06IGFueSA9IHRoaXMudHJhbnNmb3JtIHx8IF8uY2xvbmVEZWVwKGQzLnpvb21JZGVudGl0eSk7XG4gICAgICAgdHJhbnNmb3JtLmsgPSAxO1xuICAgICAgIHRoaXMuc3ZnLmF0dHIoJ3RyYW5zZm9ybScsIHRyYW5zZm9ybSk7XG4gICB9XG5cbiAgZ3JhcGhDb2xsYXBzZShkKSB7XG4gICAgICAgaWYgKGQuZGF0YS5yb290Tm9kZSA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgZC5kYXRhLmNsaWNrUHJvY2VzcyA9ICdOb3QgWWV0JztcbiAgICAgICAgICAgZC5fY2hpbGRyZW4gPSBudWxsO1xuICAgICAgIH1cbiAgICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICAgICBkLl9jaGlsZHJlbiA9IGQuY2hpbGRyZW47XG4gICAgICAgICAgIGQuX2NoaWxkcmVuICYmIGQuX2NoaWxkcmVuPy5maW5kKG5kID0+IHRoaXMuZ3JhcGhDb2xsYXBzZSk7XG4gICAgICAgICAgIGQuY2hpbGRyZW4gPSBudWxsO1xuICAgICAgIH1cbiAgfVxuXG4gIGluaXRUb3BvVmlldygpIHtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gW107XG4gICAgICAgIGNvbnN0IG1hcmdpbiA9IHsgdG9wOiAyMCwgcmlnaHQ6IDE5MCwgYm90dG9tOiAzMCwgbGVmdDogMCB9O1xuICAgICAgICBjb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gIG1hcmdpbi5yaWdodDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gbWFyZ2luLmJvdHRvbTtcblxuICAgICAgICB0aGlzLnRyZWV0b29sdGlwID0gZDMuc2VsZWN0KCcjdG9vbHRpcCcpO1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2VUeXBlRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maWx0ZXJUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMucmVzb3VyY2VUeXBlID0gJyc7XG5cbiAgICAgICAgY29uc3QgaGFuZGxlWm9vbSA9IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN2Zy5hdHRyKCd0cmFuc2Zvcm0nLCBlLnRyYW5zZm9ybSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuem9vbSA9IGQzLnpvb20oKS5vbignem9vbScsIGhhbmRsZVpvb20pO1xuXG4gICAgICAgIHRoaXMuc3ZnID0gZDNcbiAgICAgICAgICAgIC5zZWxlY3QoJyNOZXR3b3JrVmlzdWFsaXplclNWRycpXG4gICAgICAgICAgICAuYXR0cignd2lkdGgnLCAnMTAwJScpXG4gICAgICAgICAgICAuYXR0cignaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAgICAgLmNhbGwodGhpcy56b29tKVxuICAgICAgICAgICAgLmF0dHIoJ3ZpZXdCb3gnLCAnLTIwIC00NTAgJyArICh3aWR0aCAtIG1hcmdpbi50b3AqMiAtIG1hcmdpbi5ib3R0b20pICsgJyAnICsgKyhoZWlnaHQqMiAtbWFyZ2luLmJvdHRvbSkpXG4gICAgICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcgKyAtMjAgKyAnLCcgKyAyMDAgKyAnKScpO1xuXG4gICAgICAgIGQzLnNlbGVjdCgnYm9keScpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGQzLnNlbGVjdCgnI3RvcG9jb250ZXh0bWVudScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZDMuc2VsZWN0QWxsKCdnID4gKicpLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLnRyZWVtYXAgPSBkMy50cmVlKCkubm9kZVNpemUoWzg1LCA1XSk7XG4gICAgICAgIHRoaXMubmV0d29ya0dyYXBoLnggPSAxMDA7IC8vIGhlaWdodCAvIDQ7XG4gICAgICAgIHRoaXMubmV0d29ya0dyYXBoLnkgPSAxMDA7XG4gICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goY29sbGFwc2UpO1xuICAgICAgIC8vIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZvckVhY2goIChuZDphbnkpID0+ICB0aGlzLmdyYXBoQ29sbGFwc2UobmQpICk7XG4gICAgICAgIHRoaXMudXBkYXRlVHJlZSh0aGlzLm5ldHdvcmtHcmFwaCk7XG5cbiAgICAgICAgXy5kZWxheSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IGQzLnpvb21JZGVudGl0eTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLnggPSAtMjAwO1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0ueSA9IDIwNTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmsgPSAxO1xuICAgICAgICAgICAgdGhpcy5zdmcudHJhbnNpdGlvbigpLmR1cmF0aW9uKDc1MCkuYXR0cigndHJhbnNmb3JtJywgdGhpcy50cmFuc2Zvcm0pO1xuICAgICAgICB9LCA2MDApO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNvbGxhcHNlKGQpIHtcbiAgICAgICAgICAgIGlmIChkLmRhdGEucm9vdE5vZGUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgZC5kYXRhLmNsaWNrUHJvY2VzcyA9ICdOb3QgWWV0JztcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZC5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGQuX2NoaWxkcmVuID0gZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbi5mb3JFYWNoKGNvbGxhcHNlKTtcbiAgICAgICAgICAgICAgICBkLmNoaWxkcmVuID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICB9XG5cbiAgICB1cGRhdGVUcmVlKHNvdXJjZSwgZG9SZXNldCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChkb1Jlc2V0KSB7XG4gICAgICAgICAgICBkMy5zZWxlY3RBbGwoJ2cgPiAqJykucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSA3NTA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVEYXRhID0gdGhpcy50cmVlbWFwKHRoaXMubmV0d29ya0dyYXBoKTtcbiAgICAgICAgICAgIHRoaXMubm9kZXMgPSB0aGlzLnRyZWVEYXRhLmRlc2NlbmRhbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy50cmVlRGF0YS5kZXNjZW5kYW50cygpLnNsaWNlKDEpO1xuICAgICAgICB9IGNhdGNoIChlOmFueSkge1xuICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBpbiBidWlsZGluZyB0cmVlIG9iamVjdDogJysgZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdmdEZWZzID0gdGhpcy5zdmcuYXBwZW5kKCdkZWZzJyk7XG4gICAgICAgIGNvbnN0IGxpbmVhckdyYWRpZW50ID0gc3ZnRGVmcy5hcHBlbmQoJ2xpbmVhckdyYWRpZW50JykuYXR0cignaWQnLCAnTm9kZUdyYWRpZW50Jyk7XG4gICAgICAgIGxpbmVhckdyYWRpZW50LmFwcGVuZCgnc3RvcCcpLmF0dHIoJ2NsYXNzJywgJ3N0b3AxJykuYXR0cignb2Zmc2V0JywgJzAlJyk7XG4gICAgICAgIGxpbmVhckdyYWRpZW50LmFwcGVuZCgnc3RvcCcpLmF0dHIoJ2NsYXNzJywgJ3N0b3AyJykuYXR0cignb2Zmc2V0JywgJzUwJScpO1xuICAgICAgICBsaW5lYXJHcmFkaWVudC5hcHBlbmQoJ3N0b3AnKS5hdHRyKCdjbGFzcycsICdzdG9wMycpLmF0dHIoJ29mZnNldCcsICcxMDAlJyk7XG5cbiAgICAgICAgY29uc3QgbGluZWFyR3JhZGllbnQyID0gc3ZnRGVmcy5hcHBlbmQoJ2xpbmVhckdyYWRpZW50JykuYXR0cignaWQnLCAnTm9kZUhvdmVyR3JhZGllbnQnKTtcbiAgICAgICAgbGluZWFyR3JhZGllbnQyLmFwcGVuZCgnc3RvcCcpLmF0dHIoJ2NsYXNzJywgJ3N0b3AxYScpLmF0dHIoJ29mZnNldCcsICcwJScpO1xuICAgICAgICBsaW5lYXJHcmFkaWVudDIuYXBwZW5kKCdzdG9wJykuYXR0cignY2xhc3MnLCAnc3RvcDJhJykuYXR0cignb2Zmc2V0JywgJzUwJScpO1xuICAgICAgICBsaW5lYXJHcmFkaWVudDIuYXBwZW5kKCdzdG9wJykuYXR0cignY2xhc3MnLCAnc3RvcDNhJykuYXR0cignb2Zmc2V0JywgJzEwMCUnKTtcblxuICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIGQueSA9IGQuZGVwdGggKiA0MDA7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5vZGUgPSB0aGlzLnN2Zy5zZWxlY3RBbGwoJ2cubm9kZScpLmRhdGEodGhpcy5ub2RlcywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkLmRhdGEuaWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZUVudGVyID0gdGhpcy5ub2RlXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAoZCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjbGFzc05hbWUgPSAnJztcblxuICAgICAgICAgICAgICAgIGlmIChfLnN0YXJ0c1dpdGgoZC5kYXRhLm5hbWUsICdFZGdlIFJvdXRlcnMnKSB8fCBfLmluY2x1ZGVzKGQuZGF0YS50eXBlLCAnRWRnZSBSb3V0ZXInKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnZWRnZS1yb3V0ZXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhkLmRhdGEubmFtZSwgJ0lkZW50aXRpZXMnKSB8fCBfLmluY2x1ZGVzKGQuZGF0YS5uYW1lLCAnQXNzb2NpYXRlZCBJZGVudGl0aWVzJykgfHwgXy5pbmNsdWRlcyhkLmRhdGEudHlwZSwgJ0lkZW50aXR5JykgfHwgXy5pbmNsdWRlcyhkLmRhdGEudHlwZSwgJ0Jyb3daZXIgSWRlbnRpdHknKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnZW5kcG9pbnQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnU2VydmljZXMnKSB8fCBfLnN0YXJ0c1dpdGgoZC5kYXRhLnR5cGUsICdTZXJ2aWNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ3NlcnZpY2UnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnQmluZC1TZXJ2aWNlcycpIHx8IF8uc3RhcnRzV2l0aChkLmRhdGEubmFtZSwgJ0RpYWwtU2VydmljZXMnKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnc2VydmljZSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfLnN0YXJ0c1dpdGgoZC5kYXRhLm5hbWUsICdCaW5kLVBvbGljaWVzJykgfHwgXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnRGlhbC1Qb2xpY2llcycpIHx8IF8uc3RhcnRzV2l0aChkLmRhdGEubmFtZSwgJ0JpbmQgUG9saWN5JykgKSB7XG4gICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnc2VydmljZS1wb2xpY3knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5pbmNsdWRlcyhkLmRhdGEubmFtZSwgJ1NlcnZpY2UgUG9saWNpZXMnKSB8fCBfLmluY2x1ZGVzKGQuZGF0YS50eXBlLCAnU2VydmljZSBQb2xpY3knKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWUgPSAnc2VydmljZS1wb2xpY3knO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnRWRnZSBSb3V0ZXIgUG9saWNpZXMnKSB8fCBfLnN0YXJ0c1dpdGgoZC5kYXRhLnR5cGUsICdSb3V0ZXIgUG9saWN5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gJ2VkZ2Utcm91dGVyLXBvbGljeSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgXy5zdGFydHNXaXRoKGQuZGF0YS5uYW1lLCAnU2VydmljZSBFZGdlIFJvdXRlciBQb2xpY2llcycpIHx8XG4gICAgICAgICAgICAgICAgICAgIF8uc3RhcnRzV2l0aChkLmRhdGEudHlwZSwgJ1NlcnZpY2UgUm91dGVyIFBvbGljeScpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZSA9ICdzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljeSc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gZC5fY2hpbGRyZW4gPyAnbm9kZSAnICsgY2xhc3NOYW1lIDogJ25vZGUgdGVybWluYXRlICcgKyBjbGFzc05hbWU7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3NOYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLngpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIHNvdXJjZS55ICsgJywnICsgc291cmNlLnggKyAnKSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoJyArIGQueSArICcsJyArIGQueCArICcpJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVFbnRlci5vbignY29udGV4dG1lbnUnLCAoZXZlbnQsIGQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBkMy5zZWxlY3QoJyN0b29sdGlwJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICAgICAgY29uc3QgbncgPSB0aGlzLmN1cnJlbnROZXR3b3JrO1xuICAgICAgICAgICAgY29uc3QgcmF3RWRnZXJvdXRlcnMgPSB0aGlzLmVkZ2Vyb3V0ZXJzO1xuICAgICAgICAgICAgY29uc3QgcmF3RW5kcG9pbnRzID0gdGhpcy5pZGVudGl0aWVzO1xuICAgICAgICAgICAgY29uc3QgcmF3QXBwd2FucyA9IHRoaXMuc2VydmljZV9wb2xpY2llcztcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VSb3V0ZXJQb2xpY2llcyA9IHRoaXMuZWRnZV9yb3V0ZXJfcG9saWNpZXM7XG5cbiAgICAgICAgICAgIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEuY29udGV4dE1lbnUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjdG9wb2NvbnRleHRtZW51JylcbiAgICAgICAgICAgICAgICAgICAgLnN0eWxlKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpXG4gICAgICAgICAgICAgICAgICAgIC5zdHlsZSgnbGVmdCcsIGV2ZW50Lm9mZnNldFggKyAncHgnKVxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoJ3RvcCcsIGV2ZW50Lm9mZnNldFkgKyAncHgnKVxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG9iaiA9IG51bGw7XG4gICAgICAgICAgICBpZiAoZCAmJiBkLmRhdGEgJiYgKGQuZGF0YS50eXBlID09PSAnSWRlbnRpdHknIHx8IGQuZGF0YS50eXBlID09PSAnQnJvd1plciBJZGVudGl0eScgKSApIHtcbiAgICAgICAgICAgICAgIGlmKGQuZGF0YS5zdGF0dXMgPT09IFwiUmVnaXN0ZXJlZFwiKSB7XG4gICAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaVNpbmdsZUxUJyk7XG4gICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVVVCcpO1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVMVCcpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpVkMnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpQUwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVQcycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxBbGwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMU2luZ2xlUm91dGVyJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpQ0wnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUxUJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnaWRlbnRpdHknO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEudHlwZSA9PT0gJ0VkZ2UgUm91dGVyJykge1xuICAgICAgICAgICAgICBpZihkLmRhdGEuc3RhdHVzID09PSBcIlBST1ZJU0lPTkVEXCIpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpRkxTaW5nbGVSb3V0ZXInKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZVVUJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaU1ldCcpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpSW5zJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlFVicpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlBTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVBzJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTEFsbCcpO1xuXG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlDTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpTFQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnZWRnZS1yb3V0ZXInO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGQgJiYgZC5kYXRhICYmIGQuZGF0YS50eXBlID09PSAnU2VydmljZScpIHtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpTWV0Jyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaVZDJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlJbnMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVWJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlBTCcpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlFUHMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMQWxsJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlMVCcpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlTaW5nbGVVVCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dG1lbnVOb2RlVHlwZSA9ICdzZXJ2aWNlJztcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEudHlwZSA9PT0gJ1NlcnZpY2UgUG9saWN5Jykge1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpTWV0Jyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaVZDJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlJbnMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVWJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlBTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVBzJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTEFsbCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxTaW5nbGVSb3V0ZXInKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZUxUJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlDTCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpTFQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZVVUJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnc2VydmljZS1wb2xpY3knO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEudHlwZSA9PT0gJ1JvdXRlciBQb2xpY3knKSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUFMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlFUHMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMU2luZ2xlUm91dGVyJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxBbGwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAncm91dGVyLXBvbGljeSc7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmRhdGEgJiYgZC5kYXRhLnR5cGUgPT09ICdOZXR3b3JrJykge1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBlbmFibGVMaSgnI2xpQUwnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUVQcycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlGTEFsbCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRkxTaW5nbGVSb3V0ZXInKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaVNpbmdsZUxUJyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZW5hYmxlTGkoJyNsaUxUJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlTaW5nbGVVVCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dG1lbnVOb2RlVHlwZSA9ICduZXR3b3JrJztcbiAgICAgICAgICAgICAgICBvYmogPSBudztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmRhdGEgJiYgZC5kYXRhLnR5cGUgPT09ICdTZXJ2aWNlIFJvdXRlciBQb2xpY3knKSB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlNZXQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUlucycpO1xuICAgICAgICAgICAgICAgIGVuYWJsZUxpKCcjbGlWQycpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpRVYnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUFMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlFUHMnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUZMQWxsJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlGTFNpbmdsZVJvdXRlcicpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlTFQnKTtcbiAgICAgICAgICAgICAgICBkaXNhYmxlTGkoJyNsaUNMJyk7XG4gICAgICAgICAgICAgICAgZGlzYWJsZUxpKCcjbGlMVCcpO1xuICAgICAgICAgICAgICAgIGRpc2FibGVMaSgnI2xpU2luZ2xlVVQnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRtZW51Tm9kZVR5cGUgPSAnc2VydmljZS1yb3V0ZXItcG9saWN5JztcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250ZXh0bWVudU5vZGUgPSBvYmo7XG4gICAgICAgICAgICBkMy5zZWxlY3QoJyN0b29sdGlwJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNpcmNsZXMgPSB0aGlzLm5vZGVFbnRlclxuICAgICAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdub2RlJylcbiAgICAgICAgICAgIC5hdHRyKCdyJywgMTApXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLl9jaGlsZHJlbiA/ICd2YXIoLS10YWJsZVRleHQpJyA6ICcjZmZmJztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlbW92ZScsIChldmVudCwgZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhd1RyZWVUb29sdGlwKGV2ZW50LCBkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ21vdXNlb3V0JywgdGhpcy5yZW1vdmVUcmVlVG9vbHRpcClcbiAgICAgICAgICAgIC5vbignY29udGV4dG1lbnUnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5vbignY2xpY2snLCBhc3luYyAoIGV2ZW50LCBkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgIGlmIChkLmRhdGEucm9vdE5vZGUgJiYgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJiBkLmRhdGEuY2xpY2tQcm9jZXNzID09PSAnTm90IFlldCcpIHtcbiAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KGV2ZW50LmN1cnJlbnRUYXJnZXQpLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBcIjEwXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbig2MDApXG4gICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBcIjZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgXCIzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5kdXJhdGlvbig2MDApXG4gICAgICAgICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIFwiOVwiKVxuICAgICAgICAgICAgICAgICAgICAgIC50cmFuc2l0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuZHVyYXRpb24oNjAwKVxuICAgICAgICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZS13aWR0aFwiLCBcIjEyXCIpO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkICYmIGQuZGF0YSAmJiBkLmRhdGEuY29udGV4dE1lbnUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIGQzLnNlbGVjdCgnI3RvcG9jb250ZXh0bWVudScpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZDMuc2VsZWN0KCcjdG9vbHRpcCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICBpZiAoZC5jaGlsZHJlbiAmJiBkLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5Ob2Rlcy5pbmRleE9mKGQuZGF0YS5pZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5Ob2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGQuX2NoaWxkcmVuID0gZC5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICAgICAgZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3Blbk5vZGVzLmluZGV4T2YoZC5kYXRhLmlkKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbk5vZGVzLnB1c2goZC5kYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5kYXRhLmNsaWNrUHJvY2VzcyA9PT0gJ05vdCBZZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkLmRhdGEudHlwZSA9PT0gJ0lkZW50aXR5JyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS50eXBlID09PSAnQnJvd1plciBJZGVudGl0eScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSAgYXdhaXQgdGhpcy50cmVlTm9kZVByb2Nlc3Nvci5wcm9jZXNzSWRlbnRpdGllc0Zvck5vZGVDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdGllcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBhcnJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZmluZCgobmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VGZXcobmQsIHRoaXMub3Blbk5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSA9PT0gJ1llcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEudHlwZSA9PT0gJ1NlcnZpY2UnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLnRyZWVOb2RlUHJvY2Vzc29yLnByb2Nlc3NTZXJ2aWNlc0Zvck5vZGVDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCA9IGFyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5maW5kKChuZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhuZCwgdGhpcy5vcGVuTm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZShkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS50eXBlID09PSAnU2VydmljZSBQb2xpY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLnRyZWVOb2RlUHJvY2Vzc29yLnByb2Nlc3NTZXJ2aWNlUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCA9IGFyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCA9IGFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaC5jaGlsZHJlbi5maW5kKChuZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhuZCwgdGhpcy5vcGVuTm9kZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVHJlZShkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS50eXBlID09PSAnRWRnZSBSb3V0ZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5fY2hpbGRyZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLmNsaWNrUHJvY2VzcyA9ICdDb21wbGV0ZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGF3YWl0IHRoaXMudHJlZU5vZGVQcm9jZXNzb3IucHJvY2Vzc0VkZ2Vyb3V0ZXJzRm9yTm9kZUNsaWNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ldHdvcmtHcmFwaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGdlcm91dGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkID0gYXJyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gYXJyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZpbmQoKG5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlRmV3KG5kLCB0aGlzLm9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEucm9vdE5vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEucm9vdE5vZGUgPT09ICdZZXMnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5kYXRhLnR5cGUgPT09ICdSb3V0ZXIgUG9saWN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWQuX2NoaWxkcmVuXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5jbGlja1Byb2Nlc3MgPSAnQ29tcGxldGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnIgPSBhd2FpdCB0aGlzLnRyZWVOb2RlUHJvY2Vzc29yLnByb2Nlc3NFZGdlUm91dGVyUG9saWNpZXNGb3JOb2RlQ2xpY2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkZ2Vfcm91dGVyX3BvbGljaWVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXFJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56aXRpU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxSWQgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGggPSBhcnJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGguY2hpbGRyZW4uZmluZCgobmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VGZXcobmQsIHRoaXMub3Blbk5vZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUoZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuZGF0YS5yb290Tm9kZSA9PT0gJ1llcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEudHlwZSA9PT0gJ1NlcnZpY2UgUm91dGVyIFBvbGljeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhZC5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFkLl9jaGlsZHJlblxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkLmRhdGEuY2xpY2tQcm9jZXNzID0gJ0NvbXBsZXRlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gYXdhaXQgdGhpcy50cmVlTm9kZVByb2Nlc3Nvci5wcm9jZXNzU2VydmljZUVkZ2VSb3V0ZXJQb2xpY2llc0Zvck5vZGVDbGljayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXR3b3JrR3JhcGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZV9yb3V0ZXJfcG9saWNpZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcUlkID0gYXJyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoID0gYXJyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV0d29ya0dyYXBoLmNoaWxkcmVuLmZpbmQoKG5kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlRmV3KG5kLCB0aGlzLm9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUcmVlKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmNoaWxkcmVuID0gZC5fY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkLmNoaWxkcmVuID0gZC5fY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGQuX2NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkLl9jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZC5jaGlsZHJlbiB8fCBkLl9jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRyZWUoZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdE5vZGUgPSBfLmdldChkLCAnZGF0YS5jaGlsZHJlblswXS5yb290Tm9kZScsICcnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJyb290Tm9kZSA9IF8uZ2V0KGQsICdkYXRhLnJvb3ROb2RlJywgJycpO1xuICAgICAgICAgICAgICAgIGlmIChyb290Tm9kZSA9PT0gJ1llcycgfHwgc3Vicm9vdE5vZGUgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3ROb2RlaXNZZXNDb2xvckNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZUVudGVyXG4gICAgICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCAnNTAnKVxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZCAmJiBkLmRhdGEgJiYgZC5kYXRhLm5hbWUubGVuZ3RoID49IDIwPyAnNTUwJzogJzMzMCc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAnMjAnKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCAgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGQgJiYgZC5kYXRhICYmIGQuZGF0YS5yb290Tm9kZT09PSdZZXMnPyAnLTUnOiAnLTQwJztcbiAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFwcGVuZCgneGh0bWw6Ym9keScpXG4gICAgICAgICAgICAuc3R5bGUoJ2JhY2tncm91bmQnLCAndHJhbnNwYXJlbnQnKVxuICAgICAgICAgICAgLmh0bWwoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJub2RlLXRleHQtY29udGFpbmVyXCI+PHNwYW4+JHtkLmRhdGEubmFtZX08L3NwYW4+PC9kaXY+YDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9kZVVwZGF0ZSA9IHRoaXMubm9kZUVudGVyLm1lcmdlKHRoaXMubm9kZSk7XG5cbiAgICAgICAgdGhpcy5ub2RlVXBkYXRlXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC55ICsgJywnICsgZC54ICsgJyknO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub2RlVXBkYXRlLnNlbGVjdCgnY2lyY2xlLm5vZGUnKS5hdHRyKCdyJywgMTgpLmF0dHIoJ2N1cnNvcicsICdwb2ludGVyJyk7XG5cbiAgICAgICAgdGhpcy5ub2RlRXhpdCA9IHRoaXMubm9kZVxuICAgICAgICAgICAgLmV4aXQoKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxuICAgICAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNvdXJjZSAmJiBzb3VyY2UueCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgc291cmNlLnkgKyAnLCcgKyBzb3VyY2UueCArICcpJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC55ICsgJywnICsgZC54ICsgJyknO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVtb3ZlKCk7XG5cbiAgICAgICAgdGhpcy5ub2RlRXhpdC5zZWxlY3QoJ2NpcmNsZScpLmF0dHIoJ3InLCAwKTtcbiAgICAgICAgdGhpcy5ub2RlRXhpdC5zZWxlY3QoJ3RleHQnKS5zdHlsZSgnZmlsbC1vcGFjaXR5JywgMTApO1xuICAgICAgICB0aGlzLmxpbmsgPSB0aGlzLnN2Zy5zZWxlY3RBbGwoJ3BhdGgubGluaycpLmRhdGEodGhpcy5saW5rcywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgIHJldHVybiBkLmRhdGEuaWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxpbmtVcGRhdGUgPSB0aGlzLmxpbmtcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuaW5zZXJ0KCdwYXRoJywgJ2cnKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpbmsnKVxuICAgICAgICAgICAgLmF0dHIoJ2QnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIGxldCBvO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLngpIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogc291cmNlLngsIHk6IHNvdXJjZS55IH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogZC54LCB5OiBkLnkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdvbmFsKG8sIG8sICcxJyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1lcmdlKHRoaXMubGluayk7XG5cbiAgICAgICAgdGhpcy5saW5rVXBkYXRlXG4gICAgICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgICAgICAuZHVyYXRpb24oZHVyYXRpb24pXG4gICAgICAgICAgICAuYXR0cignZCcsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdvbmFsKGQsIGQucGFyZW50LCAnMicpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5saW5rRXhpdCA9IHRoaXMubGlua1xuICAgICAgICAgICAgLmV4aXQoKVxuICAgICAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAgICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxuICAgICAgICAgICAgLmF0dHIoJ2QnLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIGxldCBvO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgJiYgc291cmNlLngpIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogc291cmNlLngsIHk6IHNvdXJjZS55IH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbyA9IHsgeDogZC54LCB5OiBkLnkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpYWdvbmFsKG8sIG8sICczJyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlbW92ZSgpO1xuXG4gICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaChmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICBkLngwID0gZC54O1xuICAgICAgICAgICAgZC55MCA9IGQueTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVuY3Rpb24gZGlzYWJsZUxpKGxpSWQpIHtcbiAgICAgICAgICAgIGQzLnNlbGVjdChsaUlkKS5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBlbmFibGVMaShsaUlkKSB7XG4gICAgICAgICAgICBkMy5zZWxlY3QobGlJZCkuc3R5bGUoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRpYWdvbmFsKHMsIGQsIGxnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gYE0gJHtzLnl9ICR7cy54fVxuICAgICAgICAgICAgIEMgJHsocy55ICsgZC55KSAvIDJ9ICR7cy54fSxcbiAgICAgICAgICAgICAgICR7KHMueSArIGQueSkgLyAyfSAke2QueH0sXG4gICAgICAgICAgICAgICAke2QueX0gJHtkLnh9YDtcblxuICAgICAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByb290Tm9kZWlzWWVzQ29sb3JDaGFuZ2UoKSB7XG4gICAgICAgICAgICBkMy5zZWxlY3RBbGwoJ2NpcmNsZScpLmVhY2goZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3ROb2RlID0gXy5nZXQoZCwgJ2RhdGEucm9vdE5vZGUnLCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpY2tQcm9jZXNzID0gXy5nZXQoZCwgJ2RhdGEuY2xpY2tQcm9jZXNzJywgJycpO1xuICAgICAgICAgICAgICAgIGlmIChyb290Tm9kZSA9PT0gJ1llcycgJiYgY2xpY2tQcm9jZXNzID09PSAnTm90IFlldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdmaWxsJywgJ2Jyb3duJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb290Tm9kZSA9PT0gJ1llcycgJiYgY2xpY2tQcm9jZXNzICE9PSAnTm90IFlldCcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBkLl9jaGlsZHJlbiA/ICd2YXIoLS10YWJsZVRleHQpJyA6ICcjZmZmJztcbiAgICAgICAgICAgICAgICAgICAgZDMuc2VsZWN0KHRoaXMpLnN0eWxlKCdmaWxsJywgY29sb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY29sbGFwc2VGZXcoX25kLCBvcGVuTm9kZXMpIHtcbiAgICAgICAgICAgIGlmIChfbmQuZGF0YS5pZCA9PT0gJyNhbGwnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9uZC5kYXRhLnJvb3ROb2RlID09PSAnWWVzJyAmJiBfbmQuZGF0YS5jbGlja1Byb2Nlc3MgPT09ICdOb3QgWWV0Jykge1xuICAgICAgICAgICAgICAgIF9uZC5fY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfbmQuY2hpbGRyZW4gJiYgb3Blbk5vZGVzLmluZGV4T2YoX25kLmRhdGEuaWQpIDwgMCkge1xuICAgICAgICAgICAgICAgIF9uZC5fY2hpbGRyZW4gPSBfbmQuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKF9uZC5fY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgICAgIF9uZC5fY2hpbGRyZW4uZmluZCgoX25kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhfbmQsIG9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIF9uZC5jaGlsZHJlbiA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfbmQuY2hpbGRyZW4gJiYgb3Blbk5vZGVzLmluZGV4T2YoX25kLmRhdGEuaWQpID49IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoX25kLmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgICAgICBfbmQuY2hpbGRyZW4uZmluZCgoX25kKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUZldyhfbmQsIG9wZW5Ob2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZS5jaGlsZHJlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgXy5kZWxheSh0aGlzLnNpemVUb0ZpdC5iaW5kKHRoaXMpLCA2NTApO1xuICAgICAgICB9XG4gICAgfSAvLyBlbmQgb2YgdXBkYXRlVHJlZVxuXG4gICAgc2l6ZVRvRml0KCkge1xuICAgICAgICBjb25zdCBib3VuZGluZ0JveCA9IHRoaXMuc3ZnLl9ncm91cHNbMF1bMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbURlbHRhID0gYm91bmRpbmdCb3guaGVpZ2h0IC0gMTAwIC0gLWJvdW5kaW5nQm94LnRvcDtcbiAgICAgICAgY29uc3QgdG9wRGVsdGEgPSBib3VuZGluZ0JveC5oZWlnaHQgKyA1MDAgLSBib3VuZGluZ0JveC5ib3R0b207XG4gICAgICAgIGNvbnN0IHRvcE91dE9mVmlldyA9IHRvcERlbHRhIDwgMDtcbiAgICAgICAgY29uc3QgYm90dG9tT3V0T2ZWaWV3ID0gYm90dG9tRGVsdGEgPCAwO1xuXG4gICAgICAgIGlmIChib3R0b21PdXRPZlZpZXcgfHwgdG9wT3V0T2ZWaWV3KSB7XG4gICAgICAgICAgICBjb25zdCB0cmFucyA9IHRoaXMudHJhbnNmb3JtO1xuICAgICAgICAgICAgdHJhbnMueSA9IHRvcE91dE9mVmlldyA/IDQwMCA6IDA7XG4gICAgICAgICAgICB0aGlzLnN2Zy50cmFuc2l0aW9uKCkuZHVyYXRpb24oNzUwKS5hdHRyKCd0cmFuc2Zvcm0nLCB0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb2xvcihkKSB7XG4gICAgICAgIGlmIChkLnN0YXR1cyA9PT0gJ0Vycm9yJyAmJiBkLmdyb3VwID09PSAzKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JlZCc7XG4gICAgICAgIH0gZWxzZSBpZiAoZC5zdGF0dXMgIT09ICdFcnJvcicgJiYgZC5ncm91cCA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuICd2YXIoLS10YWJsZVRleHQpJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAndmFyKC0tdGFibGVUZXh0KSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aWNrZWQoKSB7XG4gICAgICAgIHRoaXMubGlua3NcbiAgICAgICAgICAgIC5hdHRyKCd4MScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuc291cmNlLng7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoJ3kxJywgZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5zb3VyY2UueTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cigneDInLCBmdW5jdGlvbiAoZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLnRhcmdldC54O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKCd5MicsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQudGFyZ2V0Lnk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm5vZGVzLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgZC54ICsgJywnICsgZC55ICsgJyknO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0FuT2JqZWN0KG8pIHtcbiAgICAgICAgcmV0dXJuIG8gaW5zdGFuY2VvZiBPYmplY3QgJiYgby5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuICAgIH1cblxuICAgIHJlYWRPYmplY3RWYWx1ZXMobGlua09iamVjdCkge1xuICAgICAgICBsZXQgaW5mbyA9ICc8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxMnB4O2ZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmXCI+JztcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGxpbmtPYmplY3QuZGF0YSk7XG4gICAgICAgIGtleXMuZm9yRWFjaCggKGspID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQW5PYmplY3QobGlua09iamVjdC5kYXRhW2tdKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtWYWw6IGFueSA9IGxpbmtPYmplY3QuZGF0YVtrXTtcbiAgICAgICAgICAgICAgICBpbmZvID0gaW5mbyArICcgICAnICsgayArICcgIDogICcgKyBrVmFsLmlkICsgJzxicj4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbmZvID0gaW5mbyArICcgICAnICsgayArICcgIDogICcgKyBsaW5rT2JqZWN0LmRhdGFba10gKyAnPGJyPic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaW5mbyArICc8L3NwYW4+JztcbiAgICB9XG5cbiAgICBub2RlQ29sb3IoZCkge1xuICAgICAgICBpZiAoZC5zdGF0dXMgPT09ICdFcnJvcicpIHtcbiAgICAgICAgICAgIHJldHVybiAnI0ZGMDAwMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2JsdWUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZHJhZ3N0YXJ0ZWQoZXZlbnQsIGQpIHtcbiAgICAgICAgaWYgKCFldmVudC5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2ltdWxhdGlvbi5hbHBoYVRhcmdldCgwLjMpLnJlc3RhcnQoKTtcbiAgICAgICAgfVxuICAgICAgICBkLmZ4ID0gZC54O1xuICAgICAgICBkLmZ5ID0gZC55O1xuICAgIH1cblxuICAgIGRyYWdnZWQoZCkge1xuICAgICAgICBkLmZ4ID0gZC54O1xuICAgICAgICBkLmZ5ID0gZC55O1xuICAgIH1cblxuICAgIGRyYWdlbmRlZChldmVudCwgZCkge1xuICAgICAgICBpZiAoIWV2ZW50LmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgZC5meCA9IG51bGw7XG4gICAgICAgIGQuZnkgPSBudWxsO1xuICAgIH1cbiAgICByZW1vdmVUcmVlVG9vbHRpcCgpIHtcbiAgICAgICAgdGhpcy50cmVldG9vbHRpcCA9IGQzLnNlbGVjdCgnI3Rvb2x0aXAnKTtcbiAgICAgICAgaWYgKHRoaXMudHJlZXRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMudHJlZXRvb2x0aXAuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRyYXdUcmVlVG9vbHRpcChldmVudCwgcykge1xuICAgICAgICB0aGlzLnRyZWV0b29sdGlwID0gZDMuc2VsZWN0KCcjdG9vbHRpcCcpO1xuICAgICAgICB0aGlzLnRyZWV0b29sdGlwLnN0eWxlKCdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIGNvbnN0IHggPSBldmVudC5wYWdlWCArICdweCc7XG4gICAgICAgIGNvbnN0IHkgPSBldmVudC5wYWdlWSArIDE1ICsgJ3B4JztcbiAgICAgICAgdGhpcy50cmVldG9vbHRpcC5zdHlsZSgnbGVmdCcsIHgpO1xuICAgICAgICB0aGlzLnRyZWV0b29sdGlwLnN0eWxlKCd0b3AnLCB5KTtcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2x0aXAnKS5pbm5lckhUTUwgPSB0aGlzLnJlYWRUcmVlS2V5VmFsdWVzKGV2ZW50LCBzKTtcbiAgICB9XG4gICAgcmVhZFRyZWVLZXlWYWx1ZXMoZXZlbnQsIGQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBkLmRhdGEubmFtZS5pbmRleE9mKCcoJyk7XG4gICAgICBjb25zdCBmaW5JbmRleCA9IGQuZGF0YS5uYW1lLmluZGV4T2YoJyknKTtcbiAgICAgIGNvbnN0IGNvdW50U3RyOm51bWJlciA9IHN0YXJ0SW5kZXggPjA/IGQuZGF0YS5uYW1lLnN1YnN0cmluZyhzdGFydEluZGV4ICsgMSwgZmluSW5kZXgpOiAwO1xuICAgICAgICBsZXQgaW5mbyA9IGA8ZGl2IGNsYXNzPSd0b29sLXRpcC1jb250YWluZXInPmA7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkLmRhdGEpOyAvLyBtcC5rZXlzKCk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGsgPT09ICdmaXJzdENoaWxkJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdwcm90b2NvbCcgfHxcbiAgICAgICAgICAgICAgICBrID09PSAnY29udGV4dE1lbnUnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ3V1aWQnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ2xhc3RJZCcgfHxcbiAgICAgICAgICAgICAgICBrID09PSAnY2xpY2tQcm9jZXNzJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdyb290Tm9kZScgfHxcbiAgICAgICAgICAgICAgICBrID09PSAnaWQnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ2NoaWxkcmVuJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdwYXJlbnQnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ2RlcHRoJyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICd4JyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICd5JyB8fFxuICAgICAgICAgICAgICAgIGsgPT09ICdyb290Tm9kZScgfHxcbiAgICAgICAgICAgICAgICBrID09PSAneDAnIHx8XG4gICAgICAgICAgICAgICAgayA9PT0gJ3kwJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRba10gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIGluZm8gPVxuICAgICAgICAgICAgICAgICAgICBpbmZvICtcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwcm9wLXJvd1wiPjxkaXYgY2xhc3M9XCJwcm9wLW5hbWVcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgayArXG4gICAgICAgICAgICAgICAgICAgICc6PC9kaXY+PGRpdiBjbGFzcz1cInByb3AtdmFsXCI+JyArXG4gICAgICAgICAgICAgICAgICAgIGRba10uam9pbignPGJyPiAmbmJzcDsmbmJzcDsgJm5ic3A7Jm5ic3A7JykgK1xuICAgICAgICAgICAgICAgICAgICAnPC9kaXY+PC9kaXY+JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcFZhbCA9IGQuZGF0YVtrXSB8fCAnJztcbiAgICAgICAgICAgICAgICBpbmZvID0gaW5mbyArICc8ZGl2IGNsYXNzPVwicHJvcC1yb3dcIj48ZGl2IGNsYXNzPVwicHJvcC1uYW1lXCI+JyArIGsgKyAnOjwvZGl2PjxkaXYgY2xhc3M9XCJwcm9wLXZhbFwiPicgKyBwcm9wVmFsICsgJzwvZGl2PjwvZGl2Pic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZC5kYXRhLmZpcnN0Q2hpbGQgJiYgZC5kYXRhLmZpcnN0Q2hpbGQgPT09ICdZZXMnICYmIGNvdW50U3RyID4gdGhpcy5tYXhPYmplY3RzUGVyTm9kZS0xKSB7XG4gICAgICAgICAgICAgaW5mbyA9IGluZm8gKyAnPHNwYW4gY2xhc3M9XCJ0b29sdGlwLWhlbHAtdGV4dFwiPk5vdGU6IGV4cGFuZCBub2RlIGRpc2FibGVkLiBVc2Ugc2VhcmNoIGZpbHRlci48L3NwYW4+JztcbiAgICAgICAgfSBlbHNlIGlmIChkLmRhdGEuZmlyc3RDaGlsZCAmJiBkLmRhdGEuZmlyc3RDaGlsZCA9PT0gJ1llcycgJiYgY291bnRTdHIgPCB0aGlzLm1heE9iamVjdHNQZXJOb2RlKXtcbiAgICAgICAgICAgICBpbmZvID0gaW5mbyArICc8c3BhbiBjbGFzcz1cInRvb2x0aXAtaGVscC10ZXh0XCI+Tm90ZTogY2xpY2sgdG8gZXhwYW5kIGNoaWxkIG5vZGVzIDwvc3Bhbj4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbmZvICsgJzwvZGl2Pic7XG4gICAgfVxuXG59XG5cbiIsIjxkaXYgY2xhc3M9XCJ6aXRpLXBhZ2UtY29udGFpbmVyIHppdGktaWRlbnRpdGllcy1jb250YWluZXJcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJuZi1uZXR3b3JrLXRvcG9sb2d5LWNvbnRhaW5lclwiID5cblxuICAgICAgPGRpdiBjbGFzcz1cImNzcy1oZWFkZXJcIj57e3RpdGxlfX0gPC9kaXY+PGJyPlxuXG4gICAgICA8ZGl2ICBjbGFzcz1cIm5mLW5ldC12aXMtY29udHJvbHMtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJuZi10b3BvbG9neS16b29tLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDwhLS1idXR0b24gKGNsaWNrKT1cInpvb21PdXQoKVwiIGNsYXNzPVwibmYtdG9wb2xvZ3ktem9vbS1idXR0b24gbWludXNcIj48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ6b29tSW4oKVwiIGNsYXNzPVwibmYtdG9wb2xvZ3ktem9vbS1idXR0b24gcGx1c1wiPjwvYnV0dG9uLS0+XG4gICAgICAgICAgPGRpdiAoY2xpY2spPVwicmVzZXRUcmVlKCdZZXMnKVwiIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgdGl0bGU9XCJSZXNldFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgKGNoYW5nZSk9XCJyZXNvdXJjZVR5cGVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXNvdXJjZVR5cGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncmVzb3VyY2UtdHlwZS1lcnJvcic6IHJlc291cmNlVHlwZUVycm9yIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZS10eXBlLXNlbGVjdFwiXG4gICAgICAgICAgICBpZD1cIlJlc291cmNlVHlwZVNlbGVjdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+U2VsZWN0IFJlc291cmNlIFR5cGU8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VydmljZS1wb2xpY2llc1wiPlNlcnZpY2UgUG9saWNpZXM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic2VydmljZXNcIj5TZXJ2aWNlczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJpZGVudGl0aWVzXCI+SWRlbnRpdGllczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlZGdlLXJvdXRlcnNcIj5FZGdlIFJvdXRlcnM8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZWRnZS1yb3V0ZXItcG9saWNpZXNcIj5FZGdlIFJvdXRlciBQb2xpY2llczwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzZXJ2aWNlLWVkZ2Utcm91dGVyLXBvbGljaWVzXCI+U2VydmljZSBFZGdlIFJvdXRlciBQb2xpY2llczwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwibmYtbmV0LXZpcy1maWx0ZXItY29udGFpbmVyIGxpc3RCb3ggcm93XCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIChrZXl1cCk9XCJud1NlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJUZXh0XCJcbiAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJuZi10b3BvbG9neS1maWx0ZXItaW5wdXRcIlxuICAgICAgICAgICAgICBpZD1cImZpbHRlclRleHRcIlxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gRmlsdGVyXCJcbiAgICAgICAgICAvPlxuXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJTZWFyY2hGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyVGV4dCAhPT0gJydcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbkJhbGwgY2xvc2UgaWNvbi1jbG9zZVwiXG4gICAgICAgICAgICAgIGlkPVwiQ2xlYXJTZWFyY2hGaWx0ZXJcIlxuICAgICAgICAgID48L2Rpdj5cblxuICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cImF1dG9jb21wbGV0ZVNlYXJjaCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGF1dG9jb21wbGV0ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm5mLXRvcG9sb2d5LWxlZ2VuZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBzZXJ2aWNlcG9saWNpZXNcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5TZXJ2aWNlIFBvbGljaWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBzZXJ2aWNlc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlNlcnZpY2VzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBlbmRwb2ludHNcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLXRleHRcIj5JZGVudGl0aWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBlZGdlcm91dGVyc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkVkZ2UgUm91dGVyczwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pdGVtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1jaXJjbGUgZXJwb2xpY2llc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPkVkZ2UgUm91dGVyIFBvbGljaWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWNpcmNsZSBzZXJ2aWNlZXJwb2xpY2llc1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtdGV4dFwiPlNlcnZpY2UgUm91dGVyIFBvbGljaWVzPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RlLWV4cGFuZC1oZWxwXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxlZ2VuZC1pY29uLXRleHQgbGVnZW5kLWFzc29jaWF0ZWQtbm9kZXNcIj5WaWV3IEFzc29jaWF0ZWQgTm9kZXM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWljb24tcG9pbnRlclwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidG9wb3RpcFwiIGlkPVwidG9vbHRpcFwiPjwvZGl2PlxuICAgICAgPHN2ZyBzdHlsZT0ncG9pbnRlci1ldmVudHM6YWxsJyBpZD1cIk5ldHdvcmtWaXN1YWxpemVyU1ZHXCI+PC9zdmc+XG4gICAgICA8bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG4iXX0=