tango-app-ui-store-builder 1.2.5 → 1.2.7

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/collection-update-ai.component.mjs +3 -2
  2. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -2
  3. package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -2
  4. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +41 -4
  5. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -2
  6. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -2
  7. package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -2
  8. package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +2 -3
  9. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -2
  10. package/esm2022/lib/components/manage-plano/verification-table/verification-table.component.mjs +2 -3
  11. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +73 -6
  12. package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +4 -3
  13. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +114 -4
  14. package/esm2022/lib/components/onboard-store-plano/onboard-fixture/onboard-fixture.component.mjs +3 -3
  15. package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +85 -6
  16. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +162 -3
  17. package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +24 -11
  18. package/esm2022/lib/components/plano-library/fixture-library/popups/create-fixture-modal/create-fixture-modal.component.mjs +13 -4
  19. package/esm2022/lib/components/plano-library/vm-library/vm-library.component.mjs +3 -4
  20. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +3 -3
  21. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -5
  22. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +3 -3
  23. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +98 -3
  24. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +3 -2
  25. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +135 -33
  26. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -2
  27. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -2
  28. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +3 -2
  29. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +1 -1
  30. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -2
  31. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -2
  32. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +2 -3
  33. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -4
  34. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -3
  35. package/esm2022/lib/data/fixture-template.data.mjs +12 -1
  36. package/esm2022/lib/functions/plano.function.mjs +13 -1
  37. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  38. package/esm2022/lib/services/store-builder.service.mjs +21 -1
  39. package/fesm2022/tango-app-ui-store-builder.mjs +1082 -380
  40. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  41. package/lib/components/create-fixture/create-fixture.component.d.ts +3 -0
  42. package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +6 -1
  43. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +14 -1
  44. package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +8 -1
  45. package/lib/components/plano-configurations/plano-configurations.component.d.ts +19 -1
  46. package/lib/components/plano-library/fixture-library/fixture-library.component.d.ts +1 -0
  47. package/lib/components/plano-library/fixture-library/popups/create-fixture-modal/create-fixture-modal.component.d.ts +5 -0
  48. package/lib/components/plano-tools/plano-data-export/plano-data-export.component.d.ts +26 -0
  49. package/lib/components/plano-tools/store-exports/store-exports.component.d.ts +28 -3
  50. package/lib/data/fixture-template.data.d.ts +8 -0
  51. package/lib/functions/plano.function.d.ts +1 -0
  52. package/lib/interfaces/fixture-library.interface.d.ts +1 -0
  53. package/lib/services/store-builder.service.d.ts +10 -0
  54. package/package.json +1 -1
@@ -4,6 +4,7 @@ import { CommonModule } from "@angular/common";
4
4
  import { FormsModule } from "@angular/forms";
5
5
  import { debounceTime, fromEvent, Subject, takeUntil } from "rxjs";
6
6
  import { LayoutEditConfirmationComponent } from "../popups/layout-edit-confirmation/layout-edit-confirmation.component";
7
+ import { getFixtureCanvasLabel } from "../../functions/plano.function";
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "tango-app-ui-global";
9
10
  import * as i2 from "../../services/store-builder.service";
@@ -660,7 +661,7 @@ export class TemplateTreeComponent {
660
661
  }
661
662
  let fontSize = 5;
662
663
  let innerBottomText;
663
- const textContent = `${mf?.fixtureName}`;
664
+ const textContent = getFixtureCanvasLabel(mf);
664
665
  const createBottomText = (fs) => new fabric.Textbox(textContent, {
665
666
  left: topX + topWidth / 2,
666
667
  top: secondBoxY + innerBoxHeight / 2,
@@ -1502,4 +1503,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1502
1503
  type: HostListener,
1503
1504
  args: ["document:click", ["$event"]]
1504
1505
  }] } });
1505
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS10cmVlL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1uRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7Ozs7O0FBU3hILE1BQU0sT0FBTyxxQkFBcUI7SUEwQ3RCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE3Q0QsUUFBUSxHQUF1QixPQUFPLENBQUM7SUFDdkMsUUFBUSxDQUFVLENBQUMsdURBQXVEO0lBQzFFLGlCQUFpQixDQUFPLENBQUMsMkNBQTJDO0lBQ3BFLFVBQVUsQ0FBUyxDQUFDLDBDQUEwQztJQUd2RSxRQUFRLENBQWlDO0lBQ3pDLE1BQU0sQ0FBaUI7SUFFdkIsY0FBYyxHQUFHLENBQUMsSUFBSSxH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Z0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWdEOUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgVHJlZUZpbHRlclN0YXRlLFxyXG4gIFRyZWVGaWx0ZXJPcHRpb25zLFxyXG59IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2ZpeHR1cmUtdGVtcGxhdGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImZpeHR1cmUtdGVtcGxhdGUtdHJlZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlVHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgdmlld01vZGU6IFwiZ3JvdXBcIiB8IFwibWFzdGVyXCIgPSBcImdyb3VwXCI7XHJcbiAgQElucHV0KCkgY2xpZW50SWQ/OiBzdHJpbmc7IC8vIFVzZWQgdG8gZmV0Y2ggYWxsIG1hc3RlcnMgd2hlbiBtb2RlIGlzIHNldCB0byBncm91cC5cclxuICBASW5wdXQoKSBtYXN0ZXJGaXh0dXJlRGF0YT86IGFueTsgLy8gUmVxdWlyZWQgd2hlbiB2aWV3TW9kZSBpcyBzZXQgdG8gbWFzdGVyLlxyXG4gIEBJbnB1dCgpIGFsbEZpeHR1cmU/OiBhbnlbXTsgLy8gUmVxdWlyZWQgd2hlbiB2aWV3TW9kZSBpcyBzZXQgdG8gc3RvcmUuXHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0ZW1wbGF0ZUNhbnZhc1wiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBjYW52YXNFbCE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIGNhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcblxyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIGNkblVybDogc3RyaW5nO1xyXG5cclxuICBhbGxNYXN0ZXJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcbiAgc3ViVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG5cclxuICBzZWxlY3RlZEdyb3VwTmFtZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkTWFzdGVySWQ6IHN0cmluZztcclxuICBzZWxlY3RlZFN1YlRlbXBsYXRlSWQ6IHN0cmluZztcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJldmVudENsaWNrOiBib29sZWFuID0gZmFsc2U7IC8vIEZsYWcgdXNlZCB0byByZXN0cmljdCBmdXJ0aGVyIGNsaWNrcyBvbiBjYW52YXMgaXRlbXMgd2hpbGUgYW4gQVBJIGNhbGwgaXMgaW4gcHJvZ3Jlc3MuXHJcblxyXG4gIC8vIEZpbHRlciBzdGF0ZVxyXG4gIGZpbHRlck9wdGlvbnM6IFRyZWVGaWx0ZXJPcHRpb25zID0ge1xyXG4gICAgdGVtcGxhdGVHcm91cE5hbWVzOiBbXSxcclxuICAgIGZpeHR1cmVOYW1lczogW10sXHJcbiAgICBzdG9yZU5hbWVzOiBbXSxcclxuICB9O1xyXG4gIGFjdGl2ZUZpbHRlcnM6IFRyZWVGaWx0ZXJTdGF0ZSA9IHtcclxuICAgIHRlbXBsYXRlR3JvdXBOYW1lczogW10sXHJcbiAgICBmaXh0dXJlTmFtZXM6IFtdLFxyXG4gICAgc3RvcmVOYW1lczogW10sXHJcbiAgfTtcclxuICBwcml2YXRlIGluaXRpYWxMb2FkRG9uZSA9IGZhbHNlO1xyXG4gIGZpbHRlclNlYXJjaDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIG9wZW5GaWx0ZXJLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JlQnVpbGRlclNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHRoaXMuY2RuVXJsID0gZS5wbGFub2dyYW1DRE47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIl0pXHJcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5vcGVuRmlsdGVyS2V5ICYmICF0YXJnZXQuY2xvc2VzdChcIi5maWx0ZXItY2hpcFwiKSkge1xyXG4gICAgICB0aGlzLm9wZW5GaWx0ZXJLZXkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLmNhbnZhc0VsPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICB3aWR0aDogODAwLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHdpbmRvdywgXCJyZXNpemVcIilcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMuZmV0Y2hGaWx0ZXJPcHRpb25zKCk7XHJcbiAgICB0aGlzLmJ1aWxkVHJlZVZpZXcoKTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgYXN5bmMgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG9wdC50YXJnZXQgYXMgYW55O1xyXG4gICAgICBjb25zdCBjaGlsZE5hbWUgPSBvcHQuc3ViVGFyZ2V0cz8uWzBdPy5uYW1lO1xyXG5cclxuICAgICAgaWYgKCFjaGlsZE5hbWUpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChjaGlsZE5hbWUgPT09IFwiZWRpdEljb25cIikge1xyXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybUVkaXQocGFyZW50LnN0b3JlQ291bnQpKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzXCJdLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IHBhcmVudC5maXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hpbGROYW1lID09PSBcImNvcHlJY29uXCIpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPVxyXG4gICAgICAgICAgcGFyZW50LnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIiA/IHBhcmVudCA6IG9wdC5zdWJUYXJnZXRzPy5bMF0uZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5vbkR1cGxpY2F0ZSh0YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1FZGl0KGNvdW50OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChjb3VudCA8PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKExheW91dEVkaXRDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYEVkaXQgdGVtcGxhdGVgO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9IGBZb3UgYXJlIGFib3V0IHRvIGVkaXQgYW4gYWN0aXZlIHRlbXBsYXRlLiBQbGVhc2UgcmV2aWV3IGFuZCBwdWJsaXNoIHRoZSBjaGFuZ2VzYDtcclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZVZpZXcoKSB7XHJcbiAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJncm91cFwiICYmIHRoaXMuY2xpZW50SWQpIHtcclxuICAgICAgdGhpcy5nZXRNYXN0ZXJUZW1wbGF0ZUxpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYXN0ZXJcIiAmJiB0aGlzLm1hc3RlckZpeHR1cmVEYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IHRoaXMubWFzdGVyRml4dHVyZURhdGEuX2lkO1xyXG5cclxuICAgICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgICBsZXQgeCA9IGNhbnZhc1dpZHRoIC8gMjtcclxuICAgICAgbGV0IHkgPSA1MDtcclxuICAgICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyh4LCB5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE1hc3RlclRlbXBsYXRlTGlzdCgpIHtcclxuICAgIGNvbnN0IHBhcmFtczogYW55ID0geyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9O1xyXG5cclxuICAgIC8vIFBhc3MgYWN0aXZlIGZpbHRlcnMgdG8gdGhlIEFQSVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVycy50ZW1wbGF0ZUdyb3VwTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmFtcy50ZW1wbGF0ZUdyb3VwTmFtZXMgPSB0aGlzLmFjdGl2ZUZpbHRlcnMudGVtcGxhdGVHcm91cE5hbWVzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVycy5maXh0dXJlTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmFtcy5maXh0dXJlTmFtZXMgPSB0aGlzLmFjdGl2ZUZpbHRlcnMuZml4dHVyZU5hbWVzO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVycy5zdG9yZU5hbWVzLmxlbmd0aCkge1xyXG4gICAgICBwYXJhbXMuc3RvcmVOYW1lcyA9IHRoaXMuYWN0aXZlRmlsdGVycy5zdG9yZU5hbWVzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICAgICAuZ2V0VGVtcGxhdGVUcmVlTGlzdChwYXJhbXMpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMgPSByZXM/LmRhdGEgPz8gW107XHJcblxyXG4gICAgICAgICAgLy8gT25jZSB0aGUgbWFzdGVyIHRlbXBsYXRlIGlzIGZldGNoZWQsIHJlbmRlciB0aGUgZ3JvdXAgbmFtZXMuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckdyb3VwTmFtZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldE1hc3RlclRlbXBsYXRlTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICAvLyBQaW5jaC10by16b29tICh0cmFja3BhZCkgb3IgQ3RybCtzY3JvbGwgKG1vdXNlKVxyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMDUsIE1hdGgubWluKHpvb20sIDUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gVHdvLWZpbmdlciB0cmFja3BhZCBzd2lwZSDihpIgcGFuIGNhbnZhc1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIGlmICh2cHQpIHtcclxuICAgICAgICAgIHZwdFs0XSAtPSBlLmRlbHRhWDtcclxuICAgICAgICAgIHZwdFs1XSAtPSBlLmRlbHRhWTtcclxuICAgICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgbGFzdFBvc1ggPSAwO1xyXG4gICAgbGV0IGxhc3RQb3NZID0gMDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTptb3ZlXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSkge1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybTtcclxuICAgICAgICB2cHRbNF0gKz0gZS5jbGllbnRYIC0gbGFzdFBvc1g7XHJcbiAgICAgICAgdnB0WzVdICs9IGUuY2xpZW50WSAtIGxhc3RQb3NZO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgem9vbUluKCkge1xyXG4gICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5taW4oem9vbSArIDAuMiwgMyk7XHJcbiAgICB0aGlzLnNtb290aFpvb20odGFyZ2V0Wm9vbSk7XHJcbiAgfVxyXG5cclxuICB6b29tT3V0KCkge1xyXG4gICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5tYXgoem9vbSAtIDAuMiwgMC4yKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc21vb3RoWm9vbSh0YXJnZXRab29tOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNlbnRlciA9IG5ldyBmYWJyaWMuUG9pbnQoXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldFdpZHRoKCkgLyAyLFxyXG4gICAgICB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSAvIDIsXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3VycmVudFpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCBzdGVwcyA9IDEwO1xyXG4gICAgY29uc3Qgc3RlcFNpemUgPSAodGFyZ2V0Wm9vbSAtIGN1cnJlbnRab29tKSAvIHN0ZXBzO1xyXG4gICAgbGV0IHN0ZXAgPSAwO1xyXG5cclxuICAgIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XHJcbiAgICAgIGlmIChzdGVwIDwgc3RlcHMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChjZW50ZXIsIGN1cnJlbnRab29tICsgc3RlcFNpemUgKiAoc3RlcCArIDEpKTtcclxuICAgICAgICBzdGVwKys7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgdGFyZ2V0Wm9vbSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYW5pbWF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgem9vbVRvRml0KCkge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgYm91bmRpbmcgYm94IG9mIGFsbCBvYmplY3RzXHJcbiAgICBsZXQgbWluWCA9IEluZmluaXR5O1xyXG4gICAgbGV0IG1pblkgPSBJbmZpbml0eTtcclxuICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xyXG4gICAgbGV0IG1heFkgPSAtSW5maW5pdHk7XHJcblxyXG4gICAgb2JqZWN0cy5mb3JFYWNoKChvYmopID0+IHtcclxuICAgICAgY29uc3QgYm91bmRzID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgYm91bmRzLmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgYm91bmRzLnRvcCk7XHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50V2lkdGggPSBtYXhYIC0gbWluWDtcclxuICAgIGNvbnN0IGNvbnRlbnRIZWlnaHQgPSBtYXhZIC0gbWluWTtcclxuICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IHRoaXMuY2FudmFzLmdldEhlaWdodCgpO1xyXG5cclxuICAgIGNvbnN0IHBhZGRpbmcgPSA0MDtcclxuICAgIGNvbnN0IHNjYWxlWCA9IChjYW52YXNXaWR0aCAtIHBhZGRpbmcgKiAyKSAvIGNvbnRlbnRXaWR0aDtcclxuICAgIGNvbnN0IHNjYWxlWSA9IChjYW52YXNIZWlnaHQgLSBwYWRkaW5nICogMikgLyBjb250ZW50SGVpZ2h0O1xyXG4gICAgY29uc3Qgem9vbSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZLCAxKTsgLy8gRG9uJ3Qgem9vbSBpbiBiZXlvbmQgMXhcclxuXHJcbiAgICAvLyBSZXNldCB2aWV3cG9ydCwgdGhlbiBzZXQgem9vbSBhbmQgY2VudGVyXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShbMSwgMCwgMCwgMSwgMCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSAobWluWCArIG1heFgpIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSAobWluWSArIG1heFkpIC8gMjtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgbmV3IGZhYnJpYy5Qb2ludChjYW52YXNXaWR0aCAvIDIsIGNhbnZhc0hlaWdodCAvIDIpLFxyXG4gICAgICB6b29tLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBQYW4gc28gdGhlIGNvbnRlbnQgY2VudGVyIGFsaWducyB3aXRoIGNhbnZhcyBjZW50ZXJcclxuICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuICAgIHZwdFs0XSA9IGNhbnZhc1dpZHRoIC8gMiAtIGNlbnRlclggKiB6b29tO1xyXG4gICAgdnB0WzVdID0gY2FudmFzSGVpZ2h0IC8gMiAtIGNlbnRlclkgKiB6b29tO1xyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCkge1xyXG4gICAgY29uc3QgY2FudmFzQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgIFwidHJlZS1jYW52YXMtY2FyZFwiLFxyXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChjYW52YXNDb2wpIHtcclxuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXNDb2wub2Zmc2V0V2lkdGggLSAzMjtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2FudmFzQ29sLm9mZnNldEhlaWdodCAtIDMyO1xyXG4gICAgICB0aGlzLmNoYW5nZUNhbnZhc1NpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VDYW52YXNTaXplKG5ld1dpZHRoOiBudW1iZXIsIG5ld0hlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jYW52YXNFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGNhbnZhc0VsZW1lbnQud2lkdGggPSBuZXdXaWR0aDtcclxuICAgIGNhbnZhc0VsZW1lbnQuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKG5ld1dpZHRoKTtcclxuICAgIHRoaXMuY2FudmFzLnNldEhlaWdodChuZXdIZWlnaHQpO1xyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0gRmlsdGVyIG1ldGhvZHMgLS0tXHJcblxyXG4gIGZldGNoRmlsdGVyT3B0aW9ucygpIHtcclxuICAgIGlmICghdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRUcmVlRmlsdGVyT3B0aW9ucyh0aGlzLmNsaWVudElkKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlR3JvdXBOYW1lczogcmVzLmRhdGEudGVtcGxhdGVHcm91cE5hbWVzID8/IFtdLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVOYW1lczogcmVzLmRhdGEuZml4dHVyZU5hbWVzID8/IFtdLFxyXG4gICAgICAgICAgICAgIHN0b3JlTmFtZXM6IHJlcy5kYXRhLnN0b3JlTmFtZXMgPz8gW10sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCBmZXRjaEZpbHRlck9wdGlvbnMgW0VSUl06IFwiLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmlsdGVyZWRPcHRpb25zKGtleTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9ICh0aGlzLmZpbHRlck9wdGlvbnMgYXMgYW55KVtrZXldID8/IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoID0gKHRoaXMuZmlsdGVyU2VhcmNoW2tleV0gPz8gXCJcIikudG9Mb3dlckNhc2UoKTtcclxuICAgIGlmICghc2VhcmNoKSByZXR1cm4gb3B0aW9ucztcclxuICAgIHJldHVybiBvcHRpb25zLmZpbHRlcigobzogc3RyaW5nKSA9PiBvLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoKSk7XHJcbiAgfVxyXG5cclxuICBpc0ZpbHRlclNlbGVjdGVkKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKCh0aGlzLmFjdGl2ZUZpbHRlcnMgYXMgYW55KVtrZXldID8/IFtdKS5pbmNsdWRlcyh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGaWx0ZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycjogc3RyaW5nW10gPSAodGhpcy5hY3RpdmVGaWx0ZXJzIGFzIGFueSlba2V5XTtcclxuICAgIGNvbnN0IGlkeCA9IGFyci5pbmRleE9mKHZhbHVlKTtcclxuICAgIGlmIChpZHggPiAtMSkge1xyXG4gICAgICBhcnIuc3BsaWNlKGlkeCwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhcnIucHVzaCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVGaWx0ZXJEcm9wZG93bihrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5vcGVuRmlsdGVyS2V5ID0gdGhpcy5vcGVuRmlsdGVyS2V5ID09PSBrZXkgPyBudWxsIDoga2V5O1xyXG4gICAgdGhpcy5maWx0ZXJTZWFyY2hba2V5XSA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICBoYXNBY3RpdmVGaWx0ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzLnRlbXBsYXRlR3JvdXBOYW1lcy5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycy5maXh0dXJlTmFtZXMubGVuZ3RoID4gMCB8fFxyXG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlcnMuc3RvcmVOYW1lcy5sZW5ndGggPiAwXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5vcGVuRmlsdGVyS2V5ID0gbnVsbDtcclxuICAgIGlmICghdGhpcy5jYW52YXMgfHwgIXRoaXMuY2xpZW50SWQpIHJldHVybjtcclxuXHJcbiAgICAvLyBDbGVhciBjYW52YXMgYW5kIHJlLWZldGNoIHdpdGggZmlsdGVycyBmcm9tIEFQSVxyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gXCJcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRTdWJUZW1wbGF0ZUlkID0gXCJcIjtcclxuICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmdldE1hc3RlclRlbXBsYXRlTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGxGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJzID0ge1xyXG4gICAgICB0ZW1wbGF0ZUdyb3VwTmFtZXM6IFtdLFxyXG4gICAgICBmaXh0dXJlTmFtZXM6IFtdLFxyXG4gICAgICBzdG9yZU5hbWVzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLm9wZW5GaWx0ZXJLZXkgPSBudWxsO1xyXG4gICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGdldEFjdGl2ZUZpbHRlckNvdW50KGtleTogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAoKHRoaXMuYWN0aXZlRmlsdGVycyBhcyBhbnkpW2tleV0gPz8gW10pLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHJlbmRlckdyb3VwTmFtZXMoKSB7XHJcbiAgICBjb25zdCBtYXN0ZXJzID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAobSkgPT4gbS50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIsXHJcbiAgICApO1xyXG4gICAgY29uc3QgbWFzdGVyR3JvdXBOYW1lcyA9IEFycmF5LmZyb20oXHJcbiAgICAgIG5ldyBTZXQoXHJcbiAgICAgICAgbWFzdGVyc1xyXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi50ZW1wbGF0ZUdyb3VwTmFtZSlcclxuICAgICAgICAgIC5tYXAoKG0pID0+IG0udGVtcGxhdGVHcm91cE5hbWUpLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIW1hc3Rlckdyb3VwTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwiQEAgfiByZW5kZXJHcm91cE5hbWVzIFtFUlJdOiAobm9lIGdyb3VwIG5hbWVzIGZvdW5kKTogXCIsXHJcbiAgICAgICAgbWFzdGVyR3JvdXBOYW1lcyxcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSB8fCAhbWFzdGVyR3JvdXBOYW1lcy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID0gbWFzdGVyR3JvdXBOYW1lc1swXTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB5ID0gNTA7XHJcbiAgICBjb25zdCBncm91cFNwYWNpbmcgPSAyMDtcclxuXHJcbiAgICBjb25zdCBncm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcblxyXG4gICAgbWFzdGVyR3JvdXBOYW1lcy5mb3JFYWNoKChnKSA9PiB7XHJcbiAgICAgIGlmICghZykgcmV0dXJuO1xyXG4gICAgICBjb25zdCBsYWJlbCA9IGc7XHJcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gMTI7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmdYID0gMzA7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmdZID0gMTY7XHJcblxyXG4gICAgICBjb25zdCBtYWluVGV4dCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dChsYWJlbCwge1xyXG4gICAgICAgIGZvbnRTaXplOiBmb250U2l6ZSxcclxuICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCByZWN0V2lkdGggPSBtYWluVGV4dC53aWR0aCEgKyAyICogcGFkZGluZ1g7XHJcbiAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSBtYWluVGV4dC5oZWlnaHQhICsgMiAqIHBhZGRpbmdZO1xyXG4gICAgICBjb25zdCByZWN0TGVmdCA9IDMwO1xyXG4gICAgICBjb25zdCByZWN0VG9wID0gMTg7XHJcblxyXG4gICAgICBjb25zdCBtYWluUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgcng6IDYsXHJcbiAgICAgICAgcnk6IDYsXHJcbiAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHJlY3RIZWlnaHQsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiNGOEY5RkNcIiA6IFwiI2ZmZlwiLFxyXG4gICAgICAgIHN0cm9rZTogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiNBRkI1RDlcIiA6IFwiI0QwRDVERFwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgIGxlZnQ6IHJlY3RMZWZ0LFxyXG4gICAgICAgIHRvcDogcmVjdFRvcCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtYWluVGV4dC5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHJlY3RMZWZ0ICsgcGFkZGluZ1gsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wICsgKHJlY3RIZWlnaHQgLSBtYWluVGV4dC5oZWlnaHQhKSAvIDIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgYnViYmxlVyA9IDM2O1xyXG4gICAgICBjb25zdCBidWJibGVIID0gMTg7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUxlZnQgPSByZWN0TGVmdCArIHJlY3RXaWR0aCAvIDIgLSBidWJibGVXIC8gMjtcclxuICAgICAgY29uc3QgYnViYmxlVG9wID0gcmVjdEhlaWdodCArIGJ1YmJsZUggLyAyO1xyXG5cclxuICAgICAgY29uc3QgYnViYmxlUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgcng6IDQsXHJcbiAgICAgICAgcnk6IDQsXHJcbiAgICAgICAgd2lkdGg6IGJ1YmJsZVcsXHJcbiAgICAgICAgaGVpZ2h0OiBidWJibGVILFxyXG4gICAgICAgIGZpbGw6IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsID8gXCIjODM4OWM1XCIgOiBcIiM5OEEyQjNcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0LFxyXG4gICAgICAgIHRvcDogYnViYmxlVG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGdyb3VwQ291bnQgPSBtYXN0ZXJzLmZpbHRlcihcclxuICAgICAgICAobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gZyxcclxuICAgICAgKS5sZW5ndGg7XHJcblxyXG4gICAgICBjb25zdCBudW1iZXJUZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGdyb3VwQ291bnQudG9TdHJpbmcoKSwge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI3MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgbGVmdDogYnViYmxlTGVmdCArIGJ1YmJsZVcgLyAyLFxyXG4gICAgICAgIHRvcDogYnViYmxlVG9wICsgYnViYmxlSCAvIDIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICAgIFttYWluUmVjdCwgbWFpblRleHQsIGJ1YmJsZVJlY3QsIG51bWJlclRleHRdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgICBtYXN0ZXJDb3VudDogbnVtYmVyO1xyXG4gICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICBidWJibGVSZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGdyb3VwLmdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICBncm91cC5tYXN0ZXJDb3VudCA9IGdyb3VwQ291bnQ7XHJcbiAgICAgIGdyb3VwLm1haW5SZWN0ID0gbWFpblJlY3Q7XHJcbiAgICAgIGdyb3VwLmJ1YmJsZVJlY3QgPSBidWJibGVSZWN0O1xyXG5cclxuICAgICAgZ3JvdXAub24oXCJtb3VzZWRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRDbGljaykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJldkdyb3VwID0gdGhpcy5jYW52YXNcclxuICAgICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgICAgIChvYmogYXMgYW55KS5ncm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChwcmV2R3JvdXApIHtcclxuICAgICAgICAgIHByZXZHcm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNmZmZmZmZcIiwgc3Ryb2tlOiBcIiNEMEQ1RERcIiB9KTtcclxuICAgICAgICAgIHByZXZHcm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzk4QTJCM1wiIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjRjhGOUZDXCIsIHN0cm9rZTogXCIjQUZCNUQ5XCIgfSk7XHJcbiAgICAgICAgZ3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM4Mzg5YzVcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgc3RvcmUgbmFtZXMsIHN1YnMsIG1hc3RlcnMgYXJyb3dzIGJlZm9yZSByZW5kZXJpbmcgbmV3IHNldC5cclxuICAgICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdG9yZU5hbWVzXCIpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZFN1YlRlbXBsYXRlSWQpO1xyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSk7XHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID0gbGFiZWw7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBvcHQudGFyZ2V0O1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0IGluc3RhbmNlb2YgZmFicmljLkdyb3VwKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRHcm91cCA9IHRhcmdldCBhcyBmYWJyaWMuR3JvdXA7XHJcbiAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShwYXJlbnRHcm91cCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBwYXJlbnRHcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuXHJcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBsZXQgeCA9IChjYW52YXNXaWR0aCAtIHRvdGFsV2lkdGgpIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogeCwgdG9wOiB5IH0pO1xyXG4gICAgICB4ICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgICAgdGhpcy5jYW52YXMuYWRkKGdyb3VwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCA9IGdyb3Vwc1swXTtcclxuXHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyhneCwgZ3kgKyA1MCwgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlck1hc3RlckZpeHR1cmVzKHg6IG51bWJlciwgeTogbnVtYmVyLCBncm91cD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwibWFzdGVyXCIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyA9IFt0aGlzLm1hc3RlckZpeHR1cmVEYXRhXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YS5faWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgIChmKSA9PlxyXG4gICAgICAgICAgZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgJiZcclxuICAgICAgICAgIGYudGVtcGxhdGVHcm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXNbMF0uX2lkO1xyXG4gICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdG9yZU5hbWVzXCIpO1xyXG4gICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRTdWJUZW1wbGF0ZUlkKTtcclxuICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwibWFzdGVyXCIpO1xyXG4gICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbWFzdGVyczogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSAhPT0gXCJtYXN0ZXJcIilcclxuICAgICAgbWFzdGVycy5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZ3JvdXBOYW1lKSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCA9IG1hc3RlcnNbMF07XHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwKTtcclxuICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCwgZ3gsIGd5ICsgNTApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyU3ViRml4dHVyZXMoZ3JvdXA6IGFueSwgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHBhcmFtczogYW55ID0geyBtYXN0ZXJJZDogdGhpcy5zZWxlY3RlZE1hc3RlcklkIH07XHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJzLnN0b3JlTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmFtcy5zdG9yZU5hbWVzID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnN0b3JlTmFtZXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRUZW1wbGF0ZVRyZWVMaXN0KHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1YlRlbXBsYXRlcyA9IHJlcz8uZGF0YSA/PyBbXTtcclxuICAgICAgICAgIGlmICh0aGlzLnN1YlRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3ViOiBhbnlbXSA9IGF3YWl0IHRoaXMucmVuZGVyRml4dHVyZXMoXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJUZW1wbGF0ZXMsXHJcbiAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc3ViLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5maXh0dXJlSWQpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KFwiTWFzdGVyIGRvZXMgbm90IGhhdmUgYW55IHZhcmlhbnRcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxMb2FkRG9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxMb2FkRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbVRvRml0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QgW0VSUl06IFwiLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsTG9hZERvbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsTG9hZERvbmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnpvb21Ub0ZpdCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRml4dHVyZXMoXHJcbiAgICB0ZW1wbGF0ZXM6IGFueVtdLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgcGFyZW50RmFicmljPzogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgdHlwZSBGaXh0dXJlR3JvdXAgPSBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgICAgc3RvcmVDb3VudDogbnVtYmVyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBQcm9jZXNzIGFsbCB0ZW1wbGF0ZXMgaW4gcGFyYWxsZWwgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb25cclxuICAgIGNvbnN0IGdyb3VwczogRml4dHVyZUdyb3VwW10gPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGVtcGxhdGVzLm1hcChhc3luYyAobWYpID0+IHtcclxuICAgICAgICBjb25zdCBpc01hc3RlciA9IG1mLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIjtcclxuXHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgICAgICBsZXQgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCArIDE7XHJcbiAgICAgICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCAtIHRvcEhlaWdodCAvIDIgKyAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lclRvcCA9IGlzTWFzdGVyXHJcbiAgICAgICAgICA/IHkgKyAoKDE1IC8gMTAwKSAqIGhlaWdodCkgLyAyIC0gMVxyXG4gICAgICAgICAgOiB5IC0gMTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiBtYWluQ29udGFpbmVyVG9wLFxyXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtYWluQ29udGFpbmVySGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgICAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYEFzc2lnbmVkIHRvICR7bWYuc3RvcmVDb3VudCA/PyAwfSBTdG9yZXNgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICAgICAgbGV0IGlubmVyQm90dG9tQm94OiBmYWJyaWMuUGF0aDtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzcxN0JCQ1wiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgbGV0IGlubmVyQm90dG9tVGV4dDtcclxuXHJcbiAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBgJHttZj8uZml4dHVyZU5hbWV9YDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlQm90dG9tVGV4dCA9IChmczogYW55KSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICB9IHdoaWxlIChpbm5lckJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgICAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogbWlkWSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZkNvdW50ID0gbWYuc2hlbGZDb25maWc/Lmxlbmd0aDtcclxuICAgICAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSBtZi5oZWFkZXIubGFiZWwgd2l0aCBlbGxpcHNpcyBpZiBpdCBleGNlZWRzIHRoZSBhdmFpbGFibGUgd2lkdGhcclxuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBtZj8uaGVhZGVyPy5sYWJlbCA/PyBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRTaXplID0gNztcclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRGb250RmFtaWx5ID0gXCJJbnRlclwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRXZWlnaHQgPSBcIjYwMFwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dFdpZHRoID0gbWlkV2lkdGggLSA0MDsgLy8gbGVhdmUgc3BhY2UgZm9yIGljb25zIG9uIHJpZ2h0XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRlIHdpdGggZWxsaXBzaXMgaWYgbmVlZGVkXHJcbiAgICAgICAgbGV0IGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dDtcclxuICAgICAgICBpZiAobGFiZWxUZXh0KSB7XHJcbiAgICAgICAgICBsZXQgdGVtcFRleHRib3ggPSBuZXcgZmFicmljLlRleHRib3gobGFiZWxUZXh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBmaXJzdEJveFRleHRGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogZmlyc3RCb3hUZXh0Rm9udEZhbWlseSxcclxuICAgICAgICAgICAgZm9udFdlaWdodDogZmlyc3RCb3hUZXh0Rm9udFdlaWdodCxcclxuICAgICAgICAgICAgd2lkdGg6IGZpcnN0Qm94VGV4dFdpZHRoLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0b28gd2lkZSwgdHJ1bmNhdGUgYW5kIGFkZCBlbGxpcHNpc1xyXG4gICAgICAgICAgaWYgKHRlbXBUZXh0Ym94LmhlaWdodCA+IGJveEhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgICAvLyBCaW5hcnkgc2VhcmNoIGZvciBtYXggZml0dGluZyBsZW5ndGhcclxuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgcmlnaHQgPSBsYWJlbFRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xyXG4gICAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XHJcbiAgICAgICAgICAgICAgbGV0IHRlc3RUZXh0ID0gbGFiZWxUZXh0LnNsaWNlKDAsIG1pZCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICB0ZW1wVGV4dGJveC5zZXQoeyB0ZXh0OiB0ZXN0VGV4dCB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IG1pZDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGxlZnQtMSBpcyB0aGUgbWF4IGZpdHRpbmcgbGVuZ3RoXHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goZGlzcGxheUxhYmVsLCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgNixcclxuICAgICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIGZvbnRTaXplOiBmaXJzdEJveFRleHRGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IGZpcnN0Qm94VGV4dEZvbnRGYW1pbHksXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBmaXJzdEJveFRleHRGb250V2VpZ2h0LFxyXG4gICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IGZpcnN0Qm94VGV4dFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBpY29uU2l6ZSA9IDEwO1xyXG4gICAgICAgIGNvbnN0IGljb25TcGFjaW5nID0gNDtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Qm91bmRzID0gZmlyc3RCb3guZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgaWNvbnNUb3AgPVxyXG4gICAgICAgICAgZmlyc3RCb3hUZXh0Qm91bmRzLnRvcCArIGZpcnN0Qm94VGV4dEJvdW5kcy5oZWlnaHQgLyAyIC0gaWNvblNpemUgLyAyO1xyXG4gICAgICAgIGNvbnN0IGljb25zUGFkZGluZ1JpZ2h0ID0gNjtcclxuICAgICAgICBjb25zdCBpY29uc1RvdGFsV2lkdGggPSBpY29uU2l6ZSAqIDIgKyBpY29uU3BhY2luZztcclxuICAgICAgICBjb25zdCBpY29uc0xlZnRTdGFydCA9XHJcbiAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSBpY29uc1RvdGFsV2lkdGggLSBpY29uc1BhZGRpbmdSaWdodDtcclxuXHJcbiAgICAgICAgY29uc3QgZWRpdEljb25MZWZ0ID0gaWNvbnNMZWZ0U3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZWRpdEljb25Ub3AgPSBpY29uc1RvcDtcclxuICAgICAgICBjb25zdCBlZGl0SWNvblBhdGggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBcIk03LjEwMzU0IDEuMDYwMzVDNy4yMTE0NSAwLjk1MjQzNiA3LjMzOTU2IDAuODY2ODM0IDcuNDgwNTYgMC44MDg0MzJDNy42MjE1NSAwLjc1MDAzIDcuNzcyNjcgMC43MTk5NyA3LjkyNTI4IDAuNzE5OTdDOC4wNzc5IDAuNzE5OTcgOC4yMjkwMiAwLjc1MDAzIDguMzcwMDEgMC44MDg0MzJDOC41MTEwMSAwLjg2NjgzNCA4LjYzOTEyIDAuOTUyNDM2IDguNzQ3MDMgMS4wNjAzNUM4Ljg1NDk1IDEuMTY4MjYgOC45NDA1NSAxLjI5NjM3IDguOTk4OTUgMS40MzczN0M5LjA1NzM1IDEuNTc4MzcgOS4wODc0MSAxLjcyOTQ4IDkuMDg3NDEgMS44ODIxQzkuMDg3NDEgMi4wMzQ3MSA5LjA1NzM1IDIuMTg1ODMgOC45OTg5NSAyLjMyNjgyQzguOTQwNTUgMi40Njc4MiA4Ljg1NDk1IDIuNTk1OTMgOC43NDcwMyAyLjcwMzg0TDMuMjAwMjQgOC4yNTA2NEwwLjk0MDQzIDguODY2OTVMMS41NTY3NCA2LjYwNzE1TDcuMTAzNTQgMS4wNjAzNVpcIixcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogZWRpdEljb25MZWZ0LFxyXG4gICAgICAgICAgICB0b3A6IGVkaXRJY29uVG9wLFxyXG4gICAgICAgICAgICBzY2FsZVg6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgZmlsbDogXCJcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNzA0MzU1LFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVDYXA6IFwicm91bmRcIixcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW46IFwicm91bmRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICAoZWRpdEljb25QYXRoIGFzIGFueSkubmFtZSA9IFwiZWRpdEljb25cIjtcclxuXHJcbiAgICAgICAgY29uc3QgY29weUljb25MZWZ0ID0gZWRpdEljb25MZWZ0ICsgaWNvblNpemUgKyBpY29uU3BhY2luZztcclxuICAgICAgICBjb25zdCBjb3B5SWNvblRvcCA9IGVkaXRJY29uVG9wO1xyXG4gICAgICAgIGNvbnN0IGNvcHlJY29uUGF0aCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIFwiTTIuMDc3MzUgNS45OTA3N0wxLjY2NjQ3IDUuOTkwNzdDMS40NDg1MyA1Ljk5MDc3IDEuMjM5NTIgNS45MDQyIDEuMDg1NDEgNS43NTAwOUMwLjkzMTMwMyA1LjU5NTk4IDAuODQ0NzI3IDUuMzg2OTcgMC44NDQ3MjcgNS4xNjkwM0wwLjg0NDcyNyAxLjQ3MTE2QzAuODQ0NzI3IDEuMjUzMjIgMC45MzEzMDMgMS4wNDQyMSAxLjA4NTQxIDAuODkwMDk4QzEuMjM5NTIgMC43MzU5OTEgMS40NDg1MyAwLjY0OTQxNCAxLjY2NjQ3IDAuNjQ5NDE0TDUuMzY0MzQgMC42NDk0MTRDNS41ODIyOCAwLjY0OTQxNCA1Ljc5MTI5IDAuNzM1OTkxIDUuOTQ1NCAwLjg5MDA5OEM2LjA5OTUxIDEuMDQ0MjEgNi4xODYwOSAxLjI1MzIyIDYuMTg2MDkgMS40NzExNkw2LjE4NjA5IDEuODgyMDRNNC41NDI1OSAzLjUyNTUzTDguMjQwNDYgMy41MjU1M0M4LjY5NDI5IDMuNTI1NTMgOS4wNjIyIDMuODkzNDQgOS4wNjIyIDQuMzQ3MjhMOS4wNjIyIDguMDQ1MTRDOS4wNjIyIDguNDk4OTggOC42OTQyOSA4Ljg2Njg5IDguMjQwNDYgOC44NjY4OUw0LjU0MjU5IDguODY2ODlDNC4wODg3NSA4Ljg2Njg5IDMuNzIwODQgOC40OTg5OCAzLjcyMDg0IDguMDQ1MTRMMy43MjA4NCA0LjM0NzI4QzMuNzIwODQgMy44OTM0NCA0LjA4ODc1IDMuNTI1NTMgNC41NDI1OSAzLjUyNTUzWlwiLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBjb3B5SWNvbkxlZnQsXHJcbiAgICAgICAgICAgIHRvcDogY29weUljb25Ub3AsXHJcbiAgICAgICAgICAgIHNjYWxlWDogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgc2NhbGVZOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNzA0MzU1LFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVDYXA6IFwicm91bmRcIixcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW46IFwicm91bmRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgKGNvcHlJY29uUGF0aCBhcyBhbnkpLm5hbWUgPSBcImNvcHlJY29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gbWY/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGgsIHNocmluayBmb250IGlmIG5lZWRlZCB0byBmaXQgd2l0aGluIHNoZWxmIGhlaWdodFxyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgICBsZXQgZm9udFNpemVMMSA9IDY7IC8vIHN0YXJ0IHNsaWdodGx5IGxhcmdlcjsgd2lsbCBzaHJpbmsgdG8gZml0XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWYuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICAgICAgbWYuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgd2l0aCBlbGxpcHNpcyB3aXRoaW4gc2hlbGYgcmVjdCAobWlkV2lkdGgpXHJcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjsgLy8gcGFkZGluZyBpbnNpZGUgc2hlbGYgcmVjdFxyXG4gICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVzZSBzaW5nbGUtbGluZSB0ZXh0IG1lYXN1cmVtZW50IHRvIGF2b2lkIG11bHRpLWxpbmUgd3JhcHBpbmcgZHVyaW5nIG1lYXN1cmVtZW50XHJcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLCAvLyBtYXRjaCBzaGVsZiByZWN0IHdpZHRoXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgbWYuc2hlbGZDb25maWcpIHtcclxuICAgICAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzaGVsZkRhdGEuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBCb3R0b21MaW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZi5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveCh6b25lLCB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiIzcwNzA3MFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGxhYmVsVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWSA9IGdyb3VwVG9wWSArIChncm91cEJvdHRvbVkgLSBncm91cFRvcFkpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lPy5mb3JFYWNoKChicmFuZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IDIwO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY3JlYXRlVGV4dGJveCA9IChmczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBncm91cENlbnRlclRleHQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3RIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1mPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1mLnZtQ29uZmlnLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgdm0gPSBtZi52bUNvbmZpZ1tpXTtcclxuICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bT8udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IHdpZHRoIC8gdm1JbWFnZS53aWR0aCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiB2bUhlaWdodFB4IC8gdm1JbWFnZS5oZWlnaHQhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBsb2FkaW5nIGltYWdlIGZvciBWTTogJHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyLFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBFcnJvciBpbiBkcmF3aW5nIFZNOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICAgICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYCR7bWY/LmZvb3Rlcj8ubGFiZWwgPyBtZi5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBib3R0b21YLFxyXG4gICAgICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxTaGVsZkNvdW50ID1cclxuICAgICAgICAgIG1mPy5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpXHJcbiAgICAgICAgICAgID8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYFNoZWx2ZXMgLSAke2FjdHVhbFNoZWxmQ291bnR9IC4gUHJvZHVjdHMgLSAgJHttZi5maXh0dXJlQ2FwYWNpdHl9IC4gVk0gLSAke21mLnZtQ29uZmlnLmxlbmd0aH1gLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWd0aDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cENoaWxkcmVuID0gW1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICAgIC4uLighaXNNYXN0ZXIgPyBbdG9wQ29udGFpbmVyLCBpbm5lclRvcEJveCwgaW5uZXJUb3BUZXh0XSA6IFtdKSxcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0LFxyXG4gICAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgICAuLi4oIWlzTWFzdGVyID8gW2VkaXRJY29uUGF0aF0gOiBbXSksXHJcbiAgICAgICAgICBjb3B5SWNvblBhdGgsXHJcbiAgICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgICAgbGFzdEJveCxcclxuICAgICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChncm91cENoaWxkcmVuLCB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAvLyBhbmdsZTogbWYucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMFxyXG4gICAgICAgIH0pIGFzIEZpeHR1cmVHcm91cDtcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IG1mLl9pZDtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBtZi5maXh0dXJlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZ3JvdXBOYW1lID0gbWY/LnRlbXBsYXRlR3JvdXBOYW1lID8/IFwiXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnRlbXBsYXRlVHlwZSA9IG1mLnRlbXBsYXRlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAubmFtZSA9IG1mLnRlbXBsYXRlVHlwZSA/PyBcImZpeHR1cmVcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuc3RvcmVDb3VudCA9IG1mPy5zdG9yZUNvdW50ID8/IDA7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnBhcmVudEZhYnJpYyA9IHBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgICAgICBpZiAoY2hpbGROYW1lICE9PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGlzTWFzdGVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCAhPT0gbWYuX2lkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZXZlbnRDbGlja1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3RvcmVOYW1lc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkU3ViVGVtcGxhdGVJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBtZi5faWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShcclxuICAgICAgICAgICAgICBmaXh0dXJlR3JvdXAgYXMgZmFicmljLkdyb3VwLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclN1YkZpeHR1cmVzKGZpeHR1cmVHcm91cCwgZ3gsIGd5ICsgNTApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgIWlzTWFzdGVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWJUZW1wbGF0ZUlkICE9PSBtZi5faWQgJiZcclxuICAgICAgICAgICAgIXRoaXMucHJldmVudENsaWNrXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3RvcmVOYW1lc1wiKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkU3ViVGVtcGxhdGVJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdWJUZW1wbGF0ZUlkID0gbWYuX2lkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oXHJcbiAgICAgICAgICAgICAgZml4dHVyZUdyb3VwIGFzIGZhYnJpYy5Hcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJTdG9yZU5hbWVzKGZpeHR1cmVHcm91cCwgbWYuc3RvcmUgPz8gW10sIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICAgICAgfSksXHJcbiAgICApO1xyXG5cclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG4gICAgbGV0IG54ID0geCAtIHRvdGFsV2lkdGggLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiBueCwgdG9wOiB5IH0pO1xyXG4gICAgICBueCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICByZW5kZXJTdG9yZU5hbWVzKFxyXG4gICAgcGFyZW50R3JvdXA6IGZhYnJpYy5Hcm91cCxcclxuICAgIHN0b3JlczogeyBzdG9yZU5hbWU/OiBzdHJpbmc7IHN0b3JlSWQ/OiBzdHJpbmcgfVtdLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICkge1xyXG4gICAgaWYgKCFzdG9yZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KFwiTm8gc3RvcmVzIGFzc2lnbmVkIHRvIHRoaXMgdmFyaWFudFwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDE1O1xyXG4gICAgY29uc3QgZ3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG4gICAgbGV0IHRvdGFsV2lkdGggPSAwO1xyXG5cclxuICAgIHN0b3Jlcy5mb3JFYWNoKChzdG9yZSkgPT4ge1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHN0b3JlLnN0b3JlTmFtZSB8fCBcIlVubmFtZWQgU3RvcmVcIjtcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMTtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAyMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxMjtcclxuXHJcbiAgICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQobGFiZWwsIHtcclxuICAgICAgICBmb250U2l6ZSxcclxuICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyLCBBcmlhbCwgc2Fucy1zZXJpZlwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCByZWN0V2lkdGggPSB0ZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IHRleHQuaGVpZ2h0ISArIDIgKiBwYWRkaW5nWTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIHJ4OiA2LFxyXG4gICAgICAgIHJ5OiA2LFxyXG4gICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgIGZpbGw6IFwiI0Y4RjlGQ1wiLFxyXG4gICAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEuNSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0ZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcGFkZGluZ1gsXHJcbiAgICAgICAgdG9wOiAocmVjdEhlaWdodCAtIHRleHQuaGVpZ2h0ISkgLyAyLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbcmVjdCwgdGV4dF0sIHtcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBob3ZlckN1cnNvcjogXCJkZWZhdWx0XCIsXHJcbiAgICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgdGVtcGxhdGVUeXBlOiBzdHJpbmcgfTtcclxuXHJcbiAgICAgIGdyb3VwLnRlbXBsYXRlVHlwZSA9IFwic3RvcmVOYW1lc1wiO1xyXG5cclxuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG4gICAgbGV0IG54ID0geCAtIHRvdGFsV2lkdGggLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiBueCwgdG9wOiB5IH0pO1xyXG4gICAgICBueCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZChncm91cCk7XHJcbiAgICAgIHRoaXMuZHJhd0Fycm93KHBhcmVudEdyb3VwLCBncm91cCwgdGhpcy5zZWxlY3RlZFN1YlRlbXBsYXRlSWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRHcm91cENlbnRlckJvdHRvbShncm91cDogZmFicmljLkdyb3VwKTogeyBneDogbnVtYmVyOyBneTogbnVtYmVyIH0ge1xyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBjZW50ZXIueDtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBncm91cC50b3AhICsgZ3JvdXAuaGVpZ2h0ITtcclxuICAgIHJldHVybiB7IGd4OiBjZW50ZXJYLCBneTogYm90dG9tWSB9O1xyXG4gIH1cclxuXHJcbiAgY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyh0ZW1wbGF0ZVR5cGU6IHN0cmluZykge1xyXG4gICAgY29uc3QgZ3JvdXBzVG9SZW1vdmUgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgKG9iaiBhcyBhbnkpLnRlbXBsYXRlVHlwZSA9PT0gdGVtcGxhdGVUeXBlLFxyXG4gICAgICApO1xyXG5cclxuICAgIGlmIChncm91cHNUb1JlbW92ZSkge1xyXG4gICAgICBncm91cHNUb1JlbW92ZS5mb3JFYWNoKChncm91cCkgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGdyb3VwKSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdBcnJvdyhmcm9tR3JvdXA6IGZhYnJpYy5Hcm91cCwgdG9Hcm91cDogZmFicmljLkdyb3VwLCBhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZyb20gPSBmcm9tR3JvdXAuYUNvb3JkcyA/PyBmcm9tR3JvdXAuY2FsY09Db29yZHMoKTtcclxuICAgIGNvbnN0IHRvID0gdG9Hcm91cC5hQ29vcmRzID8/IHRvR3JvdXAuY2FsY09Db29yZHMoKTtcclxuXHJcbiAgICBjb25zdCBmcm9tWCA9IChmcm9tLmJsLnggKyBmcm9tLmJyLngpIC8gMjtcclxuICAgIGNvbnN0IGZyb21ZID0gKGZyb20uYmwueSArIGZyb20uYnIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IHRvWCA9ICh0by50bC54ICsgdG8udHIueCkgLyAyO1xyXG4gICAgY29uc3QgdG9ZID0gKHRvLnRsLnkgKyB0by50ci55KSAvIDI7XHJcblxyXG4gICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHRvWCAtIGZyb21YO1xyXG4gICAgY29uc3QgdmVydGljYWxPZmZzZXQgPSB0b1kgLSBmcm9tWTtcclxuICAgIGNvbnN0IGN1cnZlU2l6ZSA9IDE0O1xyXG5cclxuICAgIGxldCBwYXRoRGF0YSA9IFwiXCI7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGhvcml6b250YWxPZmZzZXQpIDwgNSkge1xyXG4gICAgICAvLyBEaXJlY3QgdmVydGljYWwgbGluZVxyXG4gICAgICBwYXRoRGF0YSA9IGBNICR7ZnJvbVh9ICR7ZnJvbVl9IEwgJHt0b1h9ICR7dG9ZfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtaWRZID0gZnJvbVkgKyB2ZXJ0aWNhbE9mZnNldCAvIDI7XHJcbiAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGhvcml6b250YWxPZmZzZXQgPiAwID8gMSA6IC0xO1xyXG5cclxuICAgICAgY29uc3QgY3VydmUxWCA9IGZyb21YICsgZGlyZWN0aW9uICogY3VydmVTaXplO1xyXG4gICAgICBjb25zdCBjdXJ2ZTJYID0gdG9YIC0gZGlyZWN0aW9uICogY3VydmVTaXplO1xyXG5cclxuICAgICAgcGF0aERhdGEgPSBbXHJcbiAgICAgICAgYE0gJHtmcm9tWH0gJHtmcm9tWX1gLFxyXG4gICAgICAgIGBMICR7ZnJvbVh9ICR7bWlkWSAtIGN1cnZlU2l6ZX1gLFxyXG4gICAgICAgIGBRICR7ZnJvbVh9ICR7bWlkWX0gJHtjdXJ2ZTFYfSAke21pZFl9YCxcclxuICAgICAgICBgTCAke2N1cnZlMlh9ICR7bWlkWX1gLFxyXG4gICAgICAgIGBRICR7dG9YfSAke21pZFl9ICR7dG9YfSAke21pZFkgKyBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgTCAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgXS5qb2luKFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhcnJvd0xpbmUgPSBuZXcgZmFicmljLlBhdGgocGF0aERhdGEsIHtcclxuICAgICAgc3Ryb2tlOiBcIiNBRkI1RDlcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDEuOCxcclxuICAgICAgZmlsbDogXCJcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQXJyb3doZWFkXHJcbiAgICBjb25zdCBhbmdsZSA9IE1hdGguYXRhbjIodG9ZIC0gKHRvWSAtIDEwKSwgdG9YIC0gdG9YKTtcclxuICAgIGNvbnN0IGhlYWRsZW4gPSAxMDtcclxuICAgIGNvbnN0IGFycm93SGVhZCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgW1xyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlIC0gTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlIC0gTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgICAgYE0gJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgICAgYEwgJHt0b1ggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNSl9ICR7XHJcbiAgICAgICAgICB0b1kgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNSlcclxuICAgICAgICB9YCxcclxuICAgICAgXS5qb2luKFwiIFwiKSxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEuOCxcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gR3JvdXBpbmcgYm90aCBsaW5lIGFuZCBhcnJvd2hlYWRcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvd0xpbmUsIGFycm93SGVhZF0sIHtcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYgeyBhcnJvd0lkOiBzdHJpbmcgfTtcclxuXHJcbiAgICAvLyBBdHRhY2ggY3VzdG9tIGFycm93IElEXHJcbiAgICBhcnJvd0dyb3VwLmFycm93SWQgPSBhcnJvd0lkO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChhcnJvd0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQXJyb3dCeUlkKGFycm93SWQ6IHN0cmluZykge1xyXG4gICAgaWYgKCFhcnJvd0lkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYXJyb3dHcm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcihcclxuICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmIChvYmogYXMgYW55KS5hcnJvd0lkID09PSBhcnJvd0lkLFxyXG4gICAgICApO1xyXG5cclxuICAgIGlmIChhcnJvd0dyb3VwLmxlbmd0aCkge1xyXG4gICAgICBhcnJvd0dyb3VwLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EdXBsaWNhdGUoZml4dHVyZTogYW55KSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmR1cGxpY2F0ZUZpeHR1cmVUZW1wbGF0ZSh7IHRlbXBsYXRlSWQ6IGZpeHR1cmUuZml4dHVyZUlkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Rml4dHVyZSA9XHJcbiAgICAgICAgICAgICAgZml4dHVyZS50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCJcclxuICAgICAgICAgICAgICAgID8gZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgOiBmaXh0dXJlLnBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBjdXJyZW50Rml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShjdXJyZW50Rml4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoY3VycmVudEZpeHR1cmUsIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fCBcIkZhaWxlZCB0byBjcmVhdGUgdmFyaWFudFwiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUgW2Vycl06XCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwidHJlZS1jYW52YXMtY2FyZFwiIGNsYXNzPVwidy0xMDAgcC02XCI+XHJcbiAgPCEtLSBGaWx0ZXIgYmFyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJ0cmVlLWZpbHRlci1iYXJcIiAqbmdJZj1cInZpZXdNb2RlID09PSAnZ3JvdXAnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNoaXBzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItY2hpcFwiICpuZ0Zvcj1cImxldCBmaWx0ZXJLZXkgb2YgWyd0ZW1wbGF0ZUdyb3VwTmFtZXMnLCAnZml4dHVyZU5hbWVzJywgJ3N0b3JlTmFtZXMnXVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLWJ0blwiXHJcbiAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImdldEFjdGl2ZUZpbHRlckNvdW50KGZpbHRlcktleSkgPiAwXCJcclxuICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJEcm9wZG93bihmaWx0ZXJLZXkpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBmaWx0ZXJLZXkgPT09ICd0ZW1wbGF0ZUdyb3VwTmFtZXMnID8gJ1RlbXBsYXRlIEdyb3VwJyA6IGZpbHRlcktleSA9PT0gJ2ZpeHR1cmVOYW1lcycgPyAnTWFzdGVyIFRlbXBsYXRlJyA6ICdTdG9yZSBOYW1lJyB9fVxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWx0ZXItY291bnRcIiAqbmdJZj1cImdldEFjdGl2ZUZpbHRlckNvdW50KGZpbHRlcktleSkgPiAwXCI+e3sgZ2V0QWN0aXZlRmlsdGVyQ291bnQoZmlsdGVyS2V5KSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjZcIiB2aWV3Qm94PVwiMCAwIDEwIDZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk0xIDFMNSA1TDkgMVwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWRyb3Bkb3duXCIgKm5nSWY9XCJvcGVuRmlsdGVyS2V5ID09PSBmaWx0ZXJLZXlcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItc2VhcmNoXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTZWFyY2hbZmlsdGVyS2V5XVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICBjbGFzcz1cImZpbHRlci1vcHRpb25cIlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0RmlsdGVyZWRPcHRpb25zKGZpbHRlcktleSlcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNGaWx0ZXJTZWxlY3RlZChmaWx0ZXJLZXksIG9wdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGaWx0ZXIoZmlsdGVyS2V5LCBvcHRpb24pXCJcclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1lbXB0eVwiICpuZ0lmPVwiZ2V0RmlsdGVyZWRPcHRpb25zKGZpbHRlcktleSkubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgTm8gb3B0aW9ucyBmb3VuZFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJmaWx0ZXItYXBwbHktYnRuXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCI+QXBwbHk8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJmaWx0ZXItY2xlYXItYnRuXCIgKm5nSWY9XCJoYXNBY3RpdmVGaWx0ZXJzKClcIiAoY2xpY2spPVwiY2xlYXJBbGxGaWx0ZXJzKClcIj5cclxuICAgICAgICBDbGVhciBhbGxcclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGNhbnZhcyBpZD1cInRlbXBsYXRlLWNhbnZhc1wiICN0ZW1wbGF0ZUNhbnZhcz48L2NhbnZhcz5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjQuODQzMVwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzYxNzJGM1wiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMCBtZS0zXCI+TWFzdGVyIFRlbXBsYXRlPC9wPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDExIDExXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiNS40NDQ2NlwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzMzQjVGRlwiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMFwiPlZhcmlhbnQvQ2hpbGQgVGVtcGxhdGU8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ6b29tXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLWluXCIgKGNsaWNrKT1cInpvb21JbigpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDVWMTlNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLW91dFwiIChjbGljayk9XCJ6b29tT3V0KClcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
1506
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS10cmVlL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1uRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxxQkFBcUI7SUEwQ3RCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE3Q0QsUUFBUSxHQUF1QixPQUFPLENBQUM7SUFDdkMsUUFBUSxDQUFVLENBQUMsdURBQXVEO0lBQzFFLGlCQUFpQixDQUFPLENBQUMsMkNBQTJDO0lBQ3BFLFVBQVUsQ0FBUyxDQUFDLDBDQUEwQztJQUd2RSxRQUFRLENBQWlD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VTtzQkFBbEIsS0FBSztnQkFHTixRQUFRO3NCQURQLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQWdEOUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgVHJlZUZpbHRlclN0YXRlLFxyXG4gIFRyZWVGaWx0ZXJPcHRpb25zLFxyXG59IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL2ZpeHR1cmUtdGVtcGxhdGUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgZ2V0Rml4dHVyZUNhbnZhc0xhYmVsIH0gZnJvbSBcIi4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZml4dHVyZS10ZW1wbGF0ZS10cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSB2aWV3TW9kZTogXCJncm91cFwiIHwgXCJtYXN0ZXJcIiA9IFwiZ3JvdXBcIjtcclxuICBASW5wdXQoKSBjbGllbnRJZD86IHN0cmluZzsgLy8gVXNlZCB0byBmZXRjaCBhbGwgbWFzdGVycyB3aGVuIG1vZGUgaXMgc2V0IHRvIGdyb3VwLlxyXG4gIEBJbnB1dCgpIG1hc3RlckZpeHR1cmVEYXRhPzogYW55OyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBtYXN0ZXIuXHJcbiAgQElucHV0KCkgYWxsRml4dHVyZT86IGFueVtdOyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBzdG9yZS5cclxuXHJcbiAgQFZpZXdDaGlsZChcInRlbXBsYXRlQ2FudmFzXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGNhbnZhc0VsITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuXHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcblxyXG4gIGFsbE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzdWJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcblxyXG4gIHNlbGVjdGVkR3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU3ViVGVtcGxhdGVJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgLy8gRmlsdGVyIHN0YXRlXHJcbiAgZmlsdGVyT3B0aW9uczogVHJlZUZpbHRlck9wdGlvbnMgPSB7XHJcbiAgICB0ZW1wbGF0ZUdyb3VwTmFtZXM6IFtdLFxyXG4gICAgZml4dHVyZU5hbWVzOiBbXSxcclxuICAgIHN0b3JlTmFtZXM6IFtdLFxyXG4gIH07XHJcbiAgYWN0aXZlRmlsdGVyczogVHJlZUZpbHRlclN0YXRlID0ge1xyXG4gICAgdGVtcGxhdGVHcm91cE5hbWVzOiBbXSxcclxuICAgIGZpeHR1cmVOYW1lczogW10sXHJcbiAgICBzdG9yZU5hbWVzOiBbXSxcclxuICB9O1xyXG4gIHByaXZhdGUgaW5pdGlhbExvYWREb25lID0gZmFsc2U7XHJcbiAgZmlsdGVyU2VhcmNoOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgb3BlbkZpbHRlcktleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICApIHtcclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkgdGhpcy5jZG5VcmwgPSBlLnBsYW5vZ3JhbUNETjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiXSlcclxuICBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICh0aGlzLm9wZW5GaWx0ZXJLZXkgJiYgIXRhcmdldC5jbG9zZXN0KFwiLmZpbHRlci1jaGlwXCIpKSB7XHJcbiAgICAgIHRoaXMub3BlbkZpbHRlcktleSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzRWw/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKTtcclxuXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCBcInJlc2l6ZVwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpKTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5mZXRjaEZpbHRlck9wdGlvbnMoKTtcclxuICAgIHRoaXMuYnVpbGRUcmVlVmlldygpO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCBhc3luYyAob3B0OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gb3B0LnRhcmdldCBhcyBhbnk7XHJcbiAgICAgIGNvbnN0IGNoaWxkTmFtZSA9IG9wdC5zdWJUYXJnZXRzPy5bMF0/Lm5hbWU7XHJcblxyXG4gICAgICBpZiAoIWNoaWxkTmFtZSkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKGNoaWxkTmFtZSA9PT0gXCJlZGl0SWNvblwiKSB7XHJcbiAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRWRpdChwYXJlbnQuc3RvcmVDb3VudCkpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICBbXCIvbWFuYWdlL3BsYW5vZ3JhbS9maXh0dXJlLXRlbXBsYXRlL2Jhc2ljLWRldGFpbHNcIl0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGVJZDogcGFyZW50LmZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICBpc0VkaXQ6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjaGlsZE5hbWUgPT09IFwiY29weUljb25cIikge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9XHJcbiAgICAgICAgICBwYXJlbnQudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiID8gcGFyZW50IDogb3B0LnN1YlRhcmdldHM/LlswXS5ncm91cDtcclxuICAgICAgICB0aGlzLm9uRHVwbGljYXRlKHRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUVkaXQoY291bnQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKGNvdW50IDw9IDApIHJldHVybiB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBgRWRpdCB0ZW1wbGF0ZWA7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFlvdSBhcmUgYWJvdXQgdG8gZWRpdCBhbiBhY3RpdmUgdGVtcGxhdGUuIFBsZWFzZSByZXZpZXcgYW5kIHB1Ymxpc2ggdGhlIGNoYW5nZXNgO1xyXG4gICAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnVpbGRUcmVlVmlldygpIHtcclxuICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcImdyb3VwXCIgJiYgdGhpcy5jbGllbnRJZCkge1xyXG4gICAgICB0aGlzLmdldE1hc3RlclRlbXBsYXRlTGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSBcIm1hc3RlclwiICYmIHRoaXMubWFzdGVyRml4dHVyZURhdGEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YS5faWQ7XHJcblxyXG4gICAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICAgIGxldCB4ID0gY2FudmFzV2lkdGggLyAyO1xyXG4gICAgICBsZXQgeSA9IDUwO1xyXG4gICAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKHgsIHkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TWFzdGVyVGVtcGxhdGVMaXN0KCkge1xyXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7IGNsaWVudElkOiB0aGlzLmNsaWVudElkIH07XHJcblxyXG4gICAgLy8gUGFzcyBhY3RpdmUgZmlsdGVycyB0byB0aGUgQVBJXHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJzLnRlbXBsYXRlR3JvdXBOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgcGFyYW1zLnRlbXBsYXRlR3JvdXBOYW1lcyA9IHRoaXMuYWN0aXZlRmlsdGVycy50ZW1wbGF0ZUdyb3VwTmFtZXM7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJzLmZpeHR1cmVOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgcGFyYW1zLmZpeHR1cmVOYW1lcyA9IHRoaXMuYWN0aXZlRmlsdGVycy5maXh0dXJlTmFtZXM7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJzLnN0b3JlTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIHBhcmFtcy5zdG9yZU5hbWVzID0gdGhpcy5hY3RpdmVGaWx0ZXJzLnN0b3JlTmFtZXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRUZW1wbGF0ZVRyZWVMaXN0KHBhcmFtcylcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcyA9IHJlcz8uZGF0YSA/PyBbXTtcclxuXHJcbiAgICAgICAgICAvLyBPbmNlIHRoZSBtYXN0ZXIgdGVtcGxhdGUgaXMgZmV0Y2hlZCwgcmVuZGVyIHRoZSBncm91cCBuYW1lcy5cclxuICAgICAgICAgIHRoaXMucmVuZGVyR3JvdXBOYW1lcygpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgZ2V0TWFzdGVyVGVtcGxhdGVMaXN0IFtFUlJdOiBcIiwgZXJyKTtcclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIC8vIFBpbmNoLXRvLXpvb20gKHRyYWNrcGFkKSBvciBDdHJsK3Njcm9sbCAobW91c2UpXHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG5cclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4wNSwgTWF0aC5taW4oem9vbSwgNSkpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeDogZS5vZmZzZXRYLFxyXG4gICAgICAgICAgICB5OiBlLm9mZnNldFksXHJcbiAgICAgICAgICB9IGFzIGZhYnJpYy5Qb2ludCxcclxuICAgICAgICAgIHpvb20sXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBUd28tZmluZ2VyIHRyYWNrcGFkIHN3aXBlIOKGkiBwYW4gY2FudmFzXHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgaWYgKHZwdCkge1xyXG4gICAgICAgICAgdnB0WzRdIC09IGUuZGVsdGFYO1xyXG4gICAgICAgICAgdnB0WzVdIC09IGUuZGVsdGFZO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbih6b29tICsgMC4yLCAzKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1heCh6b29tIC0gMC4yLCAwLjIpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzbW9vdGhab29tKHRhcmdldFpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IGZhYnJpYy5Qb2ludChcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDIsXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMixcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHN0ZXBzID0gMTA7XHJcbiAgICBjb25zdCBzdGVwU2l6ZSA9ICh0YXJnZXRab29tIC0gY3VycmVudFpvb20pIC8gc3RlcHM7XHJcbiAgICBsZXQgc3RlcCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0ZXAgPCBzdGVwcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgY3VycmVudFpvb20gKyBzdGVwU2l6ZSAqIChzdGVwICsgMSkpO1xyXG4gICAgICAgIHN0ZXArKztcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCB0YXJnZXRab29tKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICB6b29tVG9GaXQoKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBib3VuZGluZyBib3ggb2YgYWxsIG9iamVjdHNcclxuICAgIGxldCBtaW5YID0gSW5maW5pdHk7XHJcbiAgICBsZXQgbWluWSA9IEluZmluaXR5O1xyXG4gICAgbGV0IG1heFggPSAtSW5maW5pdHk7XHJcbiAgICBsZXQgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBvYmplY3RzLmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBjb25zdCBib3VuZHMgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBib3VuZHMubGVmdCk7XHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCBib3VuZHMudG9wKTtcclxuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoKTtcclxuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IG1heFggLSBtaW5YO1xyXG4gICAgY29uc3QgY29udGVudEhlaWdodCA9IG1heFkgLSBtaW5ZO1xyXG4gICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgY29uc3QgcGFkZGluZyA9IDQwO1xyXG4gICAgY29uc3Qgc2NhbGVYID0gKGNhbnZhc1dpZHRoIC0gcGFkZGluZyAqIDIpIC8gY29udGVudFdpZHRoO1xyXG4gICAgY29uc3Qgc2NhbGVZID0gKGNhbnZhc0hlaWdodCAtIHBhZGRpbmcgKiAyKSAvIGNvbnRlbnRIZWlnaHQ7XHJcbiAgICBjb25zdCB6b29tID0gTWF0aC5taW4oc2NhbGVYLCBzY2FsZVksIDEpOyAvLyBEb24ndCB6b29tIGluIGJleW9uZCAxeFxyXG5cclxuICAgIC8vIFJlc2V0IHZpZXdwb3J0LCB0aGVuIHNldCB6b29tIGFuZCBjZW50ZXJcclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKFsxLCAwLCAwLCAxLCAwLCAwXSk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IChtaW5YICsgbWF4WCkgLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IChtaW5ZICsgbWF4WSkgLyAyO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KFxyXG4gICAgICBuZXcgZmFicmljLlBvaW50KGNhbnZhc1dpZHRoIC8gMiwgY2FudmFzSGVpZ2h0IC8gMiksXHJcbiAgICAgIHpvb20sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFBhbiBzbyB0aGUgY29udGVudCBjZW50ZXIgYWxpZ25zIHdpdGggY2FudmFzIGNlbnRlclxyXG4gICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hO1xyXG4gICAgdnB0WzRdID0gY2FudmFzV2lkdGggLyAyIC0gY2VudGVyWCAqIHpvb207XHJcbiAgICB2cHRbNV0gPSBjYW52YXNIZWlnaHQgLyAyIC0gY2VudGVyWSAqIHpvb207XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSB7XHJcbiAgICBjb25zdCBjYW52YXNDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgXCJ0cmVlLWNhbnZhcy1jYXJkXCIsXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGNhbnZhc0NvbCkge1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbC5vZmZzZXRXaWR0aCAtIDMyO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXNDb2wub2Zmc2V0SGVpZ2h0IC0gMzI7XHJcbiAgICAgIHRoaXMuY2hhbmdlQ2FudmFzU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUNhbnZhc1NpemUobmV3V2lkdGg6IG51bWJlciwgbmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSB0aGlzLmNhbnZhc0VsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzRWxlbWVudC53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgY2FudmFzRWxlbWVudC5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0V2lkdGgobmV3V2lkdGgpO1xyXG4gICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KG5ld0hlaWdodCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHRvUGl4ZWxzKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KSB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDIpKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLSBGaWx0ZXIgbWV0aG9kcyAtLS1cclxuXHJcbiAgZmV0Y2hGaWx0ZXJPcHRpb25zKCkge1xyXG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSByZXR1cm47XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldFRyZWVGaWx0ZXJPcHRpb25zKHRoaXMuY2xpZW50SWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgdGVtcGxhdGVHcm91cE5hbWVzOiByZXMuZGF0YS50ZW1wbGF0ZUdyb3VwTmFtZXMgPz8gW10sXHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWVzOiByZXMuZGF0YS5maXh0dXJlTmFtZXMgPz8gW10sXHJcbiAgICAgICAgICAgICAgc3RvcmVOYW1lczogcmVzLmRhdGEuc3RvcmVOYW1lcyA/PyBbXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGZldGNoRmlsdGVyT3B0aW9ucyBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRGaWx0ZXJlZE9wdGlvbnMoa2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBvcHRpb25zID0gKHRoaXMuZmlsdGVyT3B0aW9ucyBhcyBhbnkpW2tleV0gPz8gW107XHJcbiAgICBjb25zdCBzZWFyY2ggPSAodGhpcy5maWx0ZXJTZWFyY2hba2V5XSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKCFzZWFyY2gpIHJldHVybiBvcHRpb25zO1xyXG4gICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKChvOiBzdHJpbmcpID0+IG8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpKTtcclxuICB9XHJcblxyXG4gIGlzRmlsdGVyU2VsZWN0ZWQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuYWN0aXZlRmlsdGVycyBhcyBhbnkpW2tleV0gPz8gW10pLmluY2x1ZGVzKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlcihrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgYXJyOiBzdHJpbmdbXSA9ICh0aGlzLmFjdGl2ZUZpbHRlcnMgYXMgYW55KVtrZXldO1xyXG4gICAgY29uc3QgaWR4ID0gYXJyLmluZGV4T2YodmFsdWUpO1xyXG4gICAgaWYgKGlkeCA+IC0xKSB7XHJcbiAgICAgIGFyci5zcGxpY2UoaWR4LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFyci5wdXNoKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUZpbHRlckRyb3Bkb3duKGtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9wZW5GaWx0ZXJLZXkgPSB0aGlzLm9wZW5GaWx0ZXJLZXkgPT09IGtleSA/IG51bGwgOiBrZXk7XHJcbiAgICB0aGlzLmZpbHRlclNlYXJjaFtrZXldID0gXCJcIjtcclxuICB9XHJcblxyXG4gIGhhc0FjdGl2ZUZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmFjdGl2ZUZpbHRlcnMudGVtcGxhdGVHcm91cE5hbWVzLmxlbmd0aCA+IDAgfHxcclxuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzLmZpeHR1cmVOYW1lcy5sZW5ndGggPiAwIHx8XHJcbiAgICAgIHRoaXMuYWN0aXZlRmlsdGVycy5zdG9yZU5hbWVzLmxlbmd0aCA+IDBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLm9wZW5GaWx0ZXJLZXkgPSBudWxsO1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcyB8fCAhdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIENsZWFyIGNhbnZhcyBhbmQgcmUtZmV0Y2ggd2l0aCBmaWx0ZXJzIGZyb20gQVBJXHJcbiAgICB0aGlzLmNhbnZhcy5jbGVhcigpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9IFwiXCI7XHJcbiAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBcIlwiO1xyXG4gICAgdGhpcy5zZWxlY3RlZFN1YlRlbXBsYXRlSWQgPSBcIlwiO1xyXG4gICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuZ2V0TWFzdGVyVGVtcGxhdGVMaXN0KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlcnMgPSB7XHJcbiAgICAgIHRlbXBsYXRlR3JvdXBOYW1lczogW10sXHJcbiAgICAgIGZpeHR1cmVOYW1lczogW10sXHJcbiAgICAgIHN0b3JlTmFtZXM6IFtdLFxyXG4gICAgfTtcclxuICAgIHRoaXMub3BlbkZpbHRlcktleSA9IG51bGw7XHJcbiAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWN0aXZlRmlsdGVyQ291bnQoa2V5OiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuICgodGhpcy5hY3RpdmVGaWx0ZXJzIGFzIGFueSlba2V5XSA/PyBbXSkubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyR3JvdXBOYW1lcygpIHtcclxuICAgIGNvbnN0IG1hc3RlcnMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgIChtKSA9PiBtLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIixcclxuICAgICk7XHJcbiAgICBjb25zdCBtYXN0ZXJHcm91cE5hbWVzID0gQXJyYXkuZnJvbShcclxuICAgICAgbmV3IFNldChcclxuICAgICAgICBtYXN0ZXJzXHJcbiAgICAgICAgICAuZmlsdGVyKChmKSA9PiBmLnRlbXBsYXRlR3JvdXBOYW1lKVxyXG4gICAgICAgICAgLm1hcCgobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSksXHJcbiAgICAgICksXHJcbiAgICApO1xyXG5cclxuICAgIGlmICghbWFzdGVyR3JvdXBOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgXCJAQCB+IHJlbmRlckdyb3VwTmFtZXMgW0VSUl06IChub2UgZ3JvdXAgbmFtZXMgZm91bmQpOiBcIixcclxuICAgICAgICBtYXN0ZXJHcm91cE5hbWVzLFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkR3JvdXBOYW1lIHx8ICFtYXN0ZXJHcm91cE5hbWVzLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUpKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBtYXN0ZXJHcm91cE5hbWVzWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHkgPSA1MDtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBtYXN0ZXJHcm91cE5hbWVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgaWYgKCFnKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gZztcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMjtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAzMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxNjtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxyXG4gICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1haW5UZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IG1haW5UZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gMzA7XHJcbiAgICAgIGNvbnN0IHJlY3RUb3AgPSAxODtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5SZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0Y4RjlGQ1wiIDogXCIjZmZmXCIsXHJcbiAgICAgICAgc3Ryb2tlOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0FGQjVEOVwiIDogXCIjRDBENUREXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1haW5UZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQgKyBwYWRkaW5nWCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AgKyAocmVjdEhlaWdodCAtIG1haW5UZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVXID0gMzY7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUggPSAxODtcclxuICAgICAgY29uc3QgYnViYmxlTGVmdCA9IHJlY3RMZWZ0ICsgcmVjdFdpZHRoIC8gMiAtIGJ1YmJsZVcgLyAyO1xyXG4gICAgICBjb25zdCBidWJibGVUb3AgPSByZWN0SGVpZ2h0ICsgYnViYmxlSCAvIDI7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNCxcclxuICAgICAgICByeTogNCxcclxuICAgICAgICB3aWR0aDogYnViYmxlVyxcclxuICAgICAgICBoZWlnaHQ6IGJ1YmJsZUgsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiM4Mzg5YzVcIiA6IFwiIzk4QTJCM1wiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBDb3VudCA9IG1hc3RlcnMuZmlsdGVyKFxyXG4gICAgICAgIChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lID09PSBnLFxyXG4gICAgICApLmxlbmd0aDtcclxuXHJcbiAgICAgIGNvbnN0IG51bWJlclRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQoZ3JvdXBDb3VudC50b1N0cmluZygpLCB7XHJcbiAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgZmlsbDogXCIjZmZmXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjcwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0ICsgYnViYmxlVyAvIDIsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AgKyBidWJibGVIIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgICAgW21haW5SZWN0LCBtYWluVGV4dCwgYnViYmxlUmVjdCwgbnVtYmVyVGV4dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICAgIG1hc3RlckNvdW50OiBudW1iZXI7XHJcbiAgICAgICAgbWFpblJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ3JvdXAuZ3JvdXBOYW1lID0gbGFiZWw7XHJcbiAgICAgIGdyb3VwLm1hc3RlckNvdW50ID0gZ3JvdXBDb3VudDtcclxuICAgICAgZ3JvdXAubWFpblJlY3QgPSBtYWluUmVjdDtcclxuICAgICAgZ3JvdXAuYnViYmxlUmVjdCA9IGJ1YmJsZVJlY3Q7XHJcblxyXG4gICAgICBncm91cC5vbihcIm1vdXNlZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV2R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmXHJcbiAgICAgICAgICAgICAgKG9iaiBhcyBhbnkpLmdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgICAgbWFpblJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgICAgYnViYmxlUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHByZXZHcm91cCkge1xyXG4gICAgICAgICAgcHJldkdyb3VwLm1haW5SZWN0LnNldCh7IGZpbGw6IFwiI2ZmZmZmZlwiLCBzdHJva2U6IFwiI0QwRDVERFwiIH0pO1xyXG4gICAgICAgICAgcHJldkdyb3VwLmJ1YmJsZVJlY3Quc2V0KHsgZmlsbDogXCIjOThBMkIzXCIgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNGOEY5RkNcIiwgc3Ryb2tlOiBcIiNBRkI1RDlcIiB9KTtcclxuICAgICAgICBncm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzgzODljNVwiIH0pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBzdG9yZSBuYW1lcywgc3VicywgbWFzdGVycyBhcnJvd3MgYmVmb3JlIHJlbmRlcmluZyBuZXcgc2V0LlxyXG4gICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN0b3JlTmFtZXNcIik7XHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkU3ViVGVtcGxhdGVJZCk7XHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lKTtcclxuICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9wdC50YXJnZXQ7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXApIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGFyZ2V0IGFzIGZhYnJpYy5Hcm91cDtcclxuICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHBhcmVudEdyb3VwKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHBhcmVudEdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGxldCB4ID0gKGNhbnZhc1dpZHRoIC0gdG90YWxXaWR0aCkgLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiB4LCB0b3A6IHkgfSk7XHJcbiAgICAgIHggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwID0gZ3JvdXBzWzBdO1xyXG5cclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyTWFzdGVyRml4dHVyZXMoeDogbnVtYmVyLCB5OiBudW1iZXIsIGdyb3VwPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYXN0ZXJcIikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gW3RoaXMubWFzdGVyRml4dHVyZURhdGFdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSB0aGlzLm1hc3RlckZpeHR1cmVEYXRhLl9pZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICBmLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIiAmJlxyXG4gICAgICAgICAgZi50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlc1swXS5faWQ7XHJcbiAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN0b3JlTmFtZXNcIik7XHJcbiAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZFN1YlRlbXBsYXRlSWQpO1xyXG4gICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJtYXN0ZXJcIik7XHJcbiAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXN0ZXJzOiBhbnlbXSA9IGF3YWl0IHRoaXMucmVuZGVyRml4dHVyZXMoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMsXHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLnZpZXdNb2RlICE9PSBcIm1hc3RlclwiKVxyXG4gICAgICBtYXN0ZXJzLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5ncm91cE5hbWUpKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwID0gbWFzdGVyc1swXTtcclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJTdWJGaXh0dXJlcyhncm91cDogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7IG1hc3RlcklkOiB0aGlzLnNlbGVjdGVkTWFzdGVySWQgfTtcclxuICAgIGlmICh0aGlzLmFjdGl2ZUZpbHRlcnMuc3RvcmVOYW1lcy5sZW5ndGgpIHtcclxuICAgICAgcGFyYW1zLnN0b3JlTmFtZXMgPSB0aGlzLmFjdGl2ZUZpbHRlcnMuc3RvcmVOYW1lcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldFRlbXBsYXRlVHJlZUxpc3QocGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzID0gcmVzPy5kYXRhID8/IFtdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc3ViVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdWI6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgICAgICAgICB0aGlzLnN1YlRlbXBsYXRlcyxcclxuICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzdWIuZm9yRWFjaCgobSkgPT4gdGhpcy5kcmF3QXJyb3coZ3JvdXAsIG0sIGdyb3VwLmZpeHR1cmVJZCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoXCJNYXN0ZXIgZG9lcyBub3QgaGF2ZSBhbnkgdmFyaWFudFwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbExvYWREb25lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbExvYWREb25lID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy56b29tVG9GaXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldE1hc3RlclRlbXBsYXRlTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxMb2FkRG9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRpYWxMb2FkRG9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbVRvRml0KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJGaXh0dXJlcyhcclxuICAgIHRlbXBsYXRlczogYW55W10sXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBwYXJlbnRGYWJyaWM/OiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCBncm91cFNwYWNpbmcgPSAyMDtcclxuXHJcbiAgICB0eXBlIEZpeHR1cmVHcm91cCA9IGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgZml4dHVyZUlkOiBzdHJpbmc7XHJcbiAgICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIjtcclxuICAgICAgZ3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgICAgIHRlbXBsYXRlVHlwZTogc3RyaW5nO1xyXG4gICAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAgIHBhcmVudEZhYnJpYzogYW55O1xyXG4gICAgICBzdG9yZUNvdW50OiBudW1iZXI7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFByb2Nlc3MgYWxsIHRlbXBsYXRlcyBpbiBwYXJhbGxlbCBhbmQgd2FpdCBmb3IgY29tcGxldGlvblxyXG4gICAgY29uc3QgZ3JvdXBzOiBGaXh0dXJlR3JvdXBbXSA9IGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICB0ZW1wbGF0ZXMubWFwKGFzeW5jIChtZikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGlzTWFzdGVyID0gbWYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiO1xyXG5cclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IDM7XHJcblxyXG4gICAgICAgIGxldCBtYWluQ29udGFpbmVySGVpZ2h0ID0gaGVpZ2h0ICsgMTtcclxuICAgICAgICBpZiAoaXNNYXN0ZXIpIHtcclxuICAgICAgICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgICBtYWluQ29udGFpbmVySGVpZ2h0ID0gaGVpZ2h0IC0gdG9wSGVpZ2h0IC8gMiArIDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtYWluQ29udGFpbmVyVG9wID0gaXNNYXN0ZXJcclxuICAgICAgICAgID8geSArICgoMTUgLyAxMDApICogaGVpZ2h0KSAvIDIgLSAxXHJcbiAgICAgICAgICA6IHkgLSAxO1xyXG5cclxuICAgICAgICBjb25zdCBtYWluQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICB0b3A6IG1haW5Db250YWluZXJUb3AsXHJcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG1haW5Db250YWluZXJIZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICAgICAgY29uc3QgdG9wQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgICAgICB0b3A6IHRvcFksXHJcbiAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgICAgIGNvbnN0IGlubmVyVG9wQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFl9ICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7dG9wWH0gJHt0b3BZfSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBpbm5lclRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgICAgICBgQXNzaWduZWQgdG8gJHttZi5zdG9yZUNvdW50ID8/IDB9IFN0b3Jlc2AsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG5cclxuICAgICAgICBsZXQgaW5uZXJCb3R0b21Cb3g6IGZhYnJpYy5QYXRoO1xyXG5cclxuICAgICAgICBpZiAoaXNNYXN0ZXIpIHtcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyB0b3BXaWR0aH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFl9ICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZTogXCIjNzE3QkJDXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZTogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICBsZXQgaW5uZXJCb3R0b21UZXh0O1xyXG5cclxuICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGdldEZpeHR1cmVDYW52YXNMYWJlbChtZik7XHJcblxyXG4gICAgICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0ID0gY3JlYXRlQm90dG9tVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgfSB3aGlsZSAoaW5uZXJCb3R0b21UZXh0LmhlaWdodCA+IGlubmVyQm94SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgbWlkWCA9IHggKyAod2lkdGggLSBtaWRXaWR0aCkgLyAyO1xyXG4gICAgICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICAgICAgY29uc3QgbWlkQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IG1pZFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG1pZEhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZDb3VudCA9IG1mLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgICAgICBjb25zdCBmaXJzdEJveFkgPSBtaWRZO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtcclxuICAgICAgICAgICAgICBmaXJzdEJveFkgKyByYWRpdXNcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiI0VBRUNGNVwiIDogXCIjREFGMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiNBRkI1RDlcIiA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGUgbWYuaGVhZGVyLmxhYmVsIHdpdGggZWxsaXBzaXMgaWYgaXQgZXhjZWVkcyB0aGUgYXZhaWxhYmxlIHdpZHRoXHJcbiAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbWY/LmhlYWRlcj8ubGFiZWwgPz8gXCJcIjtcclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRGb250U2l6ZSA9IDc7XHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Rm9udEZhbWlseSA9IFwiSW50ZXJcIjtcclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRGb250V2VpZ2h0ID0gXCI2MDBcIjtcclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRXaWR0aCA9IG1pZFdpZHRoIC0gNDA7IC8vIGxlYXZlIHNwYWNlIGZvciBpY29ucyBvbiByaWdodFxyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSB3aXRoIGVsbGlwc2lzIGlmIG5lZWRlZFxyXG4gICAgICAgIGxldCBkaXNwbGF5TGFiZWwgPSBsYWJlbFRleHQ7XHJcbiAgICAgICAgaWYgKGxhYmVsVGV4dCkge1xyXG4gICAgICAgICAgbGV0IHRlbXBUZXh0Ym94ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGxhYmVsVGV4dCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogZmlyc3RCb3hUZXh0Rm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IGZpcnN0Qm94VGV4dEZvbnRGYW1pbHksXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IGZpcnN0Qm94VGV4dEZvbnRXZWlnaHQsXHJcbiAgICAgICAgICAgIHdpZHRoOiBmaXJzdEJveFRleHRXaWR0aCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gSWYgdGhlIHRleHQgaXMgdG9vIHdpZGUsIHRydW5jYXRlIGFuZCBhZGQgZWxsaXBzaXNcclxuICAgICAgICAgIGlmICh0ZW1wVGV4dGJveC5oZWlnaHQgPiBib3hIZWlnaHQpIHtcclxuICAgICAgICAgICAgbGV0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgICAgLy8gQmluYXJ5IHNlYXJjaCBmb3IgbWF4IGZpdHRpbmcgbGVuZ3RoXHJcbiAgICAgICAgICAgIGxldCBsZWZ0ID0gMDtcclxuICAgICAgICAgICAgbGV0IHJpZ2h0ID0gbGFiZWxUZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcclxuICAgICAgICAgICAgICBsZXQgbWlkID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xyXG4gICAgICAgICAgICAgIGxldCB0ZXN0VGV4dCA9IGxhYmVsVGV4dC5zbGljZSgwLCBtaWQpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgdGVtcFRleHRib3guc2V0KHsgdGV4dDogdGVzdFRleHQgfSk7XHJcbiAgICAgICAgICAgICAgaWYgKHRlbXBUZXh0Ym94LmhlaWdodCA+IGJveEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgcmlnaHQgPSBtaWQ7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxlZnQgPSBtaWQgKyAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBsZWZ0LTEgaXMgdGhlIG1heCBmaXR0aW5nIGxlbmd0aFxyXG4gICAgICAgICAgICBkaXNwbGF5TGFiZWwgPSBsYWJlbFRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KGRpc3BsYXlMYWJlbCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIDYsXHJcbiAgICAgICAgICB0b3A6IGZpcnN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBmb250U2l6ZTogZmlyc3RCb3hUZXh0Rm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBmaXJzdEJveFRleHRGb250RmFtaWx5LFxyXG4gICAgICAgICAgZm9udFdlaWdodDogZmlyc3RCb3hUZXh0Rm9udFdlaWdodCxcclxuICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBmaXJzdEJveFRleHRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgdGV4dEFsaWduOiBcImxlZnRcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgaWNvblNpemUgPSAxMDtcclxuICAgICAgICBjb25zdCBpY29uU3BhY2luZyA9IDQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEJvdW5kcyA9IGZpcnN0Qm94LmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICAgIGNvbnN0IGljb25zVG9wID1cclxuICAgICAgICAgIGZpcnN0Qm94VGV4dEJvdW5kcy50b3AgKyBmaXJzdEJveFRleHRCb3VuZHMuaGVpZ2h0IC8gMiAtIGljb25TaXplIC8gMjtcclxuICAgICAgICBjb25zdCBpY29uc1BhZGRpbmdSaWdodCA9IDY7XHJcbiAgICAgICAgY29uc3QgaWNvbnNUb3RhbFdpZHRoID0gaWNvblNpemUgKiAyICsgaWNvblNwYWNpbmc7XHJcbiAgICAgICAgY29uc3QgaWNvbnNMZWZ0U3RhcnQgPVxyXG4gICAgICAgICAgbWlkWCArIG1pZFdpZHRoIC0gaWNvbnNUb3RhbFdpZHRoIC0gaWNvbnNQYWRkaW5nUmlnaHQ7XHJcblxyXG4gICAgICAgIGNvbnN0IGVkaXRJY29uTGVmdCA9IGljb25zTGVmdFN0YXJ0O1xyXG4gICAgICAgIGNvbnN0IGVkaXRJY29uVG9wID0gaWNvbnNUb3A7XHJcbiAgICAgICAgY29uc3QgZWRpdEljb25QYXRoID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgXCJNNy4xMDM1NCAxLjA2MDM1QzcuMjExNDUgMC45NTI0MzYgNy4zMzk1NiAwLjg2NjgzNCA3LjQ4MDU2IDAuODA4NDMyQzcuNjIxNTUgMC43NTAwMyA3Ljc3MjY3IDAuNzE5OTcgNy45MjUyOCAwLjcxOTk3QzguMDc3OSAwLjcxOTk3IDguMjI5MDIgMC43NTAwMyA4LjM3MDAxIDAuODA4NDMyQzguNTExMDEgMC44NjY4MzQgOC42MzkxMiAwLjk1MjQzNiA4Ljc0NzAzIDEuMDYwMzVDOC44NTQ5NSAxLjE2ODI2IDguOTQwNTUgMS4yOTYzNyA4Ljk5ODk1IDEuNDM3MzdDOS4wNTczNSAxLjU3ODM3IDkuMDg3NDEgMS43Mjk0OCA5LjA4NzQxIDEuODgyMUM5LjA4NzQxIDIuMDM0NzEgOS4wNTczNSAyLjE4NTgzIDguOTk4OTUgMi4zMjY4MkM4Ljk0MDU1IDIuNDY3ODIgOC44NTQ5NSAyLjU5NTkzIDguNzQ3MDMgMi43MDM4NEwzLjIwMDI0IDguMjUwNjRMMC45NDA0MyA4Ljg2Njk1TDEuNTU2NzQgNi42MDcxNUw3LjEwMzU0IDEuMDYwMzVaXCIsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IGVkaXRJY29uTGVmdCxcclxuICAgICAgICAgICAgdG9wOiBlZGl0SWNvblRvcCxcclxuICAgICAgICAgICAgc2NhbGVYOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBzY2FsZVk6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZTogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjcwNDM1NSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBzdHJva2VMaW5lQ2FwOiBcInJvdW5kXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVKb2luOiBcInJvdW5kXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgKGVkaXRJY29uUGF0aCBhcyBhbnkpLm5hbWUgPSBcImVkaXRJY29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvcHlJY29uTGVmdCA9IGVkaXRJY29uTGVmdCArIGljb25TaXplICsgaWNvblNwYWNpbmc7XHJcbiAgICAgICAgY29uc3QgY29weUljb25Ub3AgPSBlZGl0SWNvblRvcDtcclxuICAgICAgICBjb25zdCBjb3B5SWNvblBhdGggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBcIk0yLjA3NzM1IDUuOTkwNzdMMS42NjY0NyA1Ljk5MDc3QzEuNDQ4NTMgNS45OTA3NyAxLjIzOTUyIDUuOTA0MiAxLjA4NTQxIDUuNzUwMDlDMC45MzEzMDMgNS41OTU5OCAwLjg0NDcyNyA1LjM4Njk3IDAuODQ0NzI3IDUuMTY5MDNMMC44NDQ3MjcgMS40NzExNkMwLjg0NDcyNyAxLjI1MzIyIDAuOTMxMzAzIDEuMDQ0MjEgMS4wODU0MSAwLjg5MDA5OEMxLjIzOTUyIDAuNzM1OTkxIDEuNDQ4NTMgMC42NDk0MTQgMS42NjY0NyAwLjY0OTQxNEw1LjM2NDM0IDAuNjQ5NDE0QzUuNTgyMjggMC42NDk0MTQgNS43OTEyOSAwLjczNTk5MSA1Ljk0NTQgMC44OTAwOThDNi4wOTk1MSAxLjA0NDIxIDYuMTg2MDkgMS4yNTMyMiA2LjE4NjA5IDEuNDcxMTZMNi4xODYwOSAxLjg4MjA0TTQuNTQyNTkgMy41MjU1M0w4LjI0MDQ2IDMuNTI1NTNDOC42OTQyOSAzLjUyNTUzIDkuMDYyMiAzLjg5MzQ0IDkuMDYyMiA0LjM0NzI4TDkuMDYyMiA4LjA0NTE0QzkuMDYyMiA4LjQ5ODk4IDguNjk0MjkgOC44NjY4OSA4LjI0MDQ2IDguODY2ODlMNC41NDI1OSA4Ljg2Njg5QzQuMDg4NzUgOC44NjY4OSAzLjcyMDg0IDguNDk4OTggMy43MjA4NCA4LjA0NTE0TDMuNzIwODQgNC4zNDcyOEMzLjcyMDg0IDMuODkzNDQgNC4wODg3NSAzLjUyNTUzIDQuNTQyNTkgMy41MjU1M1pcIixcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogY29weUljb25MZWZ0LFxyXG4gICAgICAgICAgICB0b3A6IGNvcHlJY29uVG9wLFxyXG4gICAgICAgICAgICBzY2FsZVg6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgZmlsbDogXCJcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjcwNDM1NSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgICAgICBzdHJva2VMaW5lQ2FwOiBcInJvdW5kXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVKb2luOiBcInJvdW5kXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIChjb3B5SWNvblBhdGggYXMgYW55KS5uYW1lID0gXCJjb3B5SWNvblwiO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsdmVzID0gW107XHJcbiAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHQgPSBtaWRIZWlnaHQgLSAyICogYm94SGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgdGV4dCA9IG1mPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgICAgLy8gV3JhcCB0ZXh0IHdpdGhpbiBmaXh0dXJlIHdpZHRoLCBzaHJpbmsgZm9udCBpZiBuZWVkZWQgdG8gZml0IHdpdGhpbiBzaGVsZiBoZWlnaHRcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICAgICAgbGV0IGZvbnRTaXplTDEgPSA2OyAvLyBzdGFydCBzbGlnaHRseSBsYXJnZXI7IHdpbGwgc2hyaW5rIHRvIGZpdFxyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVdyYXBwZWRUZXh0Ym94ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgMixcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGVsZkNvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG1mLnNoZWxmQ29uZmlnPy5baV0uc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gbWYuc2hlbGZDb25maWc/LltpXS50cmF5Um93cyB8fCAxO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPVxyXG4gICAgICAgICAgICAgIG1mLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIHdpdGggZWxsaXBzaXMgd2l0aGluIHNoZWxmIHJlY3QgKG1pZFdpZHRoKVxyXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7IC8vIHBhZGRpbmcgaW5zaWRlIHNoZWxmIHJlY3RcclxuICAgICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgICAgICAvLyBVc2Ugc2luZ2xlLWxpbmUgdGV4dCBtZWFzdXJlbWVudCB0byBhdm9pZCBtdWx0aS1saW5lIHdyYXBwaW5nIGR1cmluZyBtZWFzdXJlbWVudFxyXG4gICAgICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCwgLy8gbWF0Y2ggc2hlbGYgcmVjdCB3aWR0aFxyXG4gICAgICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IHNoZWxmIG9mIG1mLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICAgICAgc2VxdWVudGlhbEdyb3Vwcy5wdXNoKHsgem9uZSwgc2hlbHZlczogW3NoZWxmXSB9KTtcclxuICAgICAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHNbc2VxdWVudGlhbEdyb3Vwcy5sZW5ndGggLSAxXS5zaGVsdmVzLnB1c2goc2hlbGYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbGV0IGN1cnJlbnRTaGVsZkluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZlJlY3QpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0UGVyU2hlbGYgPSBzaGVsZkRhdGEucHJvZHVjdFBlclNoZWxmIHx8IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uU3BhY2luZyA9IG1pZFdpZHRoIC8gcHJvZHVjdFBlclNoZWxmO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godmVydGljYWxMaW5lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAobWYuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGFiZWxQYWRkaW5nID0gMjtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBncm91cEJvdHRvbVksXHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cENlbnRlclggPSBtaWRYICsgbWlkV2lkdGggLyAyO1xyXG4gICAgICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlc0luR3JvdXA/LmZvckVhY2goKHNoZWxmKSA9PiB7XHJcbiAgICAgICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IFsuLi5zZWN0aW9uQnJhbmRzXS5qb2luKFwiICsgXCIpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgICAgICBsZXQgd3JhcHBlZFRleHQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVRleHRib3goZm9udFNpemUpO1xyXG4gICAgICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjdEhlaWdodCA9IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgcGFkZGluZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZj8udm1Db25maWc/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZi52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHZtID0gbWYudm1Db25maWdbaV07XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHZtLnN0YXJ0WVBvc2l0aW9uIC0gMTtcclxuICAgICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHZtLmVuZFlQb3NpdGlvbiAtIDE7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNoZWxmVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHRTcGFuID0gYm94SGVpZ2h0ICogKGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgdm1IZWlnaHRQeDogbnVtYmVyID0gc2hlbGZIZWlnaHRTcGFuO1xyXG4gICAgICAgICAgICAgIGxldCB5OiBudW1iZXIgPSBzaGVsZlRvcFk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bS55Wm9uZSAmJiB2bS55Wm9uZSAhPT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgICAgICAgIHZtSGVpZ2h0UHggPSBzaGVsZkhlaWdodFNwYW4gLyAzO1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgbGV0IHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGxldCB3aWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uV2lkdGggPSBtaWRXaWR0aCAvIDM7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHZtLnhab25lKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IG1pZFggKyAyICogc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAodm0/LnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY2RuVXJsfSR7dm0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiB3aWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgICAgICAgIGVycixcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gRXJyb3IgaW4gZHJhd2luZyBWTTogXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGFzdEJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc2hlbGZDb3VudCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBgTSAke21pZFh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZfSBcclxuICAgICAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgICAgbWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgcmFkaXVzfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgUSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWH0gJHtcclxuICAgICAgICAgICAgICBsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgICAgIGAke21mPy5mb290ZXI/LmxhYmVsID8gbWYuZm9vdGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IGxhc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ3RoOiBib3hIZWlnaHQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgICAgICBjb25zdCBib3R0b21Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgYWN0dWFsU2hlbGZDb3VudCA9XHJcbiAgICAgICAgICBtZj8uc2hlbGZDb25maWc/LmZpbHRlcigoczogYW55KSA9PiBzLnNoZWxmVHlwZSAhPSBcInZtb25seVwiKVxyXG4gICAgICAgICAgICA/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgICAgICBjb25zdCBib3R0b21UZXh0Q29udGVudCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgICAgIGBTaGVsdmVzIC0gJHthY3R1YWxTaGVsZkNvdW50fSAuIFByb2R1Y3RzIC0gICR7bWYuZml4dHVyZUNhcGFjaXR5fSAuIFZNIC0gJHttZi52bUNvbmZpZy5sZW5ndGh9YCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiBib3R0b21ZICsgYm90dG9tSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgICAgICBoZWlndGg6IGJvdHRvbUhlaWdodCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDaGlsZHJlbiA9IFtcclxuICAgICAgICAgIG1haW5Db250YWluZXIsXHJcbiAgICAgICAgICAuLi4oIWlzTWFzdGVyID8gW3RvcENvbnRhaW5lciwgaW5uZXJUb3BCb3gsIGlubmVyVG9wVGV4dF0gOiBbXSksXHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICAgIGlubmVyQm90dG9tVGV4dCxcclxuICAgICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgICAgZmlyc3RCb3hUZXh0LFxyXG4gICAgICAgICAgLi4uKCFpc01hc3RlciA/IFtlZGl0SWNvblBhdGhdIDogW10pLFxyXG4gICAgICAgICAgY29weUljb25QYXRoLFxyXG4gICAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgICBsYXN0Qm94VGV4dCxcclxuICAgICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZ3JvdXBDaGlsZHJlbiwge1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgLy8gYW5nbGU6IG1mLnJlbGF0aXZlUG9zaXRpb24/LmFuZ2xlID8/IDBcclxuICAgICAgICB9KSBhcyBGaXh0dXJlR3JvdXA7XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBtZi5faWQ7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gbWYuZml4dHVyZVR5cGU7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmdyb3VwTmFtZSA9IG1mPy50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC50ZW1wbGF0ZVR5cGUgPSBtZi50ZW1wbGF0ZVR5cGU7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm5hbWUgPSBtZi50ZW1wbGF0ZVR5cGUgPz8gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnN0b3JlQ291bnQgPSBtZj8uc3RvcmVDb3VudCA/PyAwO1xyXG4gICAgICAgIGZpeHR1cmVHcm91cC5wYXJlbnRGYWJyaWMgPSBwYXJlbnRGYWJyaWM7XHJcblxyXG4gICAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNoaWxkTmFtZSA9IG9wdC5zdWJUYXJnZXRzPy5bMF0/Lm5hbWU7XHJcblxyXG4gICAgICAgICAgaWYgKGNoaWxkTmFtZSAhPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpc01hc3RlciAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgIT09IG1mLl9pZCAmJlxyXG4gICAgICAgICAgICAhdGhpcy5wcmV2ZW50Q2xpY2tcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN0b3JlTmFtZXNcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZFN1YlRlbXBsYXRlSWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gbWYuX2lkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oXHJcbiAgICAgICAgICAgICAgZml4dHVyZUdyb3VwIGFzIGZhYnJpYy5Hcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhmaXh0dXJlR3JvdXAsIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFpc01hc3RlciAmJlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3ViVGVtcGxhdGVJZCAhPT0gbWYuX2lkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZXZlbnRDbGlja1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN0b3JlTmFtZXNcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZFN1YlRlbXBsYXRlSWQpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3ViVGVtcGxhdGVJZCA9IG1mLl9pZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCBhcyBmYWJyaWMuR3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3RvcmVOYW1lcyhmaXh0dXJlR3JvdXAsIG1mLnN0b3JlID8/IFtdLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuICAgIGxldCBueCA9IHggLSB0b3RhbFdpZHRoIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogbngsIHRvcDogeSB9KTtcclxuICAgICAgbnggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyU3RvcmVOYW1lcyhcclxuICAgIHBhcmVudEdyb3VwOiBmYWJyaWMuR3JvdXAsXHJcbiAgICBzdG9yZXM6IHsgc3RvcmVOYW1lPzogc3RyaW5nOyBzdG9yZUlkPzogc3RyaW5nIH1bXSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICghc3RvcmVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChcIk5vIHN0b3JlcyBhc3NpZ25lZCB0byB0aGlzIHZhcmlhbnRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cFNwYWNpbmcgPSAxNTtcclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBzdG9yZXMuZm9yRWFjaCgoc3RvcmUpID0+IHtcclxuICAgICAgY29uc3QgbGFiZWwgPSBzdG9yZS5zdG9yZU5hbWUgfHwgXCJVbm5hbWVkIFN0b3JlXCI7XHJcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gMTE7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmdYID0gMjA7XHJcbiAgICAgIGNvbnN0IHBhZGRpbmdZID0gMTI7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemUsXHJcbiAgICAgICAgZmlsbDogXCIjMzYzRjcyXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgcmVjdFdpZHRoID0gdGV4dC53aWR0aCEgKyAyICogcGFkZGluZ1g7XHJcbiAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB0ZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcblxyXG4gICAgICBjb25zdCByZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiBcIiNGOEY5RkNcIixcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjUsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGV4dC5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHBhZGRpbmdYLFxyXG4gICAgICAgIHRvcDogKHJlY3RIZWlnaHQgLSB0ZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW3JlY3QsIHRleHRdLCB7XHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgaG92ZXJDdXJzb3I6IFwiZGVmYXVsdFwiLFxyXG4gICAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7IHRlbXBsYXRlVHlwZTogc3RyaW5nIH07XHJcblxyXG4gICAgICBncm91cC50ZW1wbGF0ZVR5cGUgPSBcInN0b3JlTmFtZXNcIjtcclxuXHJcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuICAgIGxldCBueCA9IHggLSB0b3RhbFdpZHRoIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogbngsIHRvcDogeSB9KTtcclxuICAgICAgbnggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgICB0aGlzLmRyYXdBcnJvdyhwYXJlbnRHcm91cCwgZ3JvdXAsIHRoaXMuc2VsZWN0ZWRTdWJUZW1wbGF0ZUlkKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBDZW50ZXJCb3R0b20oZ3JvdXA6IGZhYnJpYy5Hcm91cCk6IHsgZ3g6IG51bWJlcjsgZ3k6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IGNlbnRlciA9IGdyb3VwLmdldENlbnRlclBvaW50KCk7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gY2VudGVyLng7XHJcbiAgICBjb25zdCBib3R0b21ZID0gZ3JvdXAudG9wISArIGdyb3VwLmhlaWdodCE7XHJcbiAgICByZXR1cm4geyBneDogY2VudGVyWCwgZ3k6IGJvdHRvbVkgfTtcclxuICB9XHJcblxyXG4gIGNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXModGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyb3Vwc1RvUmVtb3ZlID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgIChvYmogYXMgYW55KS50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlVHlwZSxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzVG9SZW1vdmUpIHtcclxuICAgICAgZ3JvdXBzVG9SZW1vdmUuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3QXJyb3coZnJvbUdyb3VwOiBmYWJyaWMuR3JvdXAsIHRvR3JvdXA6IGZhYnJpYy5Hcm91cCwgYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmcm9tID0gZnJvbUdyb3VwLmFDb29yZHMgPz8gZnJvbUdyb3VwLmNhbGNPQ29vcmRzKCk7XHJcbiAgICBjb25zdCB0byA9IHRvR3JvdXAuYUNvb3JkcyA/PyB0b0dyb3VwLmNhbGNPQ29vcmRzKCk7XHJcblxyXG4gICAgY29uc3QgZnJvbVggPSAoZnJvbS5ibC54ICsgZnJvbS5ici54KSAvIDI7XHJcbiAgICBjb25zdCBmcm9tWSA9IChmcm9tLmJsLnkgKyBmcm9tLmJyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCB0b1ggPSAodG8udGwueCArIHRvLnRyLngpIC8gMjtcclxuICAgIGNvbnN0IHRvWSA9ICh0by50bC55ICsgdG8udHIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB0b1ggLSBmcm9tWDtcclxuICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gdG9ZIC0gZnJvbVk7XHJcbiAgICBjb25zdCBjdXJ2ZVNpemUgPSAxNDtcclxuXHJcbiAgICBsZXQgcGF0aERhdGEgPSBcIlwiO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsT2Zmc2V0KSA8IDUpIHtcclxuICAgICAgLy8gRGlyZWN0IHZlcnRpY2FsIGxpbmVcclxuICAgICAgcGF0aERhdGEgPSBgTSAke2Zyb21YfSAke2Zyb21ZfSBMICR7dG9YfSAke3RvWX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbWlkWSA9IGZyb21ZICsgdmVydGljYWxPZmZzZXQgLyAyO1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBob3Jpem9udGFsT2Zmc2V0ID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnZlMVggPSBmcm9tWCArIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuICAgICAgY29uc3QgY3VydmUyWCA9IHRvWCAtIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuXHJcbiAgICAgIHBhdGhEYXRhID0gW1xyXG4gICAgICAgIGBNICR7ZnJvbVh9ICR7ZnJvbVl9YCxcclxuICAgICAgICBgTCAke2Zyb21YfSAke21pZFkgLSBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgUSAke2Zyb21YfSAke21pZFl9ICR7Y3VydmUxWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYEwgJHtjdXJ2ZTJYfSAke21pZFl9YCxcclxuICAgICAgICBgUSAke3RvWH0gJHttaWRZfSAke3RvWH0gJHttaWRZICsgY3VydmVTaXplfWAsXHJcbiAgICAgICAgYEwgJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyb3dMaW5lID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFycm93aGVhZFxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHRvWSAtICh0b1kgLSAxMCksIHRvWCAtIHRvWCk7XHJcbiAgICBjb25zdCBoZWFkbGVuID0gMTA7XHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIFtcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIiksXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdyb3VwaW5nIGJvdGggbGluZSBhbmQgYXJyb3doZWFkXHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3dMaW5lLCBhcnJvd0hlYWRdLCB7XHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgYXJyb3dJZDogc3RyaW5nIH07XHJcblxyXG4gICAgLy8gQXR0YWNoIGN1c3RvbSBhcnJvdyBJRFxyXG4gICAgYXJyb3dHcm91cC5hcnJvd0lkID0gYXJyb3dJZDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYXJyb3dHcm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFycm93QnlJZChhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGlmICghYXJyb3dJZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJiAob2JqIGFzIGFueSkuYXJyb3dJZCA9PT0gYXJyb3dJZCxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoYXJyb3dHcm91cC5sZW5ndGgpIHtcclxuICAgICAgYXJyb3dHcm91cC5mb3JFYWNoKChncm91cCkgPT4gdGhpcy5jYW52YXMucmVtb3ZlKGdyb3VwKSk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHVwbGljYXRlKGZpeHR1cmU6IGFueSkge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5kdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUoeyB0ZW1wbGF0ZUlkOiBmaXh0dXJlLmZpeHR1cmVJZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEZpeHR1cmUgPVxyXG4gICAgICAgICAgICAgIGZpeHR1cmUudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiXHJcbiAgICAgICAgICAgICAgICA/IGZpeHR1cmVcclxuICAgICAgICAgICAgICAgIDogZml4dHVyZS5wYXJlbnRGYWJyaWM7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gY3VycmVudEZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oY3VycmVudEZpeHR1cmUpO1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclN1YkZpeHR1cmVzKGN1cnJlbnRGaXh0dXJlLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5kYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcclxuICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHwgXCJGYWlsZWQgdG8gY3JlYXRlIHZhcmlhbnRcIixcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZHVwbGljYXRlRml4dHVyZVRlbXBsYXRlIFtlcnJdOlwiLCBlcnIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInRyZWUtY2FudmFzLWNhcmRcIiBjbGFzcz1cInctMTAwIHAtNlwiPlxyXG4gIDwhLS0gRmlsdGVyIGJhciAtLT5cclxuICA8ZGl2IGNsYXNzPVwidHJlZS1maWx0ZXItYmFyXCIgKm5nSWY9XCJ2aWV3TW9kZSA9PT0gJ2dyb3VwJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1jaGlwc1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNoaXBcIiAqbmdGb3I9XCJsZXQgZmlsdGVyS2V5IG9mIFsndGVtcGxhdGVHcm91cE5hbWVzJywgJ2ZpeHR1cmVOYW1lcycsICdzdG9yZU5hbWVzJ11cIj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1idG5cIlxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJnZXRBY3RpdmVGaWx0ZXJDb3VudChmaWx0ZXJLZXkpID4gMFwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyRHJvcGRvd24oZmlsdGVyS2V5KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZmlsdGVyS2V5ID09PSAndGVtcGxhdGVHcm91cE5hbWVzJyA/ICdUZW1wbGF0ZSBHcm91cCcgOiBmaWx0ZXJLZXkgPT09ICdmaXh0dXJlTmFtZXMnID8gJ01hc3RlciBUZW1wbGF0ZScgOiAnU3RvcmUgTmFtZScgfX1cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmlsdGVyLWNvdW50XCIgKm5nSWY9XCJnZXRBY3RpdmVGaWx0ZXJDb3VudChmaWx0ZXJLZXkpID4gMFwiPnt7IGdldEFjdGl2ZUZpbHRlckNvdW50KGZpbHRlcktleSkgfX08L3NwYW4+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCI2XCIgdmlld0JveD1cIjAgMCAxMCA2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNMSAxTDUgNUw5IDFcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1kcm9wZG93blwiICpuZ0lmPVwib3BlbkZpbHRlcktleSA9PT0gZmlsdGVyS2V5XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyU2VhcmNoW2ZpbHRlcktleV1cIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCJcclxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldEZpbHRlcmVkT3B0aW9ucyhmaWx0ZXJLZXkpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzRmlsdGVyU2VsZWN0ZWQoZmlsdGVyS2V5LCBvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmlsdGVyKGZpbHRlcktleSwgb3B0aW9uKVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8c3Bhbj57eyBvcHRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItZW1wdHlcIiAqbmdJZj1cImdldEZpbHRlcmVkT3B0aW9ucyhmaWx0ZXJLZXkpLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgIE5vIG9wdGlvbnMgZm91bmRcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsdGVyLWFwcGx5LWJ0blwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiPkFwcGx5PC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiZmlsdGVyLWNsZWFyLWJ0blwiICpuZ0lmPVwiaGFzQWN0aXZlRmlsdGVycygpXCIgKGNsaWNrKT1cImNsZWFyQWxsRmlsdGVycygpXCI+XHJcbiAgICAgICAgQ2xlYXIgYWxsXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxjYW52YXMgaWQ9XCJ0ZW1wbGF0ZS1jYW52YXNcIiAjdGVtcGxhdGVDYW52YXM+PC9jYW52YXM+XHJcbiAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWJldHdlZW4gdy0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMVwiIHZpZXdCb3g9XCIwIDAgMTAgMTFcIiBmaWxsPVwibm9uZVwiIGNsYXNzPVwibWUtMVwiPlxyXG4gICAgICAgIDxjaXJjbGUgY3g9XCI0Ljg0MzFcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiM2MTcyRjNcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTAgbWUtM1wiPk1hc3RlciBUZW1wbGF0ZTwvcD5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMVwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMSAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjUuNDQ0NjZcIiBjeT1cIjUuNDk5OTZcIiByPVwiNC44NDMxXCIgZmlsbD1cIiMzM0I1RkZcIiAvPlxyXG4gICAgICA8L3N2Zz5cclxuICAgICAgPHAgY2xhc3M9XCJtLTBcIj5WYXJpYW50L0NoaWxkIFRlbXBsYXRlPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiem9vbVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1pblwiIChjbGljayk9XCJ6b29tSW4oKVwiPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGggZD1cIk0xMiA1VjE5TTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiem9vbS1vdXRcIiAoY2xpY2spPVwiem9vbU91dCgpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTUgMTJIMTlcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=