tango-app-ui-store-builder 1.0.47 → 1.0.49

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 (54) hide show
  1. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +39 -19
  2. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +233 -138
  3. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +4 -2
  4. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +4 -2
  5. package/esm2022/lib/components/fixture-template/template-basic-details/template-basic-details.component.mjs +40 -4
  6. package/esm2022/lib/components/fixture-template/template-products/template-products.component.mjs +3 -3
  7. package/esm2022/lib/components/fixture-template/template-summary/template-summary.component.mjs +3 -3
  8. package/esm2022/lib/components/fixture-template/template-vms/template-vms.component.mjs +108 -79
  9. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +7 -3
  10. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +4 -2
  11. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +27 -4
  12. package/esm2022/lib/components/manage-store-plano/template-products/template-products.component.mjs +3 -3
  13. package/esm2022/lib/components/manage-store-plano/template-vms/template-vms.component.mjs +10 -14
  14. package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +3 -3
  15. package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +3 -3
  16. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +4 -2
  17. package/esm2022/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.mjs +11 -5
  18. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +14 -9
  19. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.mjs +39 -7
  20. package/esm2022/lib/components/planogram/merch-compliance/zone-products/zone-products.component.mjs +18 -5
  21. package/esm2022/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.mjs +68 -0
  22. package/esm2022/lib/components/planogram/plano-analytics/date-range-picker/date-range-picker.component.mjs +5 -5
  23. package/esm2022/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.mjs +649 -0
  24. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +1197 -25
  25. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +14 -7
  26. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +8 -4
  27. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +17 -9
  28. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +3 -3
  29. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -2
  30. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -2
  31. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  32. package/esm2022/lib/services/store-builder.service.mjs +4 -1
  33. package/esm2022/lib/tango-store-builder.module.mjs +8 -2
  34. package/fesm2022/tango-app-ui-store-builder.mjs +2996 -834
  35. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  36. package/lib/components/create-fixture/create-fixture.component.d.ts +15 -14
  37. package/lib/components/fixture-template/template-basic-details/template-basic-details.component.d.ts +2 -0
  38. package/lib/components/fixture-template/template-vms/template-vms.component.d.ts +12 -12
  39. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +2 -2
  40. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +4 -4
  41. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +2 -0
  42. package/lib/components/manage-store-plano/template-vms/template-vms.component.d.ts +0 -1
  43. package/lib/components/planogram/merch-compliance/product-locator/misplaced-product-fixture/misplaced-product-fixture.component.d.ts +4 -2
  44. package/lib/components/planogram/merch-compliance/product-locator/product-locator.component.d.ts +3 -2
  45. package/lib/components/planogram/merch-compliance/product-locator/product-zone-locator/product-zone-locator.component.d.ts +10 -3
  46. package/lib/components/planogram/merch-compliance/zone-products/zone-products.component.d.ts +4 -2
  47. package/lib/components/planogram/plano-analytics/analytics-popup/analytics-popup.component.d.ts +25 -0
  48. package/lib/components/planogram/plano-analytics/fixture-analytics/fixture-analytics.component.d.ts +94 -0
  49. package/lib/components/planogram/plano-analytics/plano-analytics.component.d.ts +76 -3
  50. package/lib/components/planogram/plano-details-parent/plano-details-parent.component.d.ts +3 -2
  51. package/lib/interfaces/fixture-library.interface.d.ts +1 -1
  52. package/lib/services/store-builder.service.d.ts +1 -0
  53. package/lib/tango-store-builder.module.d.ts +26 -24
  54. package/package.json +1 -1
@@ -487,7 +487,9 @@ export class TemplateTreeComponent {
487
487
  let innerBottomText;
488
488
  // ? `${mf?.fixtureName} - ${mf?.fixtureCategory} - ${mf?.fixtureWidth.value} ${mf?.fixtureWidth.unit}`
489
489
  const textContent = isMaster
490
- ? (mf?.fixtureName.includes('ft') ? `${mf?.fixtureName}` : `${mf?.fixtureName} - ${mf?.fixtureCategory} - ${mf?.fixtureWidth.value} ${mf?.fixtureWidth.unit}`)
490
+ ? mf?.fixtureName.includes("ft")
491
+ ? `${mf?.fixtureName}`
492
+ : `${mf?.fixtureName} - ${mf?.fixtureCategory} - ${mf?.fixtureWidth.value} ${mf?.fixtureWidth.unit}`
491
493
  : `${mf?.fixtureName}`;
492
494
  const createBottomText = (fs) => new fabric.Textbox(textContent, {
493
495
  left: topX + topWidth / 2,
@@ -1055,7 +1057,9 @@ export class TemplateTreeComponent {
1055
1057
  stroke: "transparent",
1056
1058
  fill: "transparent",
1057
1059
  });
1058
- const bottomTextContent = new fabric.Textbox(`Shelves - ${mf.shelfConfig.length} . Products - ${mf.fixtureCapacity} . VM - ${mf.vmConfig.length}`, {
1060
+ const actualShelfCount = mf?.shelfConfig?.filter((s) => s.shelfType != "vmonly")
1061
+ ?.length ?? 0;
1062
+ const bottomTextContent = new fabric.Textbox(`Shelves - ${actualShelfCount} . Products - ${mf.fixtureCapacity} . VM - ${mf.vmConfig.length}`, {
1059
1063
  left: bottomX + bottomWidth / 2,
1060
1064
  top: bottomY + bottomHeight / 2,
1061
1065
  fontSize: 5,
@@ -1258,4 +1262,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1258
1262
  type: ViewChild,
1259
1263
  args: ["templateCanvas", { static: false }]
1260
1264
  }] } });
1261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS10cmVlL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1uRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7OztBQVF4SCxNQUFNLE9BQU8scUJBQXFCO0lBMEJ0QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0JELFFBQVEsR0FBdUIsT0FBTyxDQUFDO0lBQ3ZDLFFBQVEsQ0FBVSxDQUFDLHVEQUF1RDtJQUMxRSxpQkFBaUIsQ0FBTyxDQUFDLDJDQUEyQztJQUNwRSxVQUFVLENBQVMsQ0FBQywwQ0FBMEM7SUFHdkUsUUFBUSxDQUFpQztJQUN6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxF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RSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM5QztZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDdEIsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksMEJBQTBCLENBQ2hELENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0E1aURVLHFCQUFxQjs0RkFBckIscUJBQXFCLHVUQ3ZCbEMsdWpEQTRCQTs7NEZETGEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJO2dNQUdQLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixRQUFRO3NCQURQLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImZpeHR1cmUtdGVtcGxhdGUtdHJlZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSB2aWV3TW9kZTogXCJncm91cFwiIHwgXCJtYXN0ZXJcIiA9IFwiZ3JvdXBcIjtcclxuICBASW5wdXQoKSBjbGllbnRJZD86IHN0cmluZzsgLy8gVXNlZCB0byBmZXRjaCBhbGwgbWFzdGVycyB3aGVuIG1vZGUgaXMgc2V0IHRvIGdyb3VwLlxyXG4gIEBJbnB1dCgpIG1hc3RlckZpeHR1cmVEYXRhPzogYW55OyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBtYXN0ZXIuXHJcbiAgQElucHV0KCkgYWxsRml4dHVyZT86IGFueVtdOyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBzdG9yZS5cclxuXHJcbiAgQFZpZXdDaGlsZChcInRlbXBsYXRlQ2FudmFzXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGNhbnZhc0VsITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuXHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcblxyXG4gIGFsbE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzdWJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcblxyXG4gIHNlbGVjdGVkR3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHRoaXMuY2RuVXJsID0gZS5wbGFub2dyYW1DRE47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5jYW52YXNFbD8ubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBzZWxlY3Rpb25GdWxseUNvbnRhaW5lZDogdHJ1ZSxcclxuICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICB0YXJnZXRGaW5kVG9sZXJhbmNlOiA1LFxyXG4gICAgICBoZWlnaHQ6IDYwMCxcclxuICAgICAgd2lkdGg6IDgwMCxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpO1xyXG5cclxuICAgIGZyb21FdmVudCh3aW5kb3csIFwicmVzaXplXCIpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCkpO1xyXG5cclxuICAgIHRoaXMuc2V0dXBab29tSGFuZGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLmJ1aWxkVHJlZVZpZXcoKTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgYXN5bmMgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG9wdC50YXJnZXQgYXMgYW55O1xyXG4gICAgICBjb25zdCBjaGlsZE5hbWUgPSBvcHQuc3ViVGFyZ2V0cz8uWzBdPy5uYW1lO1xyXG5cclxuICAgICAgaWYgKCFjaGlsZE5hbWUpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChjaGlsZE5hbWUgPT09IFwiZWRpdEljb25cIikge1xyXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybUVkaXQocGFyZW50LnN0b3JlQ291bnQpKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzXCJdLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IHBhcmVudC5maXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjaGlsZE5hbWUgPT09IFwiY29weUljb25cIikge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9XHJcbiAgICAgICAgICBwYXJlbnQudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiID8gcGFyZW50IDogb3B0LnN1YlRhcmdldHM/LlswXS5ncm91cDtcclxuICAgICAgICB0aGlzLm9uRHVwbGljYXRlKHRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUVkaXQoY291bnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGNvdW50IDw9IDApIHJldHVybiB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBgRWRpdCB0ZW1wbGF0ZWA7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFlvdSBhcmUgYWJvdXQgdG8gZWRpdCBhbiBhY3RpdmUgdGVtcGxhdGUuIFBsZWFzZSByZXZpZXcgYW5kIHB1Ymxpc2ggdGhlIGNoYW5nZXNgO1xyXG4gICAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnVpbGRUcmVlVmlldygpIHtcclxuICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcImdyb3VwXCIgJiYgdGhpcy5jbGllbnRJZCkge1xyXG4gICAgICB0aGlzLmdldE1hc3RlclRlbXBsYXRlTGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcIm1hc3RlclwiICYmIHRoaXMubWFzdGVyRml4dHVyZURhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YS5faWQ7XHJcblxyXG4gICAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICAgIGxldCB4ID0gY2FudmFzV2lkdGggLyAyO1xyXG4gICAgICBsZXQgeSA9IDUwO1xyXG4gICAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKHgsIHkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TWFzdGVyVGVtcGxhdGVMaXN0KCkge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRUZW1wbGF0ZVRyZWVMaXN0KHsgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcyA9IHJlcz8uZGF0YSA/PyBbXTtcclxuXHJcbiAgICAgICAgICAvLyBPbmNlIHRoZSBtYXN0ZXIgdGVtcGxhdGUgaXMgZmV0Y2hlZCwgcmVuZGVyIHRoZSBncm91cCBuYW1lcy5cclxuICAgICAgICAgIHRoaXMucmVuZGVyR3JvdXBOYW1lcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgZ2V0TWFzdGVyVGVtcGxhdGVMaXN0IFtFUlJdOiBcIiwgZXJyKTtcclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMiwgTWF0aC5taW4oem9vbSwgMykpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeDogZS5vZmZzZXRYLFxyXG4gICAgICAgICAgICB5OiBlLm9mZnNldFksXHJcbiAgICAgICAgICB9IGFzIGZhYnJpYy5Qb2ludCxcclxuICAgICAgICAgIHpvb21cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbih6b29tICsgMC4yLCAzKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1heCh6b29tIC0gMC4yLCAwLjIpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzbW9vdGhab29tKHRhcmdldFpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IGZhYnJpYy5Qb2ludChcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDIsXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGN1cnJlbnRab29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgY29uc3Qgc3RlcHMgPSAxMDtcclxuICAgIGNvbnN0IHN0ZXBTaXplID0gKHRhcmdldFpvb20gLSBjdXJyZW50Wm9vbSkgLyBzdGVwcztcclxuICAgIGxldCBzdGVwID0gMDtcclxuXHJcbiAgICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xyXG4gICAgICBpZiAoc3RlcCA8IHN0ZXBzKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCBjdXJyZW50Wm9vbSArIHN0ZXBTaXplICogKHN0ZXAgKyAxKSk7XHJcbiAgICAgICAgc3RlcCsrO1xyXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShhbmltYXRlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChjZW50ZXIsIHRhcmdldFpvb20pO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGFuaW1hdGUoKTtcclxuICB9XHJcblxyXG4gIHJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpIHtcclxuICAgIGNvbnN0IGNhbnZhc0NvbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICBcInRyZWUtY2FudmFzLWNhcmRcIlxyXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChjYW52YXNDb2wpIHtcclxuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXNDb2wub2Zmc2V0V2lkdGggLSAzMjtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2FudmFzQ29sLm9mZnNldEhlaWdodCAtIDMyO1xyXG4gICAgICB0aGlzLmNoYW5nZUNhbnZhc1NpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VDYW52YXNTaXplKG5ld1dpZHRoOiBudW1iZXIsIG5ld0hlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jYW52YXNFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGNhbnZhc0VsZW1lbnQud2lkdGggPSBuZXdXaWR0aDtcclxuICAgIGNhbnZhc0VsZW1lbnQuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKG5ld1dpZHRoKTtcclxuICAgIHRoaXMuY2FudmFzLnNldEhlaWdodChuZXdIZWlnaHQpO1xyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJHcm91cE5hbWVzKCkge1xyXG4gICAgY29uc3QgbWFzdGVyR3JvdXBOYW1lcyA9IEFycmF5LmZyb20oXHJcbiAgICAgIG5ldyBTZXQoXHJcbiAgICAgICAgdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXNcclxuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiICYmIGYudGVtcGxhdGVHcm91cE5hbWUpXHJcbiAgICAgICAgICAubWFwKChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lKVxyXG4gICAgICApXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghbWFzdGVyR3JvdXBOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJAQCB+IHJlbmRlckdyb3VwTmFtZXMgW0VSUl06IChub2UgZ3JvdXAgbmFtZXMgZm91bmQpOiBcIixcclxuICAgICAgICBtYXN0ZXJHcm91cE5hbWVzXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID8/PSBtYXN0ZXJHcm91cE5hbWVzWzBdO1xyXG5cclxuICAgIGNvbnN0IHkgPSA1MDtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBtYXN0ZXJHcm91cE5hbWVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgaWYgKCFnKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gZztcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMjtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAzMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxNjtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxyXG4gICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1haW5UZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IG1haW5UZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gMzA7XHJcbiAgICAgIGNvbnN0IHJlY3RUb3AgPSAxODtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5SZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0Y4RjlGQ1wiIDogXCIjZmZmXCIsXHJcbiAgICAgICAgc3Ryb2tlOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0FGQjVEOVwiIDogXCIjRDBENUREXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1haW5UZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQgKyBwYWRkaW5nWCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AgKyAocmVjdEhlaWdodCAtIG1haW5UZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVXID0gMzY7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUggPSAxODtcclxuICAgICAgY29uc3QgYnViYmxlTGVmdCA9IHJlY3RMZWZ0ICsgcmVjdFdpZHRoIC8gMiAtIGJ1YmJsZVcgLyAyO1xyXG4gICAgICBjb25zdCBidWJibGVUb3AgPSByZWN0SGVpZ2h0ICsgYnViYmxlSCAvIDI7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNCxcclxuICAgICAgICByeTogNCxcclxuICAgICAgICB3aWR0aDogYnViYmxlVyxcclxuICAgICAgICBoZWlnaHQ6IGJ1YmJsZUgsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiM4Mzg5YzVcIiA6IFwiIzk4QTJCM1wiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBDb3VudCA9IHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gZyAmJiBtLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIlxyXG4gICAgICApLmxlbmd0aDtcclxuXHJcbiAgICAgIGNvbnN0IG51bWJlclRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQoZ3JvdXBDb3VudC50b1N0cmluZygpLCB7XHJcbiAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgZmlsbDogXCIjZmZmXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjcwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0ICsgYnViYmxlVyAvIDIsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AgKyBidWJibGVIIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgICAgW21haW5SZWN0LCBtYWluVGV4dCwgYnViYmxlUmVjdCwgbnVtYmVyVGV4dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIH1cclxuICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgICAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgbWFzdGVyQ291bnQ6IG51bWJlcjtcclxuICAgICAgICBtYWluUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgYnViYmxlUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBncm91cC5ncm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgZ3JvdXAubWFzdGVyQ291bnQgPSBncm91cENvdW50O1xyXG4gICAgICBncm91cC5tYWluUmVjdCA9IG1haW5SZWN0O1xyXG4gICAgICBncm91cC5idWJibGVSZWN0ID0gYnViYmxlUmVjdDtcclxuXHJcbiAgICAgIGdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5wcmV2ZW50Q2xpY2spIHJldHVybjtcclxuICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHByZXZHcm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgICAgICAob2JqIGFzIGFueSkuZ3JvdXBOYW1lID09PSB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lXHJcbiAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChwcmV2R3JvdXApIHtcclxuICAgICAgICAgIHByZXZHcm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNmZmZmZmZcIiwgc3Ryb2tlOiBcIiNEMEQ1RERcIiB9KTtcclxuICAgICAgICAgIHByZXZHcm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzk4QTJCM1wiIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjRjhGOUZDXCIsIHN0cm9rZTogXCIjQUZCNUQ5XCIgfSk7XHJcbiAgICAgICAgZ3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM4Mzg5YzVcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgYm90aCBtYXN0ZXJzIGFuZCBzdWJzIGFycm93cywgYmVmb3JlIHJlbmRlcmluZyBuZXcgc2V0LlxyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSk7XHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID0gbGFiZWw7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBvcHQudGFyZ2V0O1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0IGluc3RhbmNlb2YgZmFicmljLkdyb3VwKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRHcm91cCA9IHRhcmdldCBhcyBmYWJyaWMuR3JvdXA7XHJcbiAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShwYXJlbnRHcm91cCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBwYXJlbnRHcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuXHJcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBsZXQgeCA9IChjYW52YXNXaWR0aCAtIHRvdGFsV2lkdGgpIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogeCwgdG9wOiB5IH0pO1xyXG4gICAgICB4ICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgICAgdGhpcy5jYW52YXMuYWRkKGdyb3VwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCA9IGdyb3Vwc1swXTtcclxuXHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyhneCwgZ3kgKyA1MCwgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlck1hc3RlckZpeHR1cmVzKHg6IG51bWJlciwgeTogbnVtYmVyLCBncm91cD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwibWFzdGVyXCIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyA9IFt0aGlzLm1hc3RlckZpeHR1cmVEYXRhXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YS5faWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgIChmKSA9PlxyXG4gICAgICAgICAgZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgJiZcclxuICAgICAgICAgIGYudGVtcGxhdGVHcm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlc1swXS5faWQ7XHJcbiAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcIm1hc3RlclwiKTtcclxuICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hc3RlcnM6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyxcclxuICAgICAgeCxcclxuICAgICAgeVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSAhPT0gXCJtYXN0ZXJcIilcclxuICAgICAgbWFzdGVycy5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZ3JvdXBOYW1lKSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCA9IG1hc3RlcnNbMF07XHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCwgZ3gsIGd5ICsgNTApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyU3ViRml4dHVyZXMoZ3JvdXA6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICAgICAuZ2V0VGVtcGxhdGVUcmVlTGlzdCh7IG1hc3RlcklkOiB0aGlzLnNlbGVjdGVkTWFzdGVySWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1YlRlbXBsYXRlcyA9IHJlcz8uZGF0YSA/PyBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLnN1YlRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViOiBhbnlbXSA9IGF3YWl0IHRoaXMucmVuZGVyRml4dHVyZXMoXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJUZW1wbGF0ZXMsXHJcbiAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICAgIGdyb3VwXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzdWIuZm9yRWFjaCgobSkgPT4gdGhpcy5kcmF3QXJyb3coZ3JvdXAsIG0sIGdyb3VwLmZpeHR1cmVJZCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoXCJNYXN0ZXIgZG9lcyBub3QgaGF2ZSBhbnkgdmFyaWFudFwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QgW0VSUl06IFwiLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlckZpeHR1cmVzKFxyXG4gICAgdGVtcGxhdGVzOiBhbnlbXSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHBhcmVudEZhYnJpYz86IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgdHlwZSBGaXh0dXJlR3JvdXAgPSBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgICAgc3RvcmVDb3VudDogbnVtYmVyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBQcm9jZXNzIGFsbCB0ZW1wbGF0ZXMgaW4gcGFyYWxsZWwgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb25cclxuICAgIGNvbnN0IGdyb3VwczogRml4dHVyZUdyb3VwW10gPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGVtcGxhdGVzLm1hcChhc3luYyAobWYpID0+IHtcclxuICAgICAgICBjb25zdCBpc01hc3RlciA9IG1mLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIjtcclxuXHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICAgICAgbGV0IG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgKyAxO1xyXG4gICAgICAgIGlmIChpc01hc3Rlcikge1xyXG4gICAgICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICAgIG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgLSB0b3BIZWlnaHQgLyAyICsgMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1haW5Db250YWluZXJUb3AgPSBpc01hc3RlclxyXG4gICAgICAgICAgPyB5ICsgKCgxNSAvIDEwMCkgKiBoZWlnaHQpIC8gMiAtIDFcclxuICAgICAgICAgIDogeSAtIDE7XHJcblxyXG4gICAgICAgIGNvbnN0IG1haW5Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogbWFpbkNvbnRhaW5lclRvcCxcclxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogbWFpbkNvbnRhaW5lckhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgICAgICBjb25zdCB0b3BDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgICAgIHRvcDogdG9wWSxcclxuICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYEFzc2lnbmVkIHRvICR7bWYuc3RvcmVDb3VudCA/PyAwfSBTdG9yZXNgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG5cclxuICAgICAgICBsZXQgaW5uZXJCb3R0b21Cb3g6IGZhYnJpYy5QYXRoO1xyXG5cclxuICAgICAgICBpZiAoaXNNYXN0ZXIpIHtcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyB0b3BXaWR0aH0gJHtcclxuICAgICAgICAgICAgICBzZWNvbmRCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFl9ICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZTogXCIjNzE3QkJDXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgICBgTSAke3RvcFh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICBsZXQgaW5uZXJCb3R0b21UZXh0O1xyXG5cclxuICAgICAgICAvLyA/IGAke21mPy5maXh0dXJlTmFtZX0gLSAke21mPy5maXh0dXJlQ2F0ZWdvcnl9IC0gJHttZj8uZml4dHVyZVdpZHRoLnZhbHVlfSAke21mPy5maXh0dXJlV2lkdGgudW5pdH1gXHJcbiAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBpc01hc3RlclxyXG4gICAgICAgICAgPyAobWY/LmZpeHR1cmVOYW1lLmluY2x1ZGVzKCdmdCcpID8gYCR7bWY/LmZpeHR1cmVOYW1lfWAgOiBgJHttZj8uZml4dHVyZU5hbWV9IC0gJHttZj8uZml4dHVyZUNhdGVnb3J5fSAtICR7bWY/LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHttZj8uZml4dHVyZVdpZHRoLnVuaXR9YClcclxuICAgICAgICAgIDogYCR7bWY/LmZpeHR1cmVOYW1lfWA7XHJcblxyXG4gICAgICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0ID0gY3JlYXRlQm90dG9tVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgfSB3aGlsZSAoaW5uZXJCb3R0b21UZXh0LmhlaWdodCA+IGlubmVyQm94SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICAgICAgY29uc3QgbWlkQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IG1pZFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG1pZEhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZDb3VudCA9IG1mLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgICAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtcclxuICAgICAgICAgICAgZmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRlIG1mLmhlYWRlci5sYWJlbCB3aXRoIGVsbGlwc2lzIGlmIGl0IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG1mPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Rm9udFNpemUgPSA3O1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRGYW1pbHkgPSBcIkludGVyXCI7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Rm9udFdlaWdodCA9IFwiNjAwXCI7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0V2lkdGggPSBtaWRXaWR0aCAtIDQwOyAvLyBsZWF2ZSBzcGFjZSBmb3IgaWNvbnMgb24gcmlnaHRcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGUgd2l0aCBlbGxpcHNpcyBpZiBuZWVkZWRcclxuICAgICAgICBsZXQgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0O1xyXG4gICAgICAgIGlmIChsYWJlbFRleHQpIHtcclxuICAgICAgICAgIGxldCB0ZW1wVGV4dGJveCA9IG5ldyBmYWJyaWMuVGV4dGJveChsYWJlbFRleHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGZpcnN0Qm94VGV4dEZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBmaXJzdEJveFRleHRGb250RmFtaWx5LFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBmaXJzdEJveFRleHRGb250V2VpZ2h0LFxyXG4gICAgICAgICAgICB3aWR0aDogZmlyc3RCb3hUZXh0V2lkdGgsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRvbyB3aWRlLCB0cnVuY2F0ZSBhbmQgYWRkIGVsbGlwc2lzXHJcbiAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGxldCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICAgIC8vIEJpbmFyeSBzZWFyY2ggZm9yIG1heCBmaXR0aW5nIGxlbmd0aFxyXG4gICAgICAgICAgICBsZXQgbGVmdCA9IDA7XHJcbiAgICAgICAgICAgIGxldCByaWdodCA9IGxhYmVsVGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgbGV0IG1pZCA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcclxuICAgICAgICAgICAgICBsZXQgdGVzdFRleHQgPSBsYWJlbFRleHQuc2xpY2UoMCwgbWlkKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgIHRlbXBUZXh0Ym94LnNldCh7IHRleHQ6IHRlc3RUZXh0IH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wVGV4dGJveC5oZWlnaHQgPiBib3hIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbGVmdC0xIGlzIHRoZSBtYXggZml0dGluZyBsZW5ndGhcclxuICAgICAgICAgICAgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnQgLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChkaXNwbGF5TGFiZWwsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyA2LFxyXG4gICAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZpcnN0Qm94VGV4dEZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogZmlyc3RCb3hUZXh0Rm9udEZhbWlseSxcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IGZpcnN0Qm94VGV4dEZvbnRXZWlnaHQsXHJcbiAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogZmlyc3RCb3hUZXh0V2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJsZWZ0XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGljb25TaXplID0gMTA7XHJcbiAgICAgICAgY29uc3QgaWNvblNwYWNpbmcgPSA0O1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRCb3VuZHMgPSBmaXJzdEJveC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgICBjb25zdCBpY29uc1RvcCA9XHJcbiAgICAgICAgICBmaXJzdEJveFRleHRCb3VuZHMudG9wICsgZmlyc3RCb3hUZXh0Qm91bmRzLmhlaWdodCAvIDIgLSBpY29uU2l6ZSAvIDI7XHJcbiAgICAgICAgY29uc3QgaWNvbnNQYWRkaW5nUmlnaHQgPSA2O1xyXG4gICAgICAgIGNvbnN0IGljb25zVG90YWxXaWR0aCA9IGljb25TaXplICogMiArIGljb25TcGFjaW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zTGVmdFN0YXJ0ID1cclxuICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIGljb25zVG90YWxXaWR0aCAtIGljb25zUGFkZGluZ1JpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBlZGl0SWNvbkxlZnQgPSBpY29uc0xlZnRTdGFydDtcclxuICAgICAgICBjb25zdCBlZGl0SWNvblRvcCA9IGljb25zVG9wO1xyXG4gICAgICAgIGNvbnN0IGVkaXRJY29uUGF0aCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIFwiTTcuMTAzNTQgMS4wNjAzNUM3LjIxMTQ1IDAuOTUyNDM2IDcuMzM5NTYgMC44NjY4MzQgNy40ODA1NiAwLjgwODQzMkM3LjYyMTU1IDAuNzUwMDMgNy43NzI2NyAwLjcxOTk3IDcuOTI1MjggMC43MTk5N0M4LjA3NzkgMC43MTk5NyA4LjIyOTAyIDAuNzUwMDMgOC4zNzAwMSAwLjgwODQzMkM4LjUxMTAxIDAuODY2ODM0IDguNjM5MTIgMC45NTI0MzYgOC43NDcwMyAxLjA2MDM1QzguODU0OTUgMS4xNjgyNiA4Ljk0MDU1IDEuMjk2MzcgOC45OTg5NSAxLjQzNzM3QzkuMDU3MzUgMS41NzgzNyA5LjA4NzQxIDEuNzI5NDggOS4wODc0MSAxLjg4MjFDOS4wODc0MSAyLjAzNDcxIDkuMDU3MzUgMi4xODU4MyA4Ljk5ODk1IDIuMzI2ODJDOC45NDA1NSAyLjQ2NzgyIDguODU0OTUgMi41OTU5MyA4Ljc0NzAzIDIuNzAzODRMMy4yMDAyNCA4LjI1MDY0TDAuOTQwNDMgOC44NjY5NUwxLjU1Njc0IDYuNjA3MTVMNy4xMDM1NCAxLjA2MDM1WlwiLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBlZGl0SWNvbkxlZnQsXHJcbiAgICAgICAgICAgIHRvcDogZWRpdEljb25Ub3AsXHJcbiAgICAgICAgICAgIHNjYWxlWDogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgc2NhbGVZOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC43MDQzNTUsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUNhcDogXCJyb3VuZFwiLFxyXG4gICAgICAgICAgICBzdHJva2VMaW5lSm9pbjogXCJyb3VuZFwiLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgKGVkaXRJY29uUGF0aCBhcyBhbnkpLm5hbWUgPSBcImVkaXRJY29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvcHlJY29uTGVmdCA9IGVkaXRJY29uTGVmdCArIGljb25TaXplICsgaWNvblNwYWNpbmc7XHJcbiAgICAgICAgY29uc3QgY29weUljb25Ub3AgPSBlZGl0SWNvblRvcDtcclxuICAgICAgICBjb25zdCBjb3B5SWNvblBhdGggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBcIk0yLjA3NzM1IDUuOTkwNzdMMS42NjY0NyA1Ljk5MDc3QzEuNDQ4NTMgNS45OTA3NyAxLjIzOTUyIDUuOTA0MiAxLjA4NTQxIDUuNzUwMDlDMC45MzEzMDMgNS41OTU5OCAwLjg0NDcyNyA1LjM4Njk3IDAuODQ0NzI3IDUuMTY5MDNMMC44NDQ3MjcgMS40NzExNkMwLjg0NDcyNyAxLjI1MzIyIDAuOTMxMzAzIDEuMDQ0MjEgMS4wODU0MSAwLjg5MDA5OEMxLjIzOTUyIDAuNzM1OTkxIDEuNDQ4NTMgMC42NDk0MTQgMS42NjY0NyAwLjY0OTQxNEw1LjM2NDM0IDAuNjQ5NDE0QzUuNTgyMjggMC42NDk0MTQgNS43OTEyOSAwLjczNTk5MSA1Ljk0NTQgMC44OTAwOThDNi4wOTk1MSAxLjA0NDIxIDYuMTg2MDkgMS4yNTMyMiA2LjE4NjA5IDEuNDcxMTZMNi4xODYwOSAxLjg4MjA0TTQuNTQyNTkgMy41MjU1M0w4LjI0MDQ2IDMuNTI1NTNDOC42OTQyOSAzLjUyNTUzIDkuMDYyMiAzLjg5MzQ0IDkuMDYyMiA0LjM0NzI4TDkuMDYyMiA4LjA0NTE0QzkuMDYyMiA4LjQ5ODk4IDguNjk0MjkgOC44NjY4OSA4LjI0MDQ2IDguODY2ODlMNC41NDI1OSA4Ljg2Njg5QzQuMDg4NzUgOC44NjY4OSAzLjcyMDg0IDguNDk4OTggMy43MjA4NCA4LjA0NTE0TDMuNzIwODQgNC4zNDcyOEMzLjcyMDg0IDMuODkzNDQgNC4wODg3NSAzLjUyNTUzIDQuNTQyNTkgMy41MjU1M1pcIixcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogY29weUljb25MZWZ0LFxyXG4gICAgICAgICAgICB0b3A6IGNvcHlJY29uVG9wLFxyXG4gICAgICAgICAgICBzY2FsZVg6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgZmlsbDogXCJcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjcwNDM1NSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBzdHJva2VMaW5lQ2FwOiBcInJvdW5kXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVKb2luOiBcInJvdW5kXCIsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgKGNvcHlJY29uUGF0aCBhcyBhbnkpLm5hbWUgPSBcImNvcHlJY29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gbWY/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGgsIHNocmluayBmb250IGlmIG5lZWRlZCB0byBmaXQgd2l0aGluIHNoZWxmIGhlaWdodFxyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgICBsZXQgZm9udFNpemVMMSA9IDY7IC8vIHN0YXJ0IHNsaWdodGx5IGxhcmdlcjsgd2lsbCBzaHJpbmsgdG8gZml0XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWYuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID1cclxuICAgICAgICAgICAgICBtZi5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgICAgIC8vIEwyOiBTaW5nbGUtbGluZSB3aXRoIGVsbGlwc2lzIHdpdGhpbiBzaGVsZiByZWN0IChtaWRXaWR0aClcclxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2OyAvLyBwYWRkaW5nIGluc2lkZSBzaGVsZiByZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICAgICAgLy8gVXNlIHNpbmdsZS1saW5lIHRleHQgbWVhc3VyZW1lbnQgdG8gYXZvaWQgbXVsdGktbGluZSB3cmFwcGluZyBkdXJpbmcgbWVhc3VyZW1lbnRcclxuICAgICAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsIC8vIG1hdGNoIHNoZWxmIHJlY3Qgd2lkdGhcclxuICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcblxyXG4gICAgICAgICAgbGV0IHByZXZpb3VzWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBtZi5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICAgICAgaWYgKHpvbmUgIT09IHByZXZpb3VzWm9uZSkge1xyXG4gICAgICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgem9uZSwgc2hlbHZlczogc2hlbHZlc0luR3JvdXAgfSA9IGdyb3VwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gc2hlbHZlc0luR3JvdXAubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IHNoZWxmRGF0YS50cmF5Um93cyB8fCAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1mLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAtIGxhYmVsUGFkZGluZyxcclxuICAgICAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkJyYW5kcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25CcmFuZHMuYWRkKGJyYW5kKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoWy4uLnNlY3Rpb25CcmFuZHNdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBmb250U2l6ZSA9IDY7XHJcbiAgICAgICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgICAgICB9IHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQ2VudGVyVGV4dCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWY/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWYudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCB2bSA9IG1mLnZtQ29uZmlnW2ldO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtPy52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9YCxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiB3aWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIGVyclxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBFcnJvciBpbiBkcmF3aW5nIFZNOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICAgICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgbWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYCR7bWY/LmZvb3Rlcj8ubGFiZWwgPyBtZi5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbVkgPSBtaWRZICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgICAgICB0b3A6IGJvdHRvbVksXHJcbiAgICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYFNoZWx2ZXMgLSAke21mLnNoZWxmQ29uZmlnLmxlbmd0aH0gLiBQcm9kdWN0cyAtICAke21mLmZpeHR1cmVDYXBhY2l0eX0gLiBWTSAtICR7bWYudm1Db25maWcubGVuZ3RofWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IGJvdHRvbVggKyBib3R0b21XaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICAgICAgaGVpZ3RoOiBib3R0b21IZWlnaHQsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDaGlsZHJlbiA9IFtcclxuICAgICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgICAuLi4oIWlzTWFzdGVyID8gW3RvcENvbnRhaW5lciwgaW5uZXJUb3BCb3gsIGlubmVyVG9wVGV4dF0gOiBbXSksXHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICAgIGlubmVyQm90dG9tVGV4dCxcclxuICAgICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgICAgLi4uKCFpc01hc3RlciA/IFtlZGl0SWNvblBhdGhdIDogW10pLFxyXG4gICAgICAgICAgY29weUljb25QYXRoLFxyXG4gICAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZ3JvdXBDaGlsZHJlbiwge1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgLy8gYW5nbGU6IG1mLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDBcclxuICAgICAgICB9KSBhcyBGaXh0dXJlR3JvdXA7XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBtZi5faWQ7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gbWYuZml4dHVyZVR5cGU7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmdyb3VwTmFtZSA9IG1mPy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC50ZW1wbGF0ZVR5cGUgPSBtZi50ZW1wbGF0ZVR5cGU7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm5hbWUgPSBtZi50ZW1wbGF0ZVR5cGUgPz8gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnN0b3JlQ291bnQgPSBtZj8uc3RvcmVDb3VudCA/PyAwO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5wYXJlbnRGYWJyaWMgPSBwYXJlbnRGYWJyaWM7XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNoaWxkTmFtZSA9IG9wdC5zdWJUYXJnZXRzPy5bMF0/Lm5hbWU7XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjaGlsZE5hbWUgPT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICAgICBpc01hc3RlciAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgIT09IG1mLl9pZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5wcmV2ZW50Q2xpY2tcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBtZi5faWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShcclxuICAgICAgICAgICAgICBmaXh0dXJlR3JvdXAgYXMgZmFicmljLkdyb3VwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoZml4dHVyZUdyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG4gICAgbGV0IG54ID0geCAtIHRvdGFsV2lkdGggLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiBueCwgdG9wOiB5IH0pO1xyXG4gICAgICBueCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENlbnRlckJvdHRvbShncm91cDogZmFicmljLkdyb3VwKTogeyBneDogbnVtYmVyOyBneTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXIueDtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBncm91cC50b3AhICsgZ3JvdXAuaGVpZ2h0ITtcclxuICAgIHJldHVybiB7IGd4OiBjZW50ZXJYLCBneTogYm90dG9tWSB9O1xyXG4gIH1cclxuXHJcbiAgY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JvdXBzVG9SZW1vdmUgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgKG9iaiBhcyBhbnkpLnRlbXBsYXRlVHlwZSA9PT0gdGVtcGxhdGVUeXBlXHJcbiAgICAgICk7XHJcblxyXG4gICAgaWYgKGdyb3Vwc1RvUmVtb3ZlKSB7XHJcbiAgICAgIGdyb3Vwc1RvUmVtb3ZlLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd0Fycm93KGZyb21Hcm91cDogZmFicmljLkdyb3VwLCB0b0dyb3VwOiBmYWJyaWMuR3JvdXAsIGFycm93SWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgZnJvbSA9IGZyb21Hcm91cC5hQ29vcmRzID8/IGZyb21Hcm91cC5jYWxjT0Nvb3JkcygpO1xyXG4gICAgY29uc3QgdG8gPSB0b0dyb3VwLmFDb29yZHMgPz8gdG9Hcm91cC5jYWxjT0Nvb3JkcygpO1xyXG5cclxuICAgIGNvbnN0IGZyb21YID0gKGZyb20uYmwueCArIGZyb20uYnIueCkgLyAyO1xyXG4gICAgY29uc3QgZnJvbVkgPSAoZnJvbS5ibC55ICsgZnJvbS5ici55KSAvIDI7XHJcblxyXG4gICAgY29uc3QgdG9YID0gKHRvLnRsLnggKyB0by50ci54KSAvIDI7XHJcbiAgICBjb25zdCB0b1kgPSAodG8udGwueSArIHRvLnRyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCBob3Jpem9udGFsT2Zmc2V0ID0gdG9YIC0gZnJvbVg7XHJcbiAgICBjb25zdCB2ZXJ0aWNhbE9mZnNldCA9IHRvWSAtIGZyb21ZO1xyXG4gICAgY29uc3QgY3VydmVTaXplID0gMTQ7XHJcblxyXG4gICAgbGV0IHBhdGhEYXRhID0gXCJcIjtcclxuXHJcbiAgICBpZiAoTWF0aC5hYnMoaG9yaXpvbnRhbE9mZnNldCkgPCA1KSB7XHJcbiAgICAgIC8vIERpcmVjdCB2ZXJ0aWNhbCBsaW5lXHJcbiAgICAgIHBhdGhEYXRhID0gYE0gJHtmcm9tWH0gJHtmcm9tWX0gTCAke3RvWH0gJHt0b1l9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IG1pZFkgPSBmcm9tWSArIHZlcnRpY2FsT2Zmc2V0IC8gMjtcclxuICAgICAgY29uc3QgZGlyZWN0aW9uID0gaG9yaXpvbnRhbE9mZnNldCA+IDAgPyAxIDogLTE7XHJcblxyXG4gICAgICBjb25zdCBjdXJ2ZTFYID0gZnJvbVggKyBkaXJlY3Rpb24gKiBjdXJ2ZVNpemU7XHJcbiAgICAgIGNvbnN0IGN1cnZlMlggPSB0b1ggLSBkaXJlY3Rpb24gKiBjdXJ2ZVNpemU7XHJcblxyXG4gICAgICBwYXRoRGF0YSA9IFtcclxuICAgICAgICBgTSAke2Zyb21YfSAke2Zyb21ZfWAsXHJcbiAgICAgICAgYEwgJHtmcm9tWH0gJHttaWRZIC0gY3VydmVTaXplfWAsXHJcbiAgICAgICAgYFEgJHtmcm9tWH0gJHttaWRZfSAke2N1cnZlMVh9ICR7bWlkWX1gLFxyXG4gICAgICAgIGBMICR7Y3VydmUyWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYFEgJHt0b1h9ICR7bWlkWX0gJHt0b1h9ICR7bWlkWSArIGN1cnZlU2l6ZX1gLFxyXG4gICAgICAgIGBMICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICBdLmpvaW4oXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycm93TGluZSA9IG5ldyBmYWJyaWMuUGF0aChwYXRoRGF0YSwge1xyXG4gICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMS44LFxyXG4gICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBBcnJvd2hlYWRcclxuICAgIGNvbnN0IGFuZ2xlID0gTWF0aC5hdGFuMih0b1kgLSAodG9ZIC0gMTApLCB0b1ggLSB0b1gpO1xyXG4gICAgY29uc3QgaGVhZGxlbiA9IDEwO1xyXG4gICAgY29uc3QgYXJyb3dIZWFkID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBbXHJcbiAgICAgICAgYE0gJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgICAgYEwgJHt0b1ggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNSl9ICR7XHJcbiAgICAgICAgICB0b1kgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNSlcclxuICAgICAgICB9YCxcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSArIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSArIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICBdLmpvaW4oXCIgXCIpLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBcIiNBRkI1RDlcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMS44LFxyXG4gICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdyb3VwaW5nIGJvdGggbGluZSBhbmQgYXJyb3doZWFkXHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3dMaW5lLCBhcnJvd0hlYWRdLCB7XHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgYXJyb3dJZDogc3RyaW5nIH07XHJcblxyXG4gICAgLy8gQXR0YWNoIGN1c3RvbSBhcnJvdyBJRFxyXG4gICAgYXJyb3dHcm91cC5hcnJvd0lkID0gYXJyb3dJZDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYXJyb3dHcm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFycm93QnlJZChhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT4gb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmIChvYmogYXMgYW55KS5hcnJvd0lkID09PSBhcnJvd0lkXHJcbiAgICAgICk7XHJcblxyXG4gICAgaWYgKGFycm93R3JvdXApIHtcclxuICAgICAgYXJyb3dHcm91cC5mb3JFYWNoKChncm91cCkgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGdyb3VwKSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHVwbGljYXRlKGZpeHR1cmU6IGFueSkge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5kdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUoeyB0ZW1wbGF0ZUlkOiBmaXh0dXJlLmZpeHR1cmVJZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpeHR1cmUgPVxyXG4gICAgICAgICAgICAgIGZpeHR1cmUudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiXHJcbiAgICAgICAgICAgICAgICA/IGZpeHR1cmVcclxuICAgICAgICAgICAgICAgIDogZml4dHVyZS5wYXJlbnRGYWJyaWM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gY3VycmVudEZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oY3VycmVudEZpeHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclN1YkZpeHR1cmVzKGN1cnJlbnRGaXh0dXJlLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5kYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHwgXCJGYWlsZWQgdG8gY3JlYXRlIHZhcmlhbnRcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUgW2Vycl06XCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwidHJlZS1jYW52YXMtY2FyZFwiIGNsYXNzPVwidy0xMDAgcC02XCI+XHJcbiAgPGNhbnZhcyBpZD1cInRlbXBsYXRlLWNhbnZhc1wiICN0ZW1wbGF0ZUNhbnZhcz48L2NhbnZhcz5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjQuODQzMVwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzYxNzJGM1wiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMCBtZS0zXCI+TWFzdGVyIFRlbXBsYXRlPC9wPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDExIDExXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiNS40NDQ2NlwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzMzQjVGRlwiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMFwiPlZhcmlhbnQvQ2hpbGQgVGVtcGxhdGU8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ6b29tXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLWluXCIgKGNsaWNrKT1cInpvb21JbigpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDVWMTlNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLW91dFwiIChjbGljayk9XCJ6b29tT3V0KClcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
1265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS10cmVlL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1uRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7OztBQVF4SCxNQUFNLE9BQU8scUJBQXFCO0lBMEJ0QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0JELFFBQVEsR0FBdUIsT0FBTyxDQUFDO0lBQ3ZDLFFBQVEsQ0FBVSxDQUFDLHVEQUF1RDtJQUMxRSxpQkFBaUIsQ0FBTyxDQUFDLDJDQUEyQztJQUNwRSxVQUFVLENBQVMsQ0FBQywwQ0FBMEM7SUFHdkUsUUFBUSxDQUFpQztJQUN6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxF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QUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM5QztZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDdEIsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksMEJBQTBCLENBQ2hELENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0FuakRVLHFCQUFxQjs0RkFBckIscUJBQXFCLHVUQ3ZCbEMsdWpEQTRCQTs7NEZETGEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJO2dNQUdQLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixRQUFRO3NCQURQLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImZpeHR1cmUtdGVtcGxhdGUtdHJlZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSB2aWV3TW9kZTogXCJncm91cFwiIHwgXCJtYXN0ZXJcIiA9IFwiZ3JvdXBcIjtcclxuICBASW5wdXQoKSBjbGllbnRJZD86IHN0cmluZzsgLy8gVXNlZCB0byBmZXRjaCBhbGwgbWFzdGVycyB3aGVuIG1vZGUgaXMgc2V0IHRvIGdyb3VwLlxyXG4gIEBJbnB1dCgpIG1hc3RlckZpeHR1cmVEYXRhPzogYW55OyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBtYXN0ZXIuXHJcbiAgQElucHV0KCkgYWxsRml4dHVyZT86IGFueVtdOyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBzdG9yZS5cclxuXHJcbiAgQFZpZXdDaGlsZChcInRlbXBsYXRlQ2FudmFzXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGNhbnZhc0VsITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuXHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcblxyXG4gIGFsbE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzdWJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcblxyXG4gIHNlbGVjdGVkR3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzRWw/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKTtcclxuXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCBcInJlc2l6ZVwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpKTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5idWlsZFRyZWVWaWV3KCk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIGFzeW5jIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBvcHQudGFyZ2V0IGFzIGFueTtcclxuICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgIGlmICghY2hpbGROYW1lKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAoY2hpbGROYW1lID09PSBcImVkaXRJY29uXCIpIHtcclxuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1FZGl0KHBhcmVudC5zdG9yZUNvdW50KSkpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgIFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlsc1wiXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBwYXJlbnQuZml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgIGlzRWRpdDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoaWxkTmFtZSA9PT0gXCJjb3B5SWNvblwiKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID1cclxuICAgICAgICAgIHBhcmVudC50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgPyBwYXJlbnQgOiBvcHQuc3ViVGFyZ2V0cz8uWzBdLmdyb3VwO1xyXG4gICAgICAgIHRoaXMub25EdXBsaWNhdGUodGFyZ2V0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRWRpdChjb3VudDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoY291bnQgPD0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IGBFZGl0IHRlbXBsYXRlYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgWW91IGFyZSBhYm91dCB0byBlZGl0IGFuIGFjdGl2ZSB0ZW1wbGF0ZS4gUGxlYXNlIHJldmlldyBhbmQgcHVibGlzaCB0aGUgY2hhbmdlc2A7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVWaWV3KCkge1xyXG4gICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwiZ3JvdXBcIiAmJiB0aGlzLmNsaWVudElkKSB7XHJcbiAgICAgIHRoaXMuZ2V0TWFzdGVyVGVtcGxhdGVMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwibWFzdGVyXCIgJiYgdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSB0aGlzLm1hc3RlckZpeHR1cmVEYXRhLl9pZDtcclxuXHJcbiAgICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgICAgbGV0IHggPSBjYW52YXNXaWR0aCAvIDI7XHJcbiAgICAgIGxldCB5ID0gNTA7XHJcbiAgICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoeCwgeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QoKSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldFRlbXBsYXRlVHJlZUxpc3QoeyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzID0gcmVzPy5kYXRhID8/IFtdO1xyXG5cclxuICAgICAgICAgIC8vIE9uY2UgdGhlIG1hc3RlciB0ZW1wbGF0ZSBpcyBmZXRjaGVkLCByZW5kZXIgdGhlIGdyb3VwIG5hbWVzLlxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJHcm91cE5hbWVzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QgW0VSUl06IFwiLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldHVwWm9vbUhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp3aGVlbFwiLCAob3B0OiBmYWJyaWMuVEV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuXHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG5cclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4yLCBNYXRoLm1pbih6b29tLCAzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB4OiBlLm9mZnNldFgsXHJcbiAgICAgICAgICAgIHk6IGUub2Zmc2V0WSxcclxuICAgICAgICAgIH0gYXMgZmFicmljLlBvaW50LFxyXG4gICAgICAgICAgem9vbSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbih6b29tICsgMC4yLCAzKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1heCh6b29tIC0gMC4yLCAwLjIpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzbW9vdGhab29tKHRhcmdldFpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IGZhYnJpYy5Qb2ludChcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDIsXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMixcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHN0ZXBzID0gMTA7XHJcbiAgICBjb25zdCBzdGVwU2l6ZSA9ICh0YXJnZXRab29tIC0gY3VycmVudFpvb20pIC8gc3RlcHM7XHJcbiAgICBsZXQgc3RlcCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0ZXAgPCBzdGVwcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgY3VycmVudFpvb20gKyBzdGVwU2l6ZSAqIChzdGVwICsgMSkpO1xyXG4gICAgICAgIHN0ZXArKztcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCB0YXJnZXRab29tKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSB7XHJcbiAgICBjb25zdCBjYW52YXNDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgXCJ0cmVlLWNhbnZhcy1jYXJkXCIsXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGNhbnZhc0NvbCkge1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbC5vZmZzZXRXaWR0aCAtIDMyO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXNDb2wub2Zmc2V0SGVpZ2h0IC0gMzI7XHJcbiAgICAgIHRoaXMuY2hhbmdlQ2FudmFzU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUNhbnZhc1NpemUobmV3V2lkdGg6IG51bWJlciwgbmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSB0aGlzLmNhbnZhc0VsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzRWxlbWVudC53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgY2FudmFzRWxlbWVudC5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0V2lkdGgobmV3V2lkdGgpO1xyXG4gICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KG5ld0hlaWdodCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHRvUGl4ZWxzKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KSB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDIpKTtcclxuICB9XHJcblxyXG4gIHJlbmRlckdyb3VwTmFtZXMoKSB7XHJcbiAgICBjb25zdCBtYXN0ZXJHcm91cE5hbWVzID0gQXJyYXkuZnJvbShcclxuICAgICAgbmV3IFNldChcclxuICAgICAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlc1xyXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgJiYgZi50ZW1wbGF0ZUdyb3VwTmFtZSlcclxuICAgICAgICAgIC5tYXAoKG0pID0+IG0udGVtcGxhdGVHcm91cE5hbWUpLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIW1hc3Rlckdyb3VwTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwiQEAgfiByZW5kZXJHcm91cE5hbWVzIFtFUlJdOiAobm9lIGdyb3VwIG5hbWVzIGZvdW5kKTogXCIsXHJcbiAgICAgICAgbWFzdGVyR3JvdXBOYW1lcyxcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPz89IG1hc3Rlckdyb3VwTmFtZXNbMF07XHJcblxyXG4gICAgY29uc3QgeSA9IDUwO1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG4gICAgbGV0IHRvdGFsV2lkdGggPSAwO1xyXG5cclxuICAgIG1hc3Rlckdyb3VwTmFtZXMuZm9yRWFjaCgoZykgPT4ge1xyXG4gICAgICBpZiAoIWcpIHJldHVybjtcclxuICAgICAgY29uc3QgbGFiZWwgPSBnO1xyXG4gICAgICBjb25zdCBmb250U2l6ZSA9IDEyO1xyXG4gICAgICBjb25zdCBwYWRkaW5nWCA9IDMwO1xyXG4gICAgICBjb25zdCBwYWRkaW5nWSA9IDE2O1xyXG5cclxuICAgICAgY29uc3QgbWFpblRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQobGFiZWwsIHtcclxuICAgICAgICBmb250U2l6ZTogZm9udFNpemUsXHJcbiAgICAgICAgZmlsbDogXCIjMzYzRjcyXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWFpblRleHQud2lkdGghICsgMiAqIHBhZGRpbmdYO1xyXG4gICAgICBjb25zdCByZWN0SGVpZ2h0ID0gbWFpblRleHQuaGVpZ2h0ISArIDIgKiBwYWRkaW5nWTtcclxuICAgICAgY29uc3QgcmVjdExlZnQgPSAzMDtcclxuICAgICAgY29uc3QgcmVjdFRvcCA9IDE4O1xyXG5cclxuICAgICAgY29uc3QgbWFpblJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIHJ4OiA2LFxyXG4gICAgICAgIHJ5OiA2LFxyXG4gICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgIGZpbGw6IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsID8gXCIjRjhGOUZDXCIgOiBcIiNmZmZcIixcclxuICAgICAgICBzdHJva2U6IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsID8gXCIjQUZCNUQ5XCIgOiBcIiNEMEQ1RERcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICBsZWZ0OiByZWN0TGVmdCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbWFpblRleHQuc2V0KHtcclxuICAgICAgICBsZWZ0OiByZWN0TGVmdCArIHBhZGRpbmdYLFxyXG4gICAgICAgIHRvcDogcmVjdFRvcCArIChyZWN0SGVpZ2h0IC0gbWFpblRleHQuaGVpZ2h0ISkgLyAyLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGJ1YmJsZVcgPSAzNjtcclxuICAgICAgY29uc3QgYnViYmxlSCA9IDE4O1xyXG4gICAgICBjb25zdCBidWJibGVMZWZ0ID0gcmVjdExlZnQgKyByZWN0V2lkdGggLyAyIC0gYnViYmxlVyAvIDI7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZVRvcCA9IHJlY3RIZWlnaHQgKyBidWJibGVIIC8gMjtcclxuXHJcbiAgICAgIGNvbnN0IGJ1YmJsZVJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIHJ4OiA0LFxyXG4gICAgICAgIHJ5OiA0LFxyXG4gICAgICAgIHdpZHRoOiBidWJibGVXLFxyXG4gICAgICAgIGhlaWdodDogYnViYmxlSCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiIzgzODljNVwiIDogXCIjOThBMkIzXCIsXHJcbiAgICAgICAgbGVmdDogYnViYmxlTGVmdCxcclxuICAgICAgICB0b3A6IGJ1YmJsZVRvcCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cENvdW50ID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgIChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lID09PSBnICYmIG0udGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiLFxyXG4gICAgICApLmxlbmd0aDtcclxuXHJcbiAgICAgIGNvbnN0IG51bWJlclRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQoZ3JvdXBDb3VudC50b1N0cmluZygpLCB7XHJcbiAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgZmlsbDogXCIjZmZmXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjcwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0ICsgYnViYmxlVyAvIDIsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AgKyBidWJibGVIIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgICAgW21haW5SZWN0LCBtYWluVGV4dCwgYnViYmxlUmVjdCwgbnVtYmVyVGV4dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICAgIG1hc3RlckNvdW50OiBudW1iZXI7XHJcbiAgICAgICAgbWFpblJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ3JvdXAuZ3JvdXBOYW1lID0gbGFiZWw7XHJcbiAgICAgIGdyb3VwLm1hc3RlckNvdW50ID0gZ3JvdXBDb3VudDtcclxuICAgICAgZ3JvdXAubWFpblJlY3QgPSBtYWluUmVjdDtcclxuICAgICAgZ3JvdXAuYnViYmxlUmVjdCA9IGJ1YmJsZVJlY3Q7XHJcblxyXG4gICAgICBncm91cC5vbihcIm1vdXNlZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV2R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmXHJcbiAgICAgICAgICAgICAgKG9iaiBhcyBhbnkpLmdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgICAgbWFpblJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgICAgYnViYmxlUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHByZXZHcm91cCkge1xyXG4gICAgICAgICAgcHJldkdyb3VwLm1haW5SZWN0LnNldCh7IGZpbGw6IFwiI2ZmZmZmZlwiLCBzdHJva2U6IFwiI0QwRDVERFwiIH0pO1xyXG4gICAgICAgICAgcHJldkdyb3VwLmJ1YmJsZVJlY3Quc2V0KHsgZmlsbDogXCIjOThBMkIzXCIgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNGOEY5RkNcIiwgc3Ryb2tlOiBcIiNBRkI1RDlcIiB9KTtcclxuICAgICAgICBncm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzgzODljNVwiIH0pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBib3RoIG1hc3RlcnMgYW5kIHN1YnMgYXJyb3dzLCBiZWZvcmUgcmVuZGVyaW5nIG5ldyBzZXQuXHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lKTtcclxuICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9wdC50YXJnZXQ7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXApIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGFyZ2V0IGFzIGZhYnJpYy5Hcm91cDtcclxuICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHBhcmVudEdyb3VwKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHBhcmVudEdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGxldCB4ID0gKGNhbnZhc1dpZHRoIC0gdG90YWxXaWR0aCkgLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiB4LCB0b3A6IHkgfSk7XHJcbiAgICAgIHggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwID0gZ3JvdXBzWzBdO1xyXG5cclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyTWFzdGVyRml4dHVyZXMoeDogbnVtYmVyLCB5OiBudW1iZXIsIGdyb3VwPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYXN0ZXJcIikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gW3RoaXMubWFzdGVyRml4dHVyZURhdGFdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSB0aGlzLm1hc3RlckZpeHR1cmVEYXRhLl9pZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICBmLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIiAmJlxyXG4gICAgICAgICAgZi50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlc1swXS5faWQ7XHJcbiAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcIm1hc3RlclwiKTtcclxuICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hc3RlcnM6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyxcclxuICAgICAgeCxcclxuICAgICAgeSxcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMudmlld01vZGUgIT09IFwibWFzdGVyXCIpXHJcbiAgICAgIG1hc3RlcnMuZm9yRWFjaCgobSkgPT4gdGhpcy5kcmF3QXJyb3coZ3JvdXAsIG0sIGdyb3VwLmdyb3VwTmFtZSkpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXAgPSBtYXN0ZXJzWzBdO1xyXG4gICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCk7XHJcbiAgICB0aGlzLnJlbmRlclN1YkZpeHR1cmVzKHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXAsIGd4LCBneSArIDUwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlclN1YkZpeHR1cmVzKGdyb3VwOiBhbnksIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldFRlbXBsYXRlVHJlZUxpc3QoeyBtYXN0ZXJJZDogdGhpcy5zZWxlY3RlZE1hc3RlcklkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdWJUZW1wbGF0ZXMgPSByZXM/LmRhdGEgPz8gW107XHJcbiAgICAgICAgICBpZiAodGhpcy5zdWJUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YjogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICAgICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzLFxyXG4gICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHN1Yi5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZml4dHVyZUlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChcIk1hc3RlciBkb2VzIG5vdCBoYXZlIGFueSB2YXJpYW50XCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldE1hc3RlclRlbXBsYXRlTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRml4dHVyZXMoXHJcbiAgICB0ZW1wbGF0ZXM6IGFueVtdLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgcGFyZW50RmFicmljPzogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgdHlwZSBGaXh0dXJlR3JvdXAgPSBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgICAgc3RvcmVDb3VudDogbnVtYmVyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBQcm9jZXNzIGFsbCB0ZW1wbGF0ZXMgaW4gcGFyYWxsZWwgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb25cclxuICAgIGNvbnN0IGdyb3VwczogRml4dHVyZUdyb3VwW10gPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGVtcGxhdGVzLm1hcChhc3luYyAobWYpID0+IHtcclxuICAgICAgICBjb25zdCBpc01hc3RlciA9IG1mLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIjtcclxuXHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgICAgICBsZXQgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCArIDE7XHJcbiAgICAgICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCAtIHRvcEhlaWdodCAvIDIgKyAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lclRvcCA9IGlzTWFzdGVyXHJcbiAgICAgICAgICA/IHkgKyAoKDE1IC8gMTAwKSAqIGhlaWdodCkgLyAyIC0gMVxyXG4gICAgICAgICAgOiB5IC0gMTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiBtYWluQ29udGFpbmVyVG9wLFxyXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtYWluQ29udGFpbmVySGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgICAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYEFzc2lnbmVkIHRvICR7bWYuc3RvcmVDb3VudCA/PyAwfSBTdG9yZXNgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICAgICAgbGV0IGlubmVyQm90dG9tQm94OiBmYWJyaWMuUGF0aDtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzcxN0JCQ1wiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgbGV0IGlubmVyQm90dG9tVGV4dDtcclxuXHJcbiAgICAgICAgLy8gPyBgJHttZj8uZml4dHVyZU5hbWV9IC0gJHttZj8uZml4dHVyZUNhdGVnb3J5fSAtICR7bWY/LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHttZj8uZml4dHVyZVdpZHRoLnVuaXR9YFxyXG4gICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gaXNNYXN0ZXJcclxuICAgICAgICAgID8gbWY/LmZpeHR1cmVOYW1lLmluY2x1ZGVzKFwiZnRcIilcclxuICAgICAgICAgICAgPyBgJHttZj8uZml4dHVyZU5hbWV9YFxyXG4gICAgICAgICAgICA6IGAke21mPy5maXh0dXJlTmFtZX0gLSAke21mPy5maXh0dXJlQ2F0ZWdvcnl9IC0gJHttZj8uZml4dHVyZVdpZHRoLnZhbHVlfSAke21mPy5maXh0dXJlV2lkdGgudW5pdH1gXHJcbiAgICAgICAgICA6IGAke21mPy5maXh0dXJlTmFtZX1gO1xyXG5cclxuICAgICAgICBjb25zdCBjcmVhdGVCb3R0b21UZXh0ID0gKGZzOiBhbnkpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dENvbnRlbnQsIHtcclxuICAgICAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjRkZGRkZGXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgIGlubmVyQm90dG9tVGV4dCA9IGNyZWF0ZUJvdHRvbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgIH0gd2hpbGUgKGlubmVyQm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCBtaWRIZWlnaHQgPSAoNzcgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IG1pZENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmQ291bnQgPSBtZi5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IGJveEhlaWdodCA9IG1pZEhlaWdodCAvIChzaGVsZkNvdW50ICsgMik7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBgTSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgICAgICAgZmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBaYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRlIG1mLmhlYWRlci5sYWJlbCB3aXRoIGVsbGlwc2lzIGlmIGl0IGV4Y2VlZHMgdGhlIGF2YWlsYWJsZSB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG1mPy5oZWFkZXI/LmxhYmVsID8/IFwiXCI7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Rm9udFNpemUgPSA3O1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRGYW1pbHkgPSBcIkludGVyXCI7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Rm9udFdlaWdodCA9IFwiNjAwXCI7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0V2lkdGggPSBtaWRXaWR0aCAtIDQwOyAvLyBsZWF2ZSBzcGFjZSBmb3IgaWNvbnMgb24gcmlnaHRcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGUgd2l0aCBlbGxpcHNpcyBpZiBuZWVkZWRcclxuICAgICAgICBsZXQgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0O1xyXG4gICAgICAgIGlmIChsYWJlbFRleHQpIHtcclxuICAgICAgICAgIGxldCB0ZW1wVGV4dGJveCA9IG5ldyBmYWJyaWMuVGV4dGJveChsYWJlbFRleHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGZpcnN0Qm94VGV4dEZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBmaXJzdEJveFRleHRGb250RmFtaWx5LFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBmaXJzdEJveFRleHRGb250V2VpZ2h0LFxyXG4gICAgICAgICAgICB3aWR0aDogZmlyc3RCb3hUZXh0V2lkdGgsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRvbyB3aWRlLCB0cnVuY2F0ZSBhbmQgYWRkIGVsbGlwc2lzXHJcbiAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIGxldCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICAgIC8vIEJpbmFyeSBzZWFyY2ggZm9yIG1heCBmaXR0aW5nIGxlbmd0aFxyXG4gICAgICAgICAgICBsZXQgbGVmdCA9IDA7XHJcbiAgICAgICAgICAgIGxldCByaWdodCA9IGxhYmVsVGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICB3aGlsZSAobGVmdCA8IHJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgbGV0IG1pZCA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcclxuICAgICAgICAgICAgICBsZXQgdGVzdFRleHQgPSBsYWJlbFRleHQuc2xpY2UoMCwgbWlkKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgIHRlbXBUZXh0Ym94LnNldCh7IHRleHQ6IHRlc3RUZXh0IH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0ZW1wVGV4dGJveC5oZWlnaHQgPiBib3hIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWlkO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0ID0gbWlkICsgMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gbGVmdC0xIGlzIHRoZSBtYXggZml0dGluZyBsZW5ndGhcclxuICAgICAgICAgICAgZGlzcGxheUxhYmVsID0gbGFiZWxUZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnQgLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChkaXNwbGF5TGFiZWwsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyA2LFxyXG4gICAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZpcnN0Qm94VGV4dEZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogZmlyc3RCb3hUZXh0Rm9udEZhbWlseSxcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IGZpcnN0Qm94VGV4dEZvbnRXZWlnaHQsXHJcbiAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogZmlyc3RCb3hUZXh0V2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJsZWZ0XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGljb25TaXplID0gMTA7XHJcbiAgICAgICAgY29uc3QgaWNvblNwYWNpbmcgPSA0O1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRCb3VuZHMgPSBmaXJzdEJveC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgICBjb25zdCBpY29uc1RvcCA9XHJcbiAgICAgICAgICBmaXJzdEJveFRleHRCb3VuZHMudG9wICsgZmlyc3RCb3hUZXh0Qm91bmRzLmhlaWdodCAvIDIgLSBpY29uU2l6ZSAvIDI7XHJcbiAgICAgICAgY29uc3QgaWNvbnNQYWRkaW5nUmlnaHQgPSA2O1xyXG4gICAgICAgIGNvbnN0IGljb25zVG90YWxXaWR0aCA9IGljb25TaXplICogMiArIGljb25TcGFjaW5nO1xyXG4gICAgICAgIGNvbnN0IGljb25zTGVmdFN0YXJ0ID1cclxuICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIGljb25zVG90YWxXaWR0aCAtIGljb25zUGFkZGluZ1JpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBlZGl0SWNvbkxlZnQgPSBpY29uc0xlZnRTdGFydDtcclxuICAgICAgICBjb25zdCBlZGl0SWNvblRvcCA9IGljb25zVG9wO1xyXG4gICAgICAgIGNvbnN0IGVkaXRJY29uUGF0aCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIFwiTTcuMTAzNTQgMS4wNjAzNUM3LjIxMTQ1IDAuOTUyNDM2IDcuMzM5NTYgMC44NjY4MzQgNy40ODA1NiAwLjgwODQzMkM3LjYyMTU1IDAuNzUwMDMgNy43NzI2NyAwLjcxOTk3IDcuOTI1MjggMC43MTk5N0M4LjA3NzkgMC43MTk5NyA4LjIyOTAyIDAuNzUwMDMgOC4zNzAwMSAwLjgwODQzMkM4LjUxMTAxIDAuODY2ODM0IDguNjM5MTIgMC45NTI0MzYgOC43NDcwMyAxLjA2MDM1QzguODU0OTUgMS4xNjgyNiA4Ljk0MDU1IDEuMjk2MzcgOC45OTg5NSAxLjQzNzM3QzkuMDU3MzUgMS41NzgzNyA5LjA4NzQxIDEuNzI5NDggOS4wODc0MSAxLjg4MjFDOS4wODc0MSAyLjAzNDcxIDkuMDU3MzUgMi4xODU4MyA4Ljk5ODk1IDIuMzI2ODJDOC45NDA1NSAyLjQ2NzgyIDguODU0OTUgMi41OTU5MyA4Ljc0NzAzIDIuNzAzODRMMy4yMDAyNCA4LjI1MDY0TDAuOTQwNDMgOC44NjY5NUwxLjU1Njc0IDYuNjA3MTVMNy4xMDM1NCAxLjA2MDM1WlwiLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBlZGl0SWNvbkxlZnQsXHJcbiAgICAgICAgICAgIHRvcDogZWRpdEljb25Ub3AsXHJcbiAgICAgICAgICAgIHNjYWxlWDogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgc2NhbGVZOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC43MDQzNTUsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUNhcDogXCJyb3VuZFwiLFxyXG4gICAgICAgICAgICBzdHJva2VMaW5lSm9pbjogXCJyb3VuZFwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIChlZGl0SWNvblBhdGggYXMgYW55KS5uYW1lID0gXCJlZGl0SWNvblwiO1xyXG5cclxuICAgICAgICBjb25zdCBjb3B5SWNvbkxlZnQgPSBlZGl0SWNvbkxlZnQgKyBpY29uU2l6ZSArIGljb25TcGFjaW5nO1xyXG4gICAgICAgIGNvbnN0IGNvcHlJY29uVG9wID0gZWRpdEljb25Ub3A7XHJcbiAgICAgICAgY29uc3QgY29weUljb25QYXRoID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgXCJNMi4wNzczNSA1Ljk5MDc3TDEuNjY2NDcgNS45OTA3N0MxLjQ0ODUzIDUuOTkwNzcgMS4yMzk1MiA1LjkwNDIgMS4wODU0MSA1Ljc1MDA5QzAuOTMxMzAzIDUuNTk1OTggMC44NDQ3MjcgNS4zODY5NyAwLjg0NDcyNyA1LjE2OTAzTDAuODQ0NzI3IDEuNDcxMTZDMC44NDQ3MjcgMS4yNTMyMiAwLjkzMTMwMyAxLjA0NDIxIDEuMDg1NDEgMC44OTAwOThDMS4yMzk1MiAwLjczNTk5MSAxLjQ0ODUzIDAuNjQ5NDE0IDEuNjY2NDcgMC42NDk0MTRMNS4zNjQzNCAwLjY0OTQxNEM1LjU4MjI4IDAuNjQ5NDE0IDUuNzkxMjkgMC43MzU5OTEgNS45NDU0IDAuODkwMDk4QzYuMDk5NTEgMS4wNDQyMSA2LjE4NjA5IDEuMjUzMjIgNi4xODYwOSAxLjQ3MTE2TDYuMTg2MDkgMS44ODIwNE00LjU0MjU5IDMuNTI1NTNMOC4yNDA0NiAzLjUyNTUzQzguNjk0MjkgMy41MjU1MyA5LjA2MjIgMy44OTM0NCA5LjA2MjIgNC4zNDcyOEw5LjA2MjIgOC4wNDUxNEM5LjA2MjIgOC40OTg5OCA4LjY5NDI5IDguODY2ODkgOC4yNDA0NiA4Ljg2Njg5TDQuNTQyNTkgOC44NjY4OUM0LjA4ODc1IDguODY2ODkgMy43MjA4NCA4LjQ5ODk4IDMuNzIwODQgOC4wNDUxNEwzLjcyMDg0IDQuMzQ3MjhDMy43MjA4NCAzLjg5MzQ0IDQuMDg4NzUgMy41MjU1MyA0LjU0MjU5IDMuNTI1NTNaXCIsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNvcHlJY29uTGVmdCxcclxuICAgICAgICAgICAgdG9wOiBjb3B5SWNvblRvcCxcclxuICAgICAgICAgICAgc2NhbGVYOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBzY2FsZVk6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC43MDQzNTUsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUNhcDogXCJyb3VuZFwiLFxyXG4gICAgICAgICAgICBzdHJva2VMaW5lSm9pbjogXCJyb3VuZFwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAoY29weUljb25QYXRoIGFzIGFueSkubmFtZSA9IFwiY29weUljb25cIjtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbHZlcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICAgICAgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDFcIikge1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodDtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHNoZWxmSGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBtZj8ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCwgc2hyaW5rIGZvbnQgaWYgbmVlZGVkIHRvIGZpdCB3aXRoaW4gc2hlbGYgaGVpZ2h0XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgICAgIGxldCBmb250U2l6ZUwxID0gNjsgLy8gc3RhcnQgc2xpZ2h0bHkgbGFyZ2VyOyB3aWxsIHNocmluayB0byBmaXRcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICAgICAgZm9udFNpemVMMSAtPSAwLjU7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogTWF0aC5taW4obWF4VGV4dFdpZHRoLCB3cmFwcGVkVGV4dC53aWR0aCEpICsgcGFkZGluZyxcclxuICAgICAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwyXCIpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZi5zaGVsZkNvbmZpZz8uW2ldLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IG1mLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID1cclxuICAgICAgICAgICAgICBtZi5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgICAgIC8vIEwyOiBTaW5nbGUtbGluZSB3aXRoIGVsbGlwc2lzIHdpdGhpbiBzaGVsZiByZWN0IChtaWRXaWR0aClcclxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2OyAvLyBwYWRkaW5nIGluc2lkZSBzaGVsZiByZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICAgICAgLy8gVXNlIHNpbmdsZS1saW5lIHRleHQgbWVhc3VyZW1lbnQgdG8gYXZvaWQgbXVsdGktbGluZSB3cmFwcGluZyBkdXJpbmcgbWVhc3VyZW1lbnRcclxuICAgICAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsIC8vIG1hdGNoIHNoZWxmIHJlY3Qgd2lkdGhcclxuICAgICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcblxyXG4gICAgICAgICAgbGV0IHByZXZpb3VzWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBtZi5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICAgICAgaWYgKHpvbmUgIT09IHByZXZpb3VzWm9uZSkge1xyXG4gICAgICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgem9uZSwgc2hlbHZlczogc2hlbHZlc0luR3JvdXAgfSA9IGdyb3VwO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gc2hlbHZlc0luR3JvdXAubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IHNoZWxmRGF0YS50cmF5Um93cyB8fCAwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtblNwYWNpbmcgPSBtaWRXaWR0aCAvIHByb2R1Y3RQZXJTaGVsZjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVYID0gbWlkWCArIGMgKiBjb2x1bW5TcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgICAgIFtsaW5lWCwgYm94WSwgbGluZVgsIGJveFkgKyBib3hIZWlnaHRdLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZlcnRpY2FsTGluZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGN1cnJlbnRTaGVsZkluZGV4Kys7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgZ3JvdXBCb3R0b21ZLCBtaWRYICsgbWlkV2lkdGgsIGdyb3VwQm90dG9tWV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1mLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAtIGxhYmVsUGFkZGluZyxcclxuICAgICAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkJyYW5kcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25CcmFuZHMuYWRkKGJyYW5kKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoWy4uLnNlY3Rpb25CcmFuZHNdLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBmb250U2l6ZSA9IDY7XHJcbiAgICAgICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcclxuICAgICAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgICAgICB9IHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQ2VudGVyVGV4dCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWY/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWYudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCB2bSA9IG1mLnZtQ29uZmlnW2ldO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtPy52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9YCxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCxcclxuICAgICAgICAgICAgICAgICAgICBlcnIsXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZtQm94ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB2bUhlaWdodFB4LFxyXG4gICAgICAgICAgICAgICAgICBmaWxsOiBcIiM2OTM4RUZcIixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICAgICAgICAgIGxldCB2bVRleHQ7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlVm1UZXh0ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgICB2bVRleHQgPSBjcmVhdGVWbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICAgICAgICB9IHdoaWxlICh2bVRleHQuaGVpZ2h0ID4gdm1IZWlnaHRQeCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IEVycm9yIGluIGRyYXdpbmcgVk06IFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgICAgICBjb25zdCBsYXN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgYE0gJHttaWRYfSAke2xhc3RCb3hZfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgICB9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICAgICAgbGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiI0VBRUNGNVwiIDogXCIjREFGMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiNBRkI1RDlcIiA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGFzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgICAgICBgJHttZj8uZm9vdGVyPy5sYWJlbCA/IG1mLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbVkgPSBtaWRZICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgICAgICB0b3A6IGJvdHRvbVksXHJcbiAgICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdHVhbFNoZWxmQ291bnQgPVxyXG4gICAgICAgICAgbWY/LnNoZWxmQ29uZmlnPy5maWx0ZXIoKHM6IGFueSkgPT4gcy5zaGVsZlR5cGUgIT0gXCJ2bW9ubHlcIilcclxuICAgICAgICAgICAgPy5sZW5ndGggPz8gMDtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgICAgICBgU2hlbHZlcyAtICR7YWN0dWFsU2hlbGZDb3VudH0gLiBQcm9kdWN0cyAtICAke21mLmZpeHR1cmVDYXBhY2l0eX0gLiBWTSAtICR7bWYudm1Db25maWcubGVuZ3RofWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IGJvdHRvbVggKyBib3R0b21XaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICAgICAgaGVpZ3RoOiBib3R0b21IZWlnaHQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2hpbGRyZW4gPSBbXHJcbiAgICAgICAgICBtYWluQ29udGFpbmVyLFxyXG4gICAgICAgICAgLi4uKCFpc01hc3RlciA/IFt0b3BDb250YWluZXIsIGlubmVyVG9wQm94LCBpbm5lclRvcFRleHRdIDogW10pLFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21Cb3gsXHJcbiAgICAgICAgICBpbm5lckJvdHRvbVRleHQsXHJcbiAgICAgICAgICBtaWRDb250YWluZXIsXHJcbiAgICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICAgIGZpcnN0Qm94VGV4dCxcclxuICAgICAgICAgIC4uLighaXNNYXN0ZXIgPyBbZWRpdEljb25QYXRoXSA6IFtdKSxcclxuICAgICAgICAgIGNvcHlJY29uUGF0aCxcclxuICAgICAgICAgIC4uLnNoZWx2ZXMsXHJcbiAgICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgICAgbGFzdEJveFRleHQsXHJcbiAgICAgICAgICBib3R0b21Db250YWluZXIsXHJcbiAgICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGdyb3VwQ2hpbGRyZW4sIHtcclxuICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICAgIC8vIGFuZ2xlOiBtZi5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZSA/PyAwXHJcbiAgICAgICAgfSkgYXMgRml4dHVyZUdyb3VwO1xyXG5cclxuICAgICAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUlkID0gbWYuX2lkO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IG1mLmZpeHR1cmVUeXBlO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5ncm91cE5hbWUgPSBtZj8udGVtcGxhdGVHcm91cE5hbWUgPz8gXCJcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAudGVtcGxhdGVUeXBlID0gbWYudGVtcGxhdGVUeXBlO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5uYW1lID0gbWYudGVtcGxhdGVUeXBlID8/IFwiZml4dHVyZVwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5zdG9yZUNvdW50ID0gbWY/LnN0b3JlQ291bnQgPz8gMDtcclxuICAgICAgICBmaXh0dXJlR3JvdXAucGFyZW50RmFicmljID0gcGFyZW50RmFicmljO1xyXG5cclxuICAgICAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjaGlsZE5hbWUgPSBvcHQuc3ViVGFyZ2V0cz8uWzBdPy5uYW1lO1xyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgY2hpbGROYW1lID09PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgaXNNYXN0ZXIgJiZcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkICE9PSBtZi5faWQgJiZcclxuICAgICAgICAgICAgIXRoaXMucHJldmVudENsaWNrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gbWYuX2lkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oXHJcbiAgICAgICAgICAgICAgZml4dHVyZUdyb3VwIGFzIGZhYnJpYy5Hcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhmaXh0dXJlR3JvdXAsIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG4gICAgbGV0IG54ID0geCAtIHRvdGFsV2lkdGggLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiBueCwgdG9wOiB5IH0pO1xyXG4gICAgICBueCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENlbnRlckJvdHRvbShncm91cDogZmFicmljLkdyb3VwKTogeyBneDogbnVtYmVyOyBneTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXIueDtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBncm91cC50b3AhICsgZ3JvdXAuaGVpZ2h0ITtcclxuICAgIHJldHVybiB7IGd4OiBjZW50ZXJYLCBneTogYm90dG9tWSB9O1xyXG4gIH1cclxuXHJcbiAgY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JvdXBzVG9SZW1vdmUgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgKG9iaiBhcyBhbnkpLnRlbXBsYXRlVHlwZSA9PT0gdGVtcGxhdGVUeXBlLFxyXG4gICAgICApO1xyXG5cclxuICAgIGlmIChncm91cHNUb1JlbW92ZSkge1xyXG4gICAgICBncm91cHNUb1JlbW92ZS5mb3JFYWNoKChncm91cCkgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGdyb3VwKSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdBcnJvdyhmcm9tR3JvdXA6IGZhYnJpYy5Hcm91cCwgdG9Hcm91cDogZmFicmljLkdyb3VwLCBhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZyb20gPSBmcm9tR3JvdXAuYUNvb3JkcyA/PyBmcm9tR3JvdXAuY2FsY09Db29yZHMoKTtcclxuICAgIGNvbnN0IHRvID0gdG9Hcm91cC5hQ29vcmRzID8/IHRvR3JvdXAuY2FsY09Db29yZHMoKTtcclxuXHJcbiAgICBjb25zdCBmcm9tWCA9IChmcm9tLmJsLnggKyBmcm9tLmJyLngpIC8gMjtcclxuICAgIGNvbnN0IGZyb21ZID0gKGZyb20uYmwueSArIGZyb20uYnIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IHRvWCA9ICh0by50bC54ICsgdG8udHIueCkgLyAyO1xyXG4gICAgY29uc3QgdG9ZID0gKHRvLnRsLnkgKyB0by50ci55KSAvIDI7XHJcblxyXG4gICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHRvWCAtIGZyb21YO1xyXG4gICAgY29uc3QgdmVydGljYWxPZmZzZXQgPSB0b1kgLSBmcm9tWTtcclxuICAgIGNvbnN0IGN1cnZlU2l6ZSA9IDE0O1xyXG5cclxuICAgIGxldCBwYXRoRGF0YSA9IFwiXCI7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGhvcml6b250YWxPZmZzZXQpIDwgNSkge1xyXG4gICAgICAvLyBEaXJlY3QgdmVydGljYWwgbGluZVxyXG4gICAgICBwYXRoRGF0YSA9IGBNICR7ZnJvbVh9ICR7ZnJvbVl9IEwgJHt0b1h9ICR7dG9ZfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtaWRZID0gZnJvbVkgKyB2ZXJ0aWNhbE9mZnNldCAvIDI7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGhvcml6b250YWxPZmZzZXQgPiAwID8gMSA6IC0xO1xyXG5cclxuICAgICAgY29uc3QgY3VydmUxWCA9IGZyb21YICsgZGlyZWN0aW9uICogY3VydmVTaXplO1xyXG4gICAgICBjb25zdCBjdXJ2ZTJYID0gdG9YIC0gZGlyZWN0aW9uICogY3VydmVTaXplO1xyXG5cclxuICAgICAgcGF0aERhdGEgPSBbXHJcbiAgICAgICAgYE0gJHtmcm9tWH0gJHtmcm9tWX1gLFxyXG4gICAgICAgIGBMICR7ZnJvbVh9ICR7bWlkWSAtIGN1cnZlU2l6ZX1gLFxyXG4gICAgICAgIGBRICR7ZnJvbVh9ICR7bWlkWX0gJHtjdXJ2ZTFYfSAke21pZFl9YCxcclxuICAgICAgICBgTCAke2N1cnZlMlh9ICR7bWlkWX1gLFxyXG4gICAgICAgIGBRICR7dG9YfSAke21pZFl9ICR7dG9YfSAke21pZFkgKyBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgTCAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgXS5qb2luKFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhcnJvd0xpbmUgPSBuZXcgZmFicmljLlBhdGgocGF0aERhdGEsIHtcclxuICAgICAgc3Ryb2tlOiBcIiNBRkI1RDlcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDEuOCxcclxuICAgICAgZmlsbDogXCJcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXJyb3doZWFkXHJcbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIodG9ZIC0gKHRvWSAtIDEwKSwgdG9YIC0gdG9YKTtcclxuICAgIGNvbnN0IGhlYWRsZW4gPSAxMDtcclxuICAgIGNvbnN0IGFycm93SGVhZCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgW1xyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlIC0gTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlIC0gTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgICAgYE0gJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgICAgYEwgJHt0b1ggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNSl9ICR7XHJcbiAgICAgICAgICB0b1kgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNSlcclxuICAgICAgICB9YCxcclxuICAgICAgXS5qb2luKFwiIFwiKSxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEuOCxcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gR3JvdXBpbmcgYm90aCBsaW5lIGFuZCBhcnJvd2hlYWRcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvd0xpbmUsIGFycm93SGVhZF0sIHtcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYgeyBhcnJvd0lkOiBzdHJpbmcgfTtcclxuXHJcbiAgICAvLyBBdHRhY2ggY3VzdG9tIGFycm93IElEXHJcbiAgICBhcnJvd0dyb3VwLmFycm93SWQgPSBhcnJvd0lkO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChhcnJvd0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQXJyb3dCeUlkKGFycm93SWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyb3dHcm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcihcclxuICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmIChvYmogYXMgYW55KS5hcnJvd0lkID09PSBhcnJvd0lkLFxyXG4gICAgICApO1xyXG5cclxuICAgIGlmIChhcnJvd0dyb3VwKSB7XHJcbiAgICAgIGFycm93R3JvdXAuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkR1cGxpY2F0ZShmaXh0dXJlOiBhbnkpIHtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICAgICAuZHVwbGljYXRlRml4dHVyZVRlbXBsYXRlKHsgdGVtcGxhdGVJZDogZml4dHVyZS5maXh0dXJlSWQgfSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXh0dXJlID1cclxuICAgICAgICAgICAgICBmaXh0dXJlLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIlxyXG4gICAgICAgICAgICAgICAgPyBmaXh0dXJlXHJcbiAgICAgICAgICAgICAgICA6IGZpeHR1cmUucGFyZW50RmFicmljO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IGN1cnJlbnRGaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKGN1cnJlbnRGaXh0dXJlKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhjdXJyZW50Rml4dHVyZSwgZ3gsIGd5ICsgNTApO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChyZXMuZGF0YS5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXHJcbiAgICAgICAgICAgIGVycj8uZXJyb3I/LmVycm9yIHx8IFwiRmFpbGVkIHRvIGNyZWF0ZSB2YXJpYW50XCIsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IGR1cGxpY2F0ZUZpeHR1cmVUZW1wbGF0ZSBbZXJyXTpcIiwgZXJyKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ0cmVlLWNhbnZhcy1jYXJkXCIgY2xhc3M9XCJ3LTEwMCBwLTZcIj5cclxuICA8Y2FudmFzIGlkPVwidGVtcGxhdGUtY2FudmFzXCIgI3RlbXBsYXRlQ2FudmFzPjwvY2FudmFzPlxyXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctMTAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDEwIDExXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiNC44NDMxXCIgY3k9XCI1LjQ5OTk2XCIgcj1cIjQuODQzMVwiIGZpbGw9XCIjNjE3MkYzXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxwIGNsYXNzPVwibS0wIG1lLTNcIj5NYXN0ZXIgVGVtcGxhdGU8L3A+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTFcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTEgMTFcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI1LjQ0NDY2XCIgY3k9XCI1LjQ5OTk2XCIgcj1cIjQuODQzMVwiIGZpbGw9XCIjMzNCNUZGXCIgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICAgIDxwIGNsYXNzPVwibS0wXCI+VmFyaWFudC9DaGlsZCBUZW1wbGF0ZTwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInpvb21cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInpvb20taW5cIiAoY2xpY2spPVwiem9vbUluKClcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNVYxOU01IDEySDE5XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInpvb20tb3V0XCIgKGNsaWNrKT1cInpvb21PdXQoKVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk01IDEySDE5XCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19