bways-report 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  2. package/esm2022/lib/features/designer/components/component-palette/component-palette.component.mjs +24 -3
  3. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +20 -13
  4. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +64 -5
  5. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +161 -3
  6. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +91 -11
  7. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +88 -25
  8. package/esm2022/lib/features/designer/designer.component.mjs +194 -65
  9. package/esm2022/lib/features/designer/services/designer-state.service.mjs +9 -2
  10. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +2 -2
  11. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +11 -3
  12. package/esm2022/lib/features/runtime/report-execution.service.mjs +1 -9
  13. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +214 -19
  14. package/esm2022/lib/features/runtime/report-runtime.component.mjs +11 -3
  15. package/esm2022/lib/features/runtime/rpt-report.component.mjs +11 -3
  16. package/esm2022/lib/primitives/components/checkbox/rpt-checkbox.component.mjs +3 -3
  17. package/esm2022/lib/primitives/components/date/rpt-date.component.mjs +3 -3
  18. package/esm2022/lib/primitives/components/date-range/rpt-date-range.component.mjs +3 -3
  19. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +4 -4
  20. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +23 -1
  21. package/esm2022/lib/primitives/components/input/rpt-input.component.mjs +3 -3
  22. package/esm2022/lib/primitives/components/kpi-card/rpt-kpi-card.component.mjs +3 -3
  23. package/esm2022/lib/primitives/components/number/rpt-number.component.mjs +3 -3
  24. package/fesm2022/bways-report.mjs +920 -162
  25. package/fesm2022/bways-report.mjs.map +1 -1
  26. package/lib/core/models/report-grid.model.d.ts +23 -1
  27. package/lib/features/designer/components/component-palette/component-palette.component.d.ts +2 -1
  28. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +9 -0
  29. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +4 -1
  30. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +5 -1
  31. package/lib/features/designer/designer.component.d.ts +6 -0
  32. package/lib/features/runtime/dynamic-renderer.component.d.ts +4 -1
  33. package/lib/features/runtime/report-grid-bridge.component.d.ts +46 -4
  34. package/lib/features/runtime/report-runtime.component.d.ts +4 -1
  35. package/lib/features/runtime/rpt-report.component.d.ts +4 -1
  36. package/package.json +1 -1
@@ -253,7 +253,7 @@ export class RptDateRangeComponent {
253
253
  <span class="rpt-error-text">{{ errorMessage() }}</span>
254
254
  }
255
255
  </div>
256
- `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:5px;box-sizing:border-box}.rpt-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-preset-pills{display:inline-flex;align-items:center;gap:3px;flex-wrap:wrap}.rpt-preset-pill{border:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);font-size:.6875rem;font-weight:500;padding:1px 7px;border-radius:12px;cursor:pointer;line-height:1.4;transition:all .12s ease}.rpt-preset-pill:hover:not(:disabled){border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);background:#eff6ff}.rpt-preset-pill.is-active{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.rpt-preset-pill:disabled{cursor:not-allowed;opacity:.5}.rpt-date-range-container{display:flex;align-items:center;gap:8px;width:100%;flex:1;min-height:38px;box-sizing:border-box;padding:3px 8px;background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-date-range-container:focus-within{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-date-range-container.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-date-subfield{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.rpt-date-prefix{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--rpt-color-text-muted, #94a3b8);-webkit-user-select:none;user-select:none}.rpt-date-input{width:100%;border:none;outline:none;background:transparent;font-size:var(--rpt-font-size-base, .84rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);min-width:0;padding:4px 0}.rpt-date-input:disabled{color:var(--rpt-color-text-muted, #94a3b8);cursor:not-allowed}.rpt-range-separator{color:var(--rpt-color-text-muted, #94a3b8);font-size:.8125rem;-webkit-user-select:none;user-select:none;padding:0 2px}.rpt-range-clear-btn{border:none;background:#f1f5f9;color:var(--rpt-color-text-muted, #64748b);width:18px;height:18px;border-radius:50%;font-size:.6875rem;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:background-color .15s ease,color .15s ease}.rpt-range-clear-btn:hover{background-color:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.rpt-error-text{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);margin-top:2px}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
256
+ `, isInline: true, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:5px;box-sizing:border-box}.rpt-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-preset-pills{display:inline-flex;align-items:center;gap:3px;flex-wrap:wrap}.rpt-preset-pill{border:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);font-size:.6875rem;font-weight:500;padding:1px 7px;border-radius:12px;cursor:pointer;line-height:1.4;transition:all .12s ease}.rpt-preset-pill:hover:not(:disabled){border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);background:#eff6ff}.rpt-preset-pill.is-active{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.rpt-preset-pill:disabled{cursor:not-allowed;opacity:.5}.rpt-date-range-container{display:flex;align-items:center;gap:8px;width:100%;flex:1;min-height:38px;box-sizing:border-box;padding:3px 8px;background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-date-range-container:focus-within{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-date-range-container.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-date-subfield{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.rpt-date-prefix{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--rpt-color-text-muted, #94a3b8);-webkit-user-select:none;user-select:none}.rpt-date-input{width:100%;border:none;outline:none;background:transparent;font-size:var(--rpt-font-size-base, .84rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);min-width:0;padding:4px 0}.rpt-date-input:disabled{color:var(--rpt-color-text-muted, #94a3b8);cursor:not-allowed}.rpt-range-separator{color:var(--rpt-color-text-muted, #94a3b8);font-size:.8125rem;-webkit-user-select:none;user-select:none;padding:0 2px}.rpt-range-clear-btn{border:none;background:#f1f5f9;color:var(--rpt-color-text-muted, #64748b);width:18px;height:18px;border-radius:50%;font-size:.6875rem;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:background-color .15s ease,color .15s ease}.rpt-range-clear-btn:hover{background-color:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.rpt-error-text{font-size:.7rem;color:var(--rpt-color-danger, #ef4444);margin-top:3px;line-height:1.25;max-width:100%;overflow-wrap:anywhere;word-break:break-word;display:block}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
257
257
  }
258
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RptDateRangeComponent, decorators: [{
259
259
  type: Component,
@@ -341,6 +341,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
341
341
  <span class="rpt-error-text">{{ errorMessage() }}</span>
342
342
  }
343
343
  </div>
344
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:5px;box-sizing:border-box}.rpt-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-preset-pills{display:inline-flex;align-items:center;gap:3px;flex-wrap:wrap}.rpt-preset-pill{border:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);font-size:.6875rem;font-weight:500;padding:1px 7px;border-radius:12px;cursor:pointer;line-height:1.4;transition:all .12s ease}.rpt-preset-pill:hover:not(:disabled){border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);background:#eff6ff}.rpt-preset-pill.is-active{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.rpt-preset-pill:disabled{cursor:not-allowed;opacity:.5}.rpt-date-range-container{display:flex;align-items:center;gap:8px;width:100%;flex:1;min-height:38px;box-sizing:border-box;padding:3px 8px;background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-date-range-container:focus-within{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-date-range-container.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-date-subfield{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.rpt-date-prefix{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--rpt-color-text-muted, #94a3b8);-webkit-user-select:none;user-select:none}.rpt-date-input{width:100%;border:none;outline:none;background:transparent;font-size:var(--rpt-font-size-base, .84rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);min-width:0;padding:4px 0}.rpt-date-input:disabled{color:var(--rpt-color-text-muted, #94a3b8);cursor:not-allowed}.rpt-range-separator{color:var(--rpt-color-text-muted, #94a3b8);font-size:.8125rem;-webkit-user-select:none;user-select:none;padding:0 2px}.rpt-range-clear-btn{border:none;background:#f1f5f9;color:var(--rpt-color-text-muted, #64748b);width:18px;height:18px;border-radius:50%;font-size:.6875rem;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:background-color .15s ease,color .15s ease}.rpt-range-clear-btn:hover{background-color:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.rpt-error-text{font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);margin-top:2px}\n"] }]
344
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;height:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-field-group{display:flex;flex-direction:column;height:100%;gap:5px;box-sizing:border-box}.rpt-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.rpt-label{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text, #0f172a);flex-shrink:0}.rpt-required-marker{color:var(--rpt-color-danger, #ef4444);margin-left:2px}.rpt-preset-pills{display:inline-flex;align-items:center;gap:3px;flex-wrap:wrap}.rpt-preset-pill{border:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc);color:var(--rpt-color-text-muted, #64748b);font-size:.6875rem;font-weight:500;padding:1px 7px;border-radius:12px;cursor:pointer;line-height:1.4;transition:all .12s ease}.rpt-preset-pill:hover:not(:disabled){border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);background:#eff6ff}.rpt-preset-pill.is-active{background:var(--rpt-color-primary, #2563eb);border-color:var(--rpt-color-primary, #2563eb);color:#fff;font-weight:600}.rpt-preset-pill:disabled{cursor:not-allowed;opacity:.5}.rpt-date-range-container{display:flex;align-items:center;gap:8px;width:100%;flex:1;min-height:38px;box-sizing:border-box;padding:3px 8px;background-color:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);transition:border-color var(--rpt-transition-speed, .15s) ease,box-shadow var(--rpt-transition-speed, .15s) ease}.rpt-date-range-container:focus-within{border-color:var(--rpt-color-border-focus, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.rpt-date-range-container.rpt-invalid{border-color:var(--rpt-color-danger, #ef4444)}.rpt-date-subfield{display:flex;align-items:center;gap:6px;flex:1;min-width:0}.rpt-date-prefix{font-size:.6875rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--rpt-color-text-muted, #94a3b8);-webkit-user-select:none;user-select:none}.rpt-date-input{width:100%;border:none;outline:none;background:transparent;font-size:var(--rpt-font-size-base, .84rem);font-family:inherit;color:var(--rpt-color-text, #0f172a);min-width:0;padding:4px 0}.rpt-date-input:disabled{color:var(--rpt-color-text-muted, #94a3b8);cursor:not-allowed}.rpt-range-separator{color:var(--rpt-color-text-muted, #94a3b8);font-size:.8125rem;-webkit-user-select:none;user-select:none;padding:0 2px}.rpt-range-clear-btn{border:none;background:#f1f5f9;color:var(--rpt-color-text-muted, #64748b);width:18px;height:18px;border-radius:50%;font-size:.6875rem;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;padding:0;transition:background-color .15s ease,color .15s ease}.rpt-range-clear-btn:hover{background-color:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.rpt-error-text{font-size:.7rem;color:var(--rpt-color-danger, #ef4444);margin-top:3px;line-height:1.25;max-width:100%;overflow-wrap:anywhere;word-break:break-word;display:block}\n"] }]
345
345
  }], ctorParameters: () => [] });
346
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWRhdGUtcmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvcHJpbWl0aXZlcy9jb21wb25lbnRzL2RhdGUtcmFuZ2UvcnB0LWRhdGUtcmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQWFuRixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVMsRUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFPLEVBQVUsRUFBRSxDQUNwQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBMFBwRSxNQUFNLE9BQU8scUJBQXFCO0lBQ3ZCLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE2QixDQUFDO0lBQ3JELE9BQU8sR0FBRyxLQUFLLEVBQWtDLENBQUM7SUFFMUMsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFpQyxJQUFJLENBQUMsQ0FBQztJQUVoRixXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVB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UGpDLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsbUJBQW1CLENBQUMsWUFDcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9GVCxtQkE4SmdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdmFsaWRhdGlvbi92YWxpZGF0aW9uLWZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZVZhbHVlIHtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlUHJlc2V0IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuY29uc3QgcGFkID0gKG46IG51bWJlcik6IHN0cmluZyA9PiBTdHJpbmcobikucGFkU3RhcnQoMiwgJzAnKTtcbmNvbnN0IGZvcm1hdFlNRCA9IChkOiBEYXRlKTogc3RyaW5nID0+XG4gIGAke2QuZ2V0RnVsbFllYXIoKX0tJHtwYWQoZC5nZXRNb250aCgpICsgMSl9LSR7cGFkKGQuZ2V0RGF0ZSgpKX1gO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZGF0ZS1yYW5nZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWZpZWxkLWdyb3VwXCI+XG4gICAgICA8IS0tIEhlYWRlciB3aXRoIExhYmVsICYgUHJlc2V0IEJhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGFiZWwtcm93XCI+XG4gICAgICAgIEBpZiAoY29uZmlnKCkubGFiZWwpIHtcbiAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJlbGVtZW50SWQoKSArICdfZnJvbSdcIiBjbGFzcz1cInJwdC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgY29uZmlnKCkubGFiZWwgfX1cbiAgICAgICAgICAgIEBpZiAoY29uZmlnKCkudmFsaWRhdGlvbj8ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtcmVxdWlyZWQtbWFya2VyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93UHJlc2V0cygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1wcmVzZXQtcGlsbHNcIiByb2xlPVwidG9vbGJhclwiIGFyaWEtbGFiZWw9XCJEYXRlIHByZXNldHNcIj5cbiAgICAgICAgICAgIEBmb3IgKHAgb2YgcHJlc2V0czsgdHJhY2sgcC5pZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcHJlc2V0LXBpbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwiYWN0aXZlUHJlc2V0KCkgPT09IHAuaWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtQ29udHJvbCgpLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlQcmVzZXQocC5pZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcC5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGF0ZSBJbnB1dHMgQ29udGFpbmVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1kYXRlLXJhbmdlLWNvbnRhaW5lclwiIFtjbGFzcy5ycHQtaW52YWxpZF09XCJpc0ludmFsaWQoKVwiPlxuICAgICAgICA8IS0tIEZyb20gRmllbGQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZGF0ZS1zdWJmaWVsZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWRhdGUtcHJlZml4XCI+RnJvbTwvc3Bhbj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKSArICdfZnJvbSdcIlxuICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtZGF0ZS1pbnB1dFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZnJvbURhdGUoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2woKS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbbWluXT1cIm1pbkRhdGUoKVwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heERhdGUoKVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25Gcm9tQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJhbmdlLXNlcGFyYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPuKGkjwvc3Bhbj5cblxuICAgICAgICA8IS0tIFRvIEZpZWxkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWRhdGUtc3ViZmllbGRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1kYXRlLXByZWZpeFwiPlRvPC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpICsgJ190bydcIlxuICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtZGF0ZS1pbnB1dFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidG9EYXRlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sKCkuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW21pbl09XCJmcm9tRGF0ZSgpIHx8IG1pbkRhdGUoKVwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heERhdGUoKVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25Ub0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFF1aWNrIENsZWFyIEJ1dHRvbiAtLT5cbiAgICAgICAgQGlmIChoYXNWYWx1ZSgpICYmICFmb3JtQ29udHJvbCgpLmRpc2FibGVkKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInJwdC1yYW5nZS1jbGVhci1idG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJDbGVhciBkYXRlIHJhbmdlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBkYXRlIHJhbmdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclJhbmdlKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKclVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChyYW5nZUVycm9yKCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtZXJyb3ItdGV4dFwiPnt7IHJhbmdlRXJyb3IoKSB9fTwvc3Bhbj5cbiAgICAgIH0gQGVsc2UgaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWVycm9yLXRleHRcIj57eyBlcnJvck1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZmllbGQtZ3JvdXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtbGFiZWwtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuICAgIC5ycHQtbGFiZWwge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5ycHQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgfVxuXG4gICAgLyogUHJlc2V0IEJ1dHRvbnMgKi9cbiAgICAucnB0LXByZXNldC1waWxscyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDNweDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtcGlsbCB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBwYWRkaW5nOiAxcHggN3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtcGlsbDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1waWxsLmlzLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtcGlsbDpkaXNhYmxlZCB7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cblxuICAgIC8qIElucHV0cyBDb250YWluZXIgKi9cbiAgICAucnB0LWRhdGUtcmFuZ2UtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAzOHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDNweCA4cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2UsXG4gICAgICAgICAgICAgICAgICBib3gtc2hhZG93IHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1kYXRlLXJhbmdlLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4ge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWZvY3VzLCAjMjU2M2ViKTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWRhdGUtcmFuZ2UtY29udGFpbmVyLnJwdC1pbnZhbGlkIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgfVxuXG4gICAgLnJwdC1kYXRlLXN1YmZpZWxkIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAucnB0LWRhdGUtcHJlZml4IHtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgICAucnB0LWRhdGUtaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NHJlbSk7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBwYWRkaW5nOiA0cHggMDtcbiAgICB9XG4gICAgLnJwdC1kYXRlLWlucHV0OmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cblxuICAgIC5ycHQtcmFuZ2Utc2VwYXJhdG9yIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgfVxuXG4gICAgLnJwdC1yYW5nZS1jbGVhci1idG4ge1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB3aWR0aDogMThweDtcbiAgICAgIGhlaWdodDogMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMgZWFzZSwgY29sb3IgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1yYW5nZS1jbGVhci1idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZThmMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1lcnJvci10ZXh0IHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgICBtYXJnaW4tdG9wOiAycHg7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJwdERhdGVSYW5nZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgY29udHJvbCA9IGlucHV0PEZvcm1Db250cm9sIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZhbGxiYWNrQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxEYXRlUmFuZ2VWYWx1ZSB8IHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGZvcm1Db250cm9sID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb250cm9sKCkgPz8gdGhpcy5mYWxsYmFja0NvbnRyb2wpO1xuICByZWFkb25seSBlbGVtZW50SWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLmtleSB8fCB0aGlzLmNvbmZpZygpLmlkKTtcbiAgcmVhZG9ubHkgbWluRGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnbWluRGF0ZSddIGFzIHN0cmluZykgfHwgbnVsbCk7XG4gIHJlYWRvbmx5IG1heERhdGUgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ21heERhdGUnXSBhcyBzdHJpbmcpIHx8IG51bGwpO1xuICByZWFkb25seSBzaG93UHJlc2V0cyA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydzaG93UHJlc2V0cyddICE9PSBmYWxzZVxuICApO1xuXG4gIHJlYWRvbmx5IHByZXNldHM6IERhdGVSYW5nZVByZXNldFtdID0gW1xuICAgIHsgaWQ6ICd0b2RheScsIGxhYmVsOiAnVG9kYXknIH0sXG4gICAgeyBpZDogJ3llc3RlcmRheScsIGxhYmVsOiAnWWVzdGVyZGF5JyB9LFxuICAgIHsgaWQ6ICd0aGlzV2VlaycsIGxhYmVsOiAnVGhpcyBXZWVrJyB9LFxuICAgIHsgaWQ6ICd0aGlzTW9udGgnLCBsYWJlbDogJ1RoaXMgTW9udGgnIH0sXG4gICAgeyBpZDogJ2xhc3RNb250aCcsIGxhYmVsOiAnTGFzdCBNb250aCcgfSxcbiAgICB7IGlkOiAndGhpc1F1YXJ0ZXInLCBsYWJlbDogJ1RoaXMgUXVhcnRlcicgfSxcbiAgICB7IGlkOiAneXRkJywgbGFiZWw6ICdZVEQnIH0sXG4gIF07XG5cbiAgcmVhZG9ubHkgZnJvbURhdGUgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHRvRGF0ZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgYWN0aXZlUHJlc2V0ID0gc2lnbmFsPHN0cmluZz4oJ2N1c3RvbScpO1xuXG4gIHJlYWRvbmx5IGhhc1ZhbHVlID0gY29tcHV0ZWQoKCkgPT4gISEodGhpcy5mcm9tRGF0ZSgpIHx8IHRoaXMudG9EYXRlKCkpKTtcblxuICByZWFkb25seSByYW5nZUVycm9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGYgPSB0aGlzLmZyb21EYXRlKCk7XG4gICAgY29uc3QgdCA9IHRoaXMudG9EYXRlKCk7XG4gICAgaWYgKGYgJiYgdCAmJiBmID4gdCkge1xuICAgICAgcmV0dXJuIGAnRnJvbScgZGF0ZSBjYW5ub3QgYmUgYWZ0ZXIgJ1RvJyBkYXRlYDtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9KTtcblxuICByZWFkb25seSBpc0ludmFsaWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICByZXR1cm4gKGN0cmwuaW52YWxpZCAmJiAoY3RybC5kaXJ0eSB8fCBjdHJsLnRvdWNoZWQpKSB8fCAhIXRoaXMucmFuZ2VFcnJvcigpO1xuICB9KTtcblxuICByZWFkb25seSBlcnJvck1lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybUNvbnRyb2woKTtcbiAgICBpZiAoIWN0cmwuaW52YWxpZCB8fCAoIWN0cmwuZGlydHkgJiYgIWN0cmwudG91Y2hlZCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgZXJyb3JzID0gY3RybC5lcnJvcnM7XG4gICAgaWYgKCFlcnJvcnMpIHJldHVybiAnJztcbiAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gICAgcmV0dXJuIGdldFZhbGlkYXRpb25NZXNzYWdlKHRoaXMuY29uZmlnKCkudmFsaWRhdGlvbiwgZmlyc3RLZXkpO1xuICB9KTtcblxuICBwcml2YXRlIGNvbnRyb2xTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtQ29udHJvbCgpO1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5zeW5jQ29udHJvbFZhbHVlKGN0cmwudmFsdWUpKTtcbiAgICAgICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNvbnRyb2xTdWIgPSBjdHJsLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHYpID0+IHRoaXMuc3luY0NvbnRyb2xWYWx1ZSh2KSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRQcmVzZXQgPSB0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnZGVmYXVsdFByZXNldCddIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZGVmYXVsdFByZXNldCAmJiAhdGhpcy5mb3JtQ29udHJvbCgpLnZhbHVlKSB7XG4gICAgICB0aGlzLmFwcGx5UHJlc2V0KGRlZmF1bHRQcmVzZXQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3luY0NvbnRyb2xWYWx1ZSh2YWw6IHVua25vd24pOiB2b2lkIHtcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICdmcm9tJyBpbiAodmFsIGFzIGFueSkpIHtcbiAgICAgIGNvbnN0IGRydiA9IHZhbCBhcyBEYXRlUmFuZ2VWYWx1ZTtcbiAgICAgIHRoaXMuZnJvbURhdGUuc2V0KGRydi5mcm9tIHx8ICcnKTtcbiAgICAgIHRoaXMudG9EYXRlLnNldChkcnYudG8gfHwgJycpO1xuICAgICAgaWYgKGRydi5wcmVzZXQpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVQcmVzZXQuc2V0KGRydi5wcmVzZXQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLmluY2x1ZGVzKCcsJykpIHtcbiAgICAgIGNvbnN0IFtmLCB0XSA9IHZhbC5zcGxpdCgnLCcpO1xuICAgICAgdGhpcy5mcm9tRGF0ZS5zZXQoZj8udHJpbSgpIHx8ICcnKTtcbiAgICAgIHRoaXMudG9EYXRlLnNldCh0Py50cmltKCkgfHwgJycpO1xuICAgIH0gZWxzZSBpZiAoIXZhbCkge1xuICAgICAgdGhpcy5mcm9tRGF0ZS5zZXQoJycpO1xuICAgICAgdGhpcy50b0RhdGUuc2V0KCcnKTtcbiAgICAgIHRoaXMuYWN0aXZlUHJlc2V0LnNldCgnY3VzdG9tJyk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlQcmVzZXQocHJlc2V0SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgbGV0IGZyb20gPSAnJztcbiAgICBsZXQgdG8gPSAnJztcblxuICAgIHN3aXRjaCAocHJlc2V0SWQpIHtcbiAgICAgIGNhc2UgJ3RvZGF5JzpcbiAgICAgICAgZnJvbSA9IGZvcm1hdFlNRChub3cpO1xuICAgICAgICB0byA9IGZvcm1hdFlNRChub3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llc3RlcmRheSc6IHtcbiAgICAgICAgY29uc3QgeSA9IG5ldyBEYXRlKG5vdyk7XG4gICAgICAgIHkuc2V0RGF0ZSh5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICBmcm9tID0gZm9ybWF0WU1EKHkpO1xuICAgICAgICB0byA9IGZvcm1hdFlNRCh5KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd0aGlzV2Vlayc6IHtcbiAgICAgICAgY29uc3QgZGF5ID0gbm93LmdldERheSgpO1xuICAgICAgICBjb25zdCBkaWZmID0gbm93LmdldERhdGUoKSAtIGRheSArIChkYXkgPT09IDAgPyAtNiA6IDEpOyAvLyBNb25kYXlcbiAgICAgICAgY29uc3QgbW9uZGF5ID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgbW9uZGF5LnNldERhdGUoZGlmZik7XG4gICAgICAgIGZyb20gPSBmb3JtYXRZTUQobW9uZGF5KTtcbiAgICAgICAgdG8gPSBmb3JtYXRZTUQobm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd0aGlzTW9udGgnOlxuICAgICAgICBmcm9tID0gYCR7bm93LmdldEZ1bGxZZWFyKCl9LSR7cGFkKG5vdy5nZXRNb250aCgpICsgMSl9LTAxYDtcbiAgICAgICAgdG8gPSBmb3JtYXRZTUQobmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpICsgMSwgMCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xhc3RNb250aCc6IHtcbiAgICAgICAgY29uc3QgbGFzdE1vbnRoRW5kID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCAwKTtcbiAgICAgICAgZnJvbSA9IGAke2xhc3RNb250aEVuZC5nZXRGdWxsWWVhcigpfS0ke3BhZChsYXN0TW9udGhFbmQuZ2V0TW9udGgoKSArIDEpfS0wMWA7XG4gICAgICAgIHRvID0gZm9ybWF0WU1EKGxhc3RNb250aEVuZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAndGhpc1F1YXJ0ZXInOiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRRdWFydGVyID0gTWF0aC5mbG9vcihub3cuZ2V0TW9udGgoKSAvIDMpO1xuICAgICAgICBjb25zdCBzdGFydE1vbnRoID0gY3VycmVudFF1YXJ0ZXIgKiAzO1xuICAgICAgICBjb25zdCBlbmRNb250aCA9IHN0YXJ0TW9udGggKyAyO1xuICAgICAgICBmcm9tID0gYCR7bm93LmdldEZ1bGxZZWFyKCl9LSR7cGFkKHN0YXJ0TW9udGggKyAxKX0tMDFgO1xuICAgICAgICB0byA9IGZvcm1hdFlNRChuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgZW5kTW9udGggKyAxLCAwKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAneXRkJzpcbiAgICAgICAgZnJvbSA9IGAke25vdy5nZXRGdWxsWWVhcigpfS0wMS0wMWA7XG4gICAgICAgIHRvID0gZm9ybWF0WU1EKG5vdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZnJvbURhdGUuc2V0KGZyb20pO1xuICAgIHRoaXMudG9EYXRlLnNldCh0byk7XG4gICAgdGhpcy5hY3RpdmVQcmVzZXQuc2V0KHByZXNldElkKTtcbiAgICB0aGlzLmVtaXRSYW5nZUNoYW5nZSh7IGZyb20sIHRvLCBwcmVzZXQ6IHByZXNldElkIH0pO1xuICB9XG5cbiAgb25Gcm9tQ2hhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZyb20gPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMuZnJvbURhdGUuc2V0KGZyb20pO1xuICAgIHRoaXMuYWN0aXZlUHJlc2V0LnNldCgnY3VzdG9tJyk7XG4gICAgdGhpcy5lbWl0UmFuZ2VDaGFuZ2UoeyBmcm9tLCB0bzogdGhpcy50b0RhdGUoKSwgcHJlc2V0OiAnY3VzdG9tJyB9KTtcbiAgfVxuXG4gIG9uVG9DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdG8gPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgIHRoaXMudG9EYXRlLnNldCh0byk7XG4gICAgdGhpcy5hY3RpdmVQcmVzZXQuc2V0KCdjdXN0b20nKTtcbiAgICB0aGlzLmVtaXRSYW5nZUNoYW5nZSh7IGZyb206IHRoaXMuZnJvbURhdGUoKSwgdG8sIHByZXNldDogJ2N1c3RvbScgfSk7XG4gIH1cblxuICBjbGVhclJhbmdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZnJvbURhdGUuc2V0KCcnKTtcbiAgICB0aGlzLnRvRGF0ZS5zZXQoJycpO1xuICAgIHRoaXMuYWN0aXZlUHJlc2V0LnNldCgnY3VzdG9tJyk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRSYW5nZUNoYW5nZShyYW5nZTogRGF0ZVJhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkuc2V0VmFsdWUocmFuZ2UpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbn1cbiJdfQ==
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnB0LWRhdGUtcmFuZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvcHJpbWl0aXZlcy9jb21wb25lbnRzL2RhdGUtcmFuZ2UvcnB0LWRhdGUtcmFuZ2UuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOztBQWFuRixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQVMsRUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFPLEVBQVUsRUFBRSxDQUNwQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBK1BwRSxNQUFNLE9BQU8scUJBQXFCO0lBQ3ZCLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE2QixDQUFDO0lBQ3JELE9BQU8sR0FBRyxLQUFLLEVBQWtDLENBQUM7SUFFMUMsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFpQyxJQUFJLENBQUMsQ0FBQztJQUVoRixXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVB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UGpDLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsbUJBQW1CLENBQUMsWUFDcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9GVCxtQkFtS2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWNvbXBvbmVudC5tb2RlbCc7XG5pbXBvcnQgeyBnZXRWYWxpZGF0aW9uTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvdmFsaWRhdGlvbi92YWxpZGF0aW9uLWZhY3RvcnknO1xuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVSYW5nZVZhbHVlIHtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlUHJlc2V0IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuY29uc3QgcGFkID0gKG46IG51bWJlcik6IHN0cmluZyA9PiBTdHJpbmcobikucGFkU3RhcnQoMiwgJzAnKTtcbmNvbnN0IGZvcm1hdFlNRCA9IChkOiBEYXRlKTogc3RyaW5nID0+XG4gIGAke2QuZ2V0RnVsbFllYXIoKX0tJHtwYWQoZC5nZXRNb250aCgpICsgMSl9LSR7cGFkKGQuZ2V0RGF0ZSgpKX1gO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZGF0ZS1yYW5nZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWZpZWxkLWdyb3VwXCI+XG4gICAgICA8IS0tIEhlYWRlciB3aXRoIExhYmVsICYgUHJlc2V0IEJhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJycHQtbGFiZWwtcm93XCI+XG4gICAgICAgIEBpZiAoY29uZmlnKCkubGFiZWwpIHtcbiAgICAgICAgICA8bGFiZWwgW2Zvcl09XCJlbGVtZW50SWQoKSArICdfZnJvbSdcIiBjbGFzcz1cInJwdC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgY29uZmlnKCkubGFiZWwgfX1cbiAgICAgICAgICAgIEBpZiAoY29uZmlnKCkudmFsaWRhdGlvbj8ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtcmVxdWlyZWQtbWFya2VyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChzaG93UHJlc2V0cygpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1wcmVzZXQtcGlsbHNcIiByb2xlPVwidG9vbGJhclwiIGFyaWEtbGFiZWw9XCJEYXRlIHByZXNldHNcIj5cbiAgICAgICAgICAgIEBmb3IgKHAgb2YgcHJlc2V0czsgdHJhY2sgcC5pZCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcHJlc2V0LXBpbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1hY3RpdmVdPVwiYWN0aXZlUHJlc2V0KCkgPT09IHAuaWRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtQ29udHJvbCgpLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlQcmVzZXQocC5pZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcC5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRGF0ZSBJbnB1dHMgQ29udGFpbmVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1kYXRlLXJhbmdlLWNvbnRhaW5lclwiIFtjbGFzcy5ycHQtaW52YWxpZF09XCJpc0ludmFsaWQoKVwiPlxuICAgICAgICA8IS0tIEZyb20gRmllbGQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZGF0ZS1zdWJmaWVsZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWRhdGUtcHJlZml4XCI+RnJvbTwvc3Bhbj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtpZF09XCJlbGVtZW50SWQoKSArICdfZnJvbSdcIlxuICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtZGF0ZS1pbnB1dFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZnJvbURhdGUoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2woKS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbbWluXT1cIm1pbkRhdGUoKVwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heERhdGUoKVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25Gcm9tQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXJhbmdlLXNlcGFyYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPuKGkjwvc3Bhbj5cblxuICAgICAgICA8IS0tIFRvIEZpZWxkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWRhdGUtc3ViZmllbGRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1kYXRlLXByZWZpeFwiPlRvPC9zcGFuPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW2lkXT1cImVsZW1lbnRJZCgpICsgJ190bydcIlxuICAgICAgICAgICAgdHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJycHQtZGF0ZS1pbnB1dFwiXG4gICAgICAgICAgICBbdmFsdWVdPVwidG9EYXRlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sKCkuZGlzYWJsZWRcIlxuICAgICAgICAgICAgW21pbl09XCJmcm9tRGF0ZSgpIHx8IG1pbkRhdGUoKVwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heERhdGUoKVwiXG4gICAgICAgICAgICAoaW5wdXQpPVwib25Ub0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFF1aWNrIENsZWFyIEJ1dHRvbiAtLT5cbiAgICAgICAgQGlmIChoYXNWYWx1ZSgpICYmICFmb3JtQ29udHJvbCgpLmRpc2FibGVkKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInJwdC1yYW5nZS1jbGVhci1idG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJDbGVhciBkYXRlIHJhbmdlXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBkYXRlIHJhbmdlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhclJhbmdlKCRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIOKclVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgQGlmIChyYW5nZUVycm9yKCkpIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtZXJyb3ItdGV4dFwiPnt7IHJhbmdlRXJyb3IoKSB9fTwvc3Bhbj5cbiAgICAgIH0gQGVsc2UgaWYgKGVycm9yTWVzc2FnZSgpKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWVycm9yLXRleHRcIj57eyBlcnJvck1lc3NhZ2UoKSB9fTwvc3Bhbj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZmllbGQtZ3JvdXAge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtbGFiZWwtcm93IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgfVxuICAgIC5ycHQtbGFiZWwge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC5ycHQtcmVxdWlyZWQtbWFya2VyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAycHg7XG4gICAgfVxuXG4gICAgLyogUHJlc2V0IEJ1dHRvbnMgKi9cbiAgICAucnB0LXByZXNldC1waWxscyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDNweDtcbiAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtcGlsbCB7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBmb250LXNpemU6IDAuNjg3NXJlbTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBwYWRkaW5nOiAxcHggN3B4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgMTIwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtcGlsbDpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBiYWNrZ3JvdW5kOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXByZXNldC1waWxsLmlzLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG4gICAgLnJwdC1wcmVzZXQtcGlsbDpkaXNhYmxlZCB7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgb3BhY2l0eTogMC41O1xuICAgIH1cblxuICAgIC8qIElucHV0cyBDb250YWluZXIgKi9cbiAgICAucnB0LWRhdGUtcmFuZ2UtY29udGFpbmVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA4cHg7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAzOHB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIHBhZGRpbmc6IDNweCA4cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cywgNnB4KTtcbiAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciB2YXIoLS1ycHQtdHJhbnNpdGlvbi1zcGVlZCwgMTUwbXMpIGVhc2UsXG4gICAgICAgICAgICAgICAgICBib3gtc2hhZG93IHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1kYXRlLXJhbmdlLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4ge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLWZvY3VzLCAjMjU2M2ViKTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LWZvY3VzLCAwIDAgMCAzcHggcmdiYSgzNywgOTksIDIzNSwgMC4yNSkpO1xuICAgIH1cbiAgICAucnB0LWRhdGUtcmFuZ2UtY29udGFpbmVyLnJwdC1pbnZhbGlkIHtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWRhbmdlciwgI2VmNDQ0NCk7XG4gICAgfVxuXG4gICAgLnJwdC1kYXRlLXN1YmZpZWxkIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAucnB0LWRhdGUtcHJlZml4IHtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wM2VtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgICAucnB0LWRhdGUtaW5wdXQge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NHJlbSk7XG4gICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBwYWRkaW5nOiA0cHggMDtcbiAgICB9XG4gICAgLnJwdC1kYXRlLWlucHV0OmRpc2FibGVkIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cblxuICAgIC5ycHQtcmFuZ2Utc2VwYXJhdG9yIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgICAgcGFkZGluZzogMCAycHg7XG4gICAgfVxuXG4gICAgLnJwdC1yYW5nZS1jbGVhci1idG4ge1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYmFja2dyb3VuZDogI2YxZjVmOTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB3aWR0aDogMThweDtcbiAgICAgIGhlaWdodDogMThweDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMTUwbXMgZWFzZSwgY29sb3IgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1yYW5nZS1jbGVhci1idG46aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZThmMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgfVxuXG4gICAgLnJwdC1lcnJvci10ZXh0IHtcbiAgICAgIGZvbnQtc2l6ZTogMC43cmVtO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgbWFyZ2luLXRvcDogM3B4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIGBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUnB0RGF0ZVJhbmdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRDb21wb25lbnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBjb250cm9sID0gaW5wdXQ8Rm9ybUNvbnRyb2wgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZmFsbGJhY2tDb250cm9sID0gbmV3IEZvcm1Db250cm9sPERhdGVSYW5nZVZhbHVlIHwgc3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2wgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbnRyb2woKSA/PyB0aGlzLmZhbGxiYWNrQ29udHJvbCk7XG4gIHJlYWRvbmx5IGVsZW1lbnRJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCkua2V5IHx8IHRoaXMuY29uZmlnKCkuaWQpO1xuICByZWFkb25seSBtaW5EYXRlID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydtaW5EYXRlJ10gYXMgc3RyaW5nKSB8fCBudWxsKTtcbiAgcmVhZG9ubHkgbWF4RGF0ZSA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmNvbmZpZygpLnByb3BlcnRpZXM/LlsnbWF4RGF0ZSddIGFzIHN0cmluZykgfHwgbnVsbCk7XG4gIHJlYWRvbmx5IHNob3dQcmVzZXRzID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5jb25maWcoKS5wcm9wZXJ0aWVzPy5bJ3Nob3dQcmVzZXRzJ10gIT09IGZhbHNlXG4gICk7XG5cbiAgcmVhZG9ubHkgcHJlc2V0czogRGF0ZVJhbmdlUHJlc2V0W10gPSBbXG4gICAgeyBpZDogJ3RvZGF5JywgbGFiZWw6ICdUb2RheScgfSxcbiAgICB7IGlkOiAneWVzdGVyZGF5JywgbGFiZWw6ICdZZXN0ZXJkYXknIH0sXG4gICAgeyBpZDogJ3RoaXNXZWVrJywgbGFiZWw6ICdUaGlzIFdlZWsnIH0sXG4gICAgeyBpZDogJ3RoaXNNb250aCcsIGxhYmVsOiAnVGhpcyBNb250aCcgfSxcbiAgICB7IGlkOiAnbGFzdE1vbnRoJywgbGFiZWw6ICdMYXN0IE1vbnRoJyB9LFxuICAgIHsgaWQ6ICd0aGlzUXVhcnRlcicsIGxhYmVsOiAnVGhpcyBRdWFydGVyJyB9LFxuICAgIHsgaWQ6ICd5dGQnLCBsYWJlbDogJ1lURCcgfSxcbiAgXTtcblxuICByZWFkb25seSBmcm9tRGF0ZSA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgdG9EYXRlID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICByZWFkb25seSBhY3RpdmVQcmVzZXQgPSBzaWduYWw8c3RyaW5nPignY3VzdG9tJyk7XG5cbiAgcmVhZG9ubHkgaGFzVmFsdWUgPSBjb21wdXRlZCgoKSA9PiAhISh0aGlzLmZyb21EYXRlKCkgfHwgdGhpcy50b0RhdGUoKSkpO1xuXG4gIHJlYWRvbmx5IHJhbmdlRXJyb3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZiA9IHRoaXMuZnJvbURhdGUoKTtcbiAgICBjb25zdCB0ID0gdGhpcy50b0RhdGUoKTtcbiAgICBpZiAoZiAmJiB0ICYmIGYgPiB0KSB7XG4gICAgICByZXR1cm4gYCdGcm9tJyBkYXRlIGNhbm5vdCBiZSBhZnRlciAnVG8nIGRhdGVgO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzSW52YWxpZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtQ29udHJvbCgpO1xuICAgIHJldHVybiAoY3RybC5pbnZhbGlkICYmIChjdHJsLmRpcnR5IHx8IGN0cmwudG91Y2hlZCkpIHx8ICEhdGhpcy5yYW5nZUVycm9yKCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGVycm9yTWVzc2FnZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtQ29udHJvbCgpO1xuICAgIGlmICghY3RybC5pbnZhbGlkIHx8ICghY3RybC5kaXJ0eSAmJiAhY3RybC50b3VjaGVkKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBlcnJvcnMgPSBjdHJsLmVycm9ycztcbiAgICBpZiAoIWVycm9ycykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZpcnN0S2V5ID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICByZXR1cm4gZ2V0VmFsaWRhdGlvbk1lc3NhZ2UodGhpcy5jb25maWcoKS52YWxpZGF0aW9uLCBmaXJzdEtleSk7XG4gIH0pO1xuXG4gIHByaXZhdGUgY29udHJvbFN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZvcm1Db250cm9sKCk7XG4gICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLnN5bmNDb250cm9sVmFsdWUoY3RybC52YWx1ZSkpO1xuICAgICAgICB0aGlzLmNvbnRyb2xTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY29udHJvbFN1YiA9IGN0cmwudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodikgPT4gdGhpcy5zeW5jQ29udHJvbFZhbHVlKHYpKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdFByZXNldCA9IHRoaXMuY29uZmlnKCkucHJvcGVydGllcz8uWydkZWZhdWx0UHJlc2V0J10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChkZWZhdWx0UHJlc2V0ICYmICF0aGlzLmZvcm1Db250cm9sKCkudmFsdWUpIHtcbiAgICAgIHRoaXMuYXBwbHlQcmVzZXQoZGVmYXVsdFByZXNldCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sU3ViPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW5jQ29udHJvbFZhbHVlKHZhbDogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgJ2Zyb20nIGluICh2YWwgYXMgYW55KSkge1xuICAgICAgY29uc3QgZHJ2ID0gdmFsIGFzIERhdGVSYW5nZVZhbHVlO1xuICAgICAgdGhpcy5mcm9tRGF0ZS5zZXQoZHJ2LmZyb20gfHwgJycpO1xuICAgICAgdGhpcy50b0RhdGUuc2V0KGRydi50byB8fCAnJyk7XG4gICAgICBpZiAoZHJ2LnByZXNldCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVByZXNldC5zZXQoZHJ2LnByZXNldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoJywnKSkge1xuICAgICAgY29uc3QgW2YsIHRdID0gdmFsLnNwbGl0KCcsJyk7XG4gICAgICB0aGlzLmZyb21EYXRlLnNldChmPy50cmltKCkgfHwgJycpO1xuICAgICAgdGhpcy50b0RhdGUuc2V0KHQ/LnRyaW0oKSB8fCAnJyk7XG4gICAgfSBlbHNlIGlmICghdmFsKSB7XG4gICAgICB0aGlzLmZyb21EYXRlLnNldCgnJyk7XG4gICAgICB0aGlzLnRvRGF0ZS5zZXQoJycpO1xuICAgICAgdGhpcy5hY3RpdmVQcmVzZXQuc2V0KCdjdXN0b20nKTtcbiAgICB9XG4gIH1cblxuICBhcHBseVByZXNldChwcmVzZXRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBsZXQgZnJvbSA9ICcnO1xuICAgIGxldCB0byA9ICcnO1xuXG4gICAgc3dpdGNoIChwcmVzZXRJZCkge1xuICAgICAgY2FzZSAndG9kYXknOlxuICAgICAgICBmcm9tID0gZm9ybWF0WU1EKG5vdyk7XG4gICAgICAgIHRvID0gZm9ybWF0WU1EKG5vdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAneWVzdGVyZGF5Jzoge1xuICAgICAgICBjb25zdCB5ID0gbmV3IERhdGUobm93KTtcbiAgICAgICAgeS5zZXREYXRlKHkuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgIGZyb20gPSBmb3JtYXRZTUQoeSk7XG4gICAgICAgIHRvID0gZm9ybWF0WU1EKHkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXNXZWVrJzoge1xuICAgICAgICBjb25zdCBkYXkgPSBub3cuZ2V0RGF5KCk7XG4gICAgICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0RGF0ZSgpIC0gZGF5ICsgKGRheSA9PT0gMCA/IC02IDogMSk7IC8vIE1vbmRheVxuICAgICAgICBjb25zdCBtb25kYXkgPSBuZXcgRGF0ZShub3cpO1xuICAgICAgICBtb25kYXkuc2V0RGF0ZShkaWZmKTtcbiAgICAgICAgZnJvbSA9IGZvcm1hdFlNRChtb25kYXkpO1xuICAgICAgICB0byA9IGZvcm1hdFlNRChub3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoaXNNb250aCc6XG4gICAgICAgIGZyb20gPSBgJHtub3cuZ2V0RnVsbFllYXIoKX0tJHtwYWQobm93LmdldE1vbnRoKCkgKyAxKX0tMDFgO1xuICAgICAgICB0byA9IGZvcm1hdFlNRChuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCkgKyAxLCAwKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFzdE1vbnRoJzoge1xuICAgICAgICBjb25zdCBsYXN0TW9udGhFbmQgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIDApO1xuICAgICAgICBmcm9tID0gYCR7bGFzdE1vbnRoRW5kLmdldEZ1bGxZZWFyKCl9LSR7cGFkKGxhc3RNb250aEVuZC5nZXRNb250aCgpICsgMSl9LTAxYDtcbiAgICAgICAgdG8gPSBmb3JtYXRZTUQobGFzdE1vbnRoRW5kKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd0aGlzUXVhcnRlcic6IHtcbiAgICAgICAgY29uc3QgY3VycmVudFF1YXJ0ZXIgPSBNYXRoLmZsb29yKG5vdy5nZXRNb250aCgpIC8gMyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9udGggPSBjdXJyZW50UXVhcnRlciAqIDM7XG4gICAgICAgIGNvbnN0IGVuZE1vbnRoID0gc3RhcnRNb250aCArIDI7XG4gICAgICAgIGZyb20gPSBgJHtub3cuZ2V0RnVsbFllYXIoKX0tJHtwYWQoc3RhcnRNb250aCArIDEpfS0wMWA7XG4gICAgICAgIHRvID0gZm9ybWF0WU1EKG5ldyBEYXRlKG5vdy5nZXRGdWxsWWVhcigpLCBlbmRNb250aCArIDEsIDApKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICd5dGQnOlxuICAgICAgICBmcm9tID0gYCR7bm93LmdldEZ1bGxZZWFyKCl9LTAxLTAxYDtcbiAgICAgICAgdG8gPSBmb3JtYXRZTUQobm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5mcm9tRGF0ZS5zZXQoZnJvbSk7XG4gICAgdGhpcy50b0RhdGUuc2V0KHRvKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldC5zZXQocHJlc2V0SWQpO1xuICAgIHRoaXMuZW1pdFJhbmdlQ2hhbmdlKHsgZnJvbSwgdG8sIHByZXNldDogcHJlc2V0SWQgfSk7XG4gIH1cblxuICBvbkZyb21DaGFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZnJvbSA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5mcm9tRGF0ZS5zZXQoZnJvbSk7XG4gICAgdGhpcy5hY3RpdmVQcmVzZXQuc2V0KCdjdXN0b20nKTtcbiAgICB0aGlzLmVtaXRSYW5nZUNoYW5nZSh7IGZyb20sIHRvOiB0aGlzLnRvRGF0ZSgpLCBwcmVzZXQ6ICdjdXN0b20nIH0pO1xuICB9XG5cbiAgb25Ub0NoYW5nZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0byA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy50b0RhdGUuc2V0KHRvKTtcbiAgICB0aGlzLmFjdGl2ZVByZXNldC5zZXQoJ2N1c3RvbScpO1xuICAgIHRoaXMuZW1pdFJhbmdlQ2hhbmdlKHsgZnJvbTogdGhpcy5mcm9tRGF0ZSgpLCB0bywgcHJlc2V0OiAnY3VzdG9tJyB9KTtcbiAgfVxuXG4gIGNsZWFyUmFuZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5mcm9tRGF0ZS5zZXQoJycpO1xuICAgIHRoaXMudG9EYXRlLnNldCgnJyk7XG4gICAgdGhpcy5hY3RpdmVQcmVzZXQuc2V0KCdjdXN0b20nKTtcbiAgICB0aGlzLmZvcm1Db250cm9sKCkuc2V0VmFsdWUobnVsbCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFJhbmdlQ2hhbmdlKHJhbmdlOiBEYXRlUmFuZ2VWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUNvbnRyb2woKS5zZXRWYWx1ZShyYW5nZSk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5mb3JtQ29udHJvbCgpLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxufVxuIl19