simpo-component-library 3.6.970 → 3.6.972

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.
@@ -404,8 +404,19 @@ export class ViewBlogComponent {
404
404
  ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
405
405
  this.tocOpen = false;
406
406
  }
407
+ // Real published blogs don't always carry a block id (only editor-produced ones do). The TOC,
408
+ // scroll anchors, and hero-image detection all key off block.id, so backfill a stable one —
409
+ // stable across re-renders since it's derived from the block's fixed position in the array.
410
+ ensureBlockIds(blocks) {
411
+ blocks.forEach((block, index) => {
412
+ if (!block.id) {
413
+ block.id = `block-idx-${index}`;
414
+ }
415
+ });
416
+ }
407
417
  buildTableOfContents() {
408
418
  const blocks = this.responseData?.blocks || [];
419
+ this.ensureBlockIds(blocks);
409
420
  this.headingBlockIds.clear();
410
421
  this.tocItems = blocks
411
422
  .map(block => this.getHeadingCandidate(block))
@@ -514,4 +525,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
514
525
  }] }], propDecorators: { responseData: [{
515
526
  type: Input
516
527
  }] } });
517
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1ibG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvdmlldy1ibG9nL3ZpZXctYmxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3ZpZXctYmxvZy92aWV3LWJsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBRUwsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBSUwsV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOzs7OztBQXFCaEgsTUFBTSxPQUFPLGlCQUFpQjtJQWdWNUIsWUFDbUIsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsV0FBb0MsRUFDaEMsVUFBa0I7UUFIdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBalY5QyxpQkFBWSxHQUFRO1lBQzNCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsV0FBVyxFQUFFLFFBQVE7WUFDckIsYUFBYSxFQUFFLHNGQUFzRjtZQUNyRyxrQkFBa0IsRUFBRSwrQkFBK0I7WUFDbkQsVUFBVSxFQUFFLEdBQUc7WUFDZixXQUFXLEVBQUUsR0FBRztZQUNoQixhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLEVBQUUsc0NBQXNDO1lBQzVDLFlBQVksRUFBRSxzQ0FBc0M7WUFDcEQsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsRUFBRTtZ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TyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUMsRUFDRCxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxDQUNuQyxDQUFDO1FBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzsrR0F4aEJVLGlCQUFpQixvR0FvVmxCLFdBQVc7bUdBcFZWLGlCQUFpQiwwSUNwQzlCLDgyS0F3SUEscWlKRHhHWSxZQUFZLGdYQUFZLDhCQUE4Qjs7NEZBSXJELGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixDQUFDOzswQkF3VjlELE1BQU07MkJBQUMsV0FBVzt5Q0FsVlosWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGF0ZVBpcGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBQTEFURk9STV9JRCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWNlbnRCbG9nUG9zdFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9yZWNlbnQtYmxvZy1wb3N0LXNlY3Rpb24vcmVjZW50LWJsb2ctcG9zdC1zZWN0aW9uLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgVG9jSXRlbSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0ZXh0OiBzdHJpbmc7XHJcbiAgbGV2ZWw6IG51bWJlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEJsb2dCbG9jayB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXZpZXctYmxvZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSwgUmVjZW50QmxvZ1Bvc3RTZWN0aW9uQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1ibG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdmlldy1ibG9nLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld0Jsb2dDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55ID0ge1xyXG4gICAgXCJzdWJJbmR1c3RyeUlkXCI6IG51bGwsXHJcbiAgICBcInN1YkluZHVzdHJ5TmFtZVwiOiBcIlwiLFxyXG4gICAgXCJkaXNwbGF5SWRcIjogXCJCRzE3ODRcIixcclxuICAgIFwiYXJ0aWNsZVNsdWdcIjogXCJDYXNlLVN0dWR5LUhvdy1hLUpld2VsbGVyeS1SZXRhaWxlci1JbmNyZWFzZWQtLUN1c3RvbWVyLUVuZ2FnZW1lbnQtVXNpbmctUGFzc2Jvb2tBcHBcIixcclxuICAgIFwidXBkYXRlZFRpbWVTdGFtcFwiOiBcIjIwMjYtMDgtMDRUMTE6NTk6MjQuMDAwKzAwOjAwXCIsXHJcbiAgICBcInJlYWRUaW1lXCI6IFwiM1wiLFxyXG4gICAgXCJ3b3JkQ291bnRcIjogNjM0LFxyXG4gICAgXCJ0b3RhbFZpc2l0c1wiOiAwLFxyXG4gICAgXCJpZFwiOiBcIjFmMThmZmJkLTNmOTgtNjVjMy1hMzc3LTlkMjlhNzgxYjk3OFwiLFxyXG4gICAgXCJidXNpbmVzc0lkXCI6IFwiMWYxOTU2N2EtY2UyNi02NzkwLThhMTQtYzc4NmZjMDg0YTgyXCIsXHJcbiAgICBcInRpbWVcIjogMCxcclxuICAgIFwidmVyc2lvblwiOiBcIlwiLFxyXG4gICAgXCJibG9ja3NcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcInUyelI0UTdBVXlcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiQ2FzZSBTdHVkeTogSG93IGEgSmV3ZWxsZXJ5IFJldGFpbGVyIEluY3JlYXNlZCBDdXN0b21lciBFbmdhZ2VtZW50IGJ5IDQwJSBVc2luZyBQYXNzYm9va0FwcFwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIjBVSjFXcWRWZm5cIixcclxuICAgICAgICBcInR5cGVcIjogXCJpbWFnZVwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcImNhcHRpb25cIjogXCJcIixcclxuICAgICAgICAgIFwid2l0aEJvcmRlclwiOiBmYWxzZSxcclxuICAgICAgICAgIFwid2l0aEJhY2tncm91bmRcIjogZmFsc2UsXHJcbiAgICAgICAgICBcInN0cmV0Y2hlZFwiOiBmYWxzZSxcclxuICAgICAgICAgIFwiZmlsZVwiOiB7XHJcbiAgICAgICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9pbWFnZXMvMTY5NzUyYzE3ODU4NDQzNTA0NzNDaGF0R1BUJTIwSW1hZ2UlMjBBdWclMjA0JTJDJTIwMjAyNiUyQyUyMDA1XzIyXzE4JTIwUE0ucG5nXCIsXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNTAwcHhcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJZSE96bWk1WGc3XCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxzcGFuIGNsYXNzPVxcXCJcXFwiPkluIHRvZGF54oCZcyBmYXN0LXBhY2VkIHJldGFpbCBtYXJrZXQsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBidWlsZGluZyBsb25nLXRlcm0gY3VzdG9tZXIgbG95YWx0eSBhbmQgbWFpbnRhaW5pbmcgYWN0aXZlIGVuZ2FnZW1lbnQgaXMgYSBtYWpvciBodXJkbGUgZm9yIHRyYWRpdGlvbmFsIGpld2VsZXJzLjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gV2hpbGUgZ29sZCBhbmQgc2lsdmVyIHNhdmluZyBzY2hlbWVzIChsaWtlIDEwKzEgbW9udGhseSBkZXBvc2l0IHBsYW5zKSBoYXZlIGxvbmcgYmVlbiB0aGUgYmFja2JvbmUgb2YgY3VzdG9tZXIgYWNxdWlzaXRpb24sPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBtYW5hZ2luZyB0aGVtIHRocm91Z2ggdHJhZGl0aW9uYWwgcGFwZXIgcGFzc2Jvb2tzIG9mdGVuIGxlYWRzIHRvIGxvdyBlbmdhZ2VtZW50LDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gbWlzc2VkIHBheW1lbnRzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gbG9zdCBwaHlzaWNhbCBib29rcyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGFuZCB1bHRpbWF0ZSBkcm9wLW9mZnMuPC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIm1vdUVicmZ4N3lcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+Rm9yIG11bHRpLWxvY2F0aW9uIHJldGFpbGVycyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHRoZXNlIGNoYWxsZW5nZXMgYXJlIGFtcGxpZmllZC48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IFBoeXNpY2FsIHJlZ2lzdGVycyBhbmQgbWFudWFsIGZvbGxvdy11cHMgYXQgZWFjaCBzdG9yZSBtYWtlIGNyZWF0aW5nIGEgdW5pZmllZCB2aWV3IG9mIHRoZSBjdXN0b21lciBsZXQgYWxvbmUgdGhlIGJ1c2luZXNzIHZpcnR1YWxseSBpbXBvc3NpYmxlLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJNN1luODZJZ2pSXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxzcGFuIGNsYXNzPVxcXCJcXFwiPlRoaXMgPC9zcGFuPjxiPmpld2VsbGVyeSBjdXN0b21lciBlbmdhZ2VtZW50IGNhc2Ugc3R1ZHk8L2I+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGRlbW9uc3RyYXRlcyBob3cgYSBwcm9taW5lbnQgcmV0YWlsIGpld2VsZXIgbGV2ZXJhZ2VkIDwvc3Bhbj48Yj5QYXNzYm9va0FwcCZuYnNwOzwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj5hIG1vZGVybiA8L3NwYW4+PGI+ZGlnaXRhbCBwYXNzYm9vayBmb3IgamV3ZWxsZXJ5IHN0b3JlczwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4mbmJzcDt0byBvdmVyaGF1bCB0aGVpciBvcGVyYXRpb25zLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYXV0b21hdGUgY3VzdG9tZXIgY29tbXVuaWNhdGlvbiB2aWEgV2hhdHNBcHAsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgZHJpdmUgc2lnbmlmaWNhbnQgYnVzaW5lc3MgZ3Jvd3RoLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCItdzVXc241NG1aXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIkZlYXR1cmVkIFN1Y2Nlc3MgU3Rvcnk6IEhvdyBQYXNzYm9va0FwcCBUb29rIExhZ3UgQmFuZGh1IEpld2VsbGVycyBmcm9tIFJlZ2lzdGVycyB0byBSZWFsLVRpbWVcIixcclxuICAgICAgICAgIFwibGV2ZWxcIjogMlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJ1ZFVFVFB6OXNOXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2VcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJjYXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICBcIndpdGhCb3JkZXJcIjogZmFsc2UsXHJcbiAgICAgICAgICBcIndpdGhCYWNrZ3JvdW5kXCI6IGZhbHNlLFxyXG4gICAgICAgICAgXCJzdHJldGNoZWRcIjogZmFsc2UsXHJcbiAgICAgICAgICBcImZpbGVcIjoge1xyXG4gICAgICAgICAgICBcInVybFwiOiBcImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vaW1hZ2VzLzc2NzA0NGMxNzg1ODQzODQ4MjIwU2xpZGUlMjAxNl85JTIwLSUyMDElMjAlMjg0JTI5LnBuZ1wiLFxyXG4gICAgICAgICAgICBcImhlaWdodFwiOiBcIjUwMHB4XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiUEpWVUFocUw1NlwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5MYWd1IEJhbmRodSBKZXdlbGxlcnMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhIGxlZ2FjeSBicmFuZCBzaW5jZSAxOTM2IHdpdGggbXVsdGlwbGUgc3RvcmUgbG9jYXRpb25zLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gZmFjZWQgYSBjcml0aWNhbCBvcGVyYXRpb25hbCBib3R0bGVuZWNrLjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gTWFuYWdpbmcgamV3ZWxsZXJ5IHNhdmluZyBzY2hlbWVzIGFjcm9zcyBudW1lcm91cyBicmFuY2hlcyB1c2luZyBwaHlzaWNhbCByZWdpc3RlcnMgbWVhbnQgcGF5bWVudHMgd2VyZSBkaWZmaWN1bHQgdG8gdHJhY2sgY2VudHJhbGx5LDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gZm9sbG93LXVwcyB3ZXJlIGRvbmUgbWFudWFsbHksPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgYSBzaW5nbGUsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiB1bmlmaWVkIHZpZXcgb2YgdGhlIGJ1c2luZXNzIHdhcyBtaXNzaW5nLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJoenpGZHZTazZmXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxzcGFuIGNsYXNzPVxcXCJcXFwiPlRoZXkgaW1wbGVtZW50ZWQgUGFzc2Jvb2tBcHAgYXMgdGhlaXIgZGVkaWNhdGVkIDwvc3Bhbj48Yj5qZXdlbGxlcnkgY3VzdG9tZXIgcmV0ZW50aW9uIHNvZnR3YXJlPC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiB0byByZXBsYWNlIHRoZWlyIGVudGlyZSBwYXBlci1iYXNlZCBzeXN0ZW0gd2l0aCBvbmUgZGlnaXRhbCB3b3JrZmxvdyB3aXRob3V0IGRpc3J1cHRpbmcgZXhpc3Rpbmcgb3BlcmF0aW9ucy48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiNGZwQ21xNGEwS1wiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5UaGlzIDwvc3Bhbj48Yj5qZXdlbGxlcnkgY3VzdG9tZXIgZW5nYWdlbWVudCBjYXNlIHN0dWR5PC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBoaWdobGlnaHRzIHRoZSBzcGVjaWZpYyBvdXRjb21lcyBhY2hpZXZlZCBieSBMYWd1IEJhbmRodSB3aXRoIHRoZSBwbGF0Zm9ybTo8L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwid0IzX2E1eFJRLVwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcImxpc3RcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJzdHlsZVwiOiBcInVub3JkZXJlZFwiLFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiBbXHJcbiAgICAgICAgICAgIFwiPGI+Q3VzdG9tZXIgQ29udmVuaWVuY2UgdmlhIERpZ2l0YWwgUGF5bWVudHM6PC9iPiBBIGtleSBmZWF0dXJlIHdhcyBlbmFibGluZyBjdXN0b21lcnMgdG8gcGF5IGZvciB0aGVpciBtb250aGx5IHNjaGVtZXMgZGlnaXRhbGx5LCBjb21wbGV0ZWx5IGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBhIHN0b3JlIHZpc2l0LlwiLFxyXG4gICAgICAgICAgICBcIjxiPkNlbnRyYWxpemVkIE11bHRpLUxvY2F0aW9uIFZpZXc6PC9iPiBNYW5hZ2VtZW50IG5vdyBoYXMgYSByZWFsLXRpbWUsIGNlbnRyYWxpemVkIHNjaGVtZSB2aWV3IGFjcm9zcyBhbGwgc3RvcmUgbG9jYXRpb25zLCBhIGNydWNpYWwgZWxlbWVudCBvZiB0aGVpciA8Yj5kaWdpdGFsIHRyYW5zZm9ybWF0aW9uIGluIGpld2VsbGVyeSByZXRhaWw8L2I+LlwiLFxyXG4gICAgICAgICAgICBcIjxiPlN0cmVhbWxpbmVkIE9wZXJhdGlvbnM6PC9iPiBNYW51YWwgdHJhY2tpbmcgYW5kIGV4Y2Vzc2l2ZSBwYXBlcndvcmsgaGF2ZSBiZWVuIG5lYXJseSBlbGltaW5hdGVkLCBvcHRpbWl6aW5nIHN0YWZmIHRpbWUgZm9yIHNhbGVzLlwiXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImlPV2hIeHJVR3hcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+UmVmbGVjdGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBNci48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IFBhcmFnIExhZ3UsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBEaXJlY3RvciBvZiBMYWd1IEJhbmRodSw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IG5vdGVkOjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCIwNm1MVUZleGRLXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxpPuKAnEFmdGVyIG1vcmUgdGhhbiB0d28geWVhcnMgd2l0aCBQYXNzYm9va0FQUCwgSSBjYW4gY29uZmlkZW50bHkgc2F5IGl04oCZcyBiZWVuIGFuIG91dHN0YW5kaW5nIGV4cGVyaWVuY2UuIFRoZWlyIHN1cHBvcnQgdGVhbSBpcyByZXNwb25zaXZlLCBrbm93bGVkZ2VhYmxlLCBhbmQgdHJ1bHkgY29tbWl0dGVkIHRvIG91ciBncm93dGguIEFueSBqZXdlbGVyIGxvb2tpbmcgdG8gc3RyZWFtbGluZSB0aGVpciBvcGVyYXRpb25zIHdvdWxkIGJlIHdpc2UgdG8gY29uc2lkZXIgUGFzc2Jvb2tBUFAu4oCdPC9pPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIjFoVnh2WVUtb0VcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiVGhlIENoYWxsZW5nZTogRnJpY3Rpb24gaW4gVHJhZGl0aW9uYWwgSmV3ZWxsZXJ5IFNhdmluZ3MgU2NoZW1lc1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImRtZkVKZ294Q1pcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+TGFndSBCYW5kaHUncyBleHBlcmllbmNlIHBlcmZlY3RseSBtaXJyb3JzIHRoZSBsYXJnZXIgb3BlcmF0aW9uYWwgY2hhbGxlbmdlIGZhY2VkIGJ5IHRoZSBpbmR1c3RyeS48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IEJlZm9yZSBwYXJ0bmVyaW5nIHdpdGggUGFzc2Jvb2tBcHAsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiB0cmFkaXRpb25hbCBtZXRob2RzIGNyZWF0ZWQgYSBwb29yIDwvc3Bhbj48Yj5qZXdlbGxlcnkgY3VzdG9tZXIgZXhwZXJpZW5jZTwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj46PC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImFwZ1ViS1BPT3dcIixcclxuICAgICAgICBcInR5cGVcIjogXCJsaXN0XCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwic3R5bGVcIjogXCJ1bm9yZGVyZWRcIixcclxuICAgICAgICAgIFwiaXRlbXNcIjogW1xyXG4gICAgICAgICAgICBcIjxiPkhpZ2ggRHJvcC1vZmYgUmF0ZXM6PC9iPiBDdXN0b21lcnMgZnJlcXVlbnRseSBmb3Jnb3QgbW9udGhseSBpbnN0YWxsbWVudHMsIGxlYWRpbmcgdG8gbGFwc2VkIGFjY291bnRzLlwiLFxyXG4gICAgICAgICAgICBcIjxiPkxhY2sgb2YgVmlzaWJpbGl0eTo8L2I+IEN1c3RvbWVycyBjb3VsZG7igJl0IHRyYWNrIHRoZWlyIGFjY3VtdWxhdGVkIGJhbGFuY2Ugb3IgZ29sZCB3ZWlnaHQgaW4gcmVhbC10aW1lLCBkZWNyZWFzaW5nIHRoZWlyIGVtb3Rpb25hbCBpbnZlc3RtZW50IGluIHRoZSBzY2hlbWUuXCIsXHJcbiAgICAgICAgICAgIFwiPGI+TWFudWFsIEFkbWluaXN0cmF0aXZlIEJ1cmRlbjo8L2I+IFN0YWZmIHNwZW50IGNvdW50bGVzcyBob3VycyBhbnN3ZXJpbmcgYmFsYW5jZSBpbnF1aXJpZXMsIGlzc3VpbmcgcmVjZWlwdHMsIGFuZCBtYWtpbmcgbWFudWFsIHJlbWluZGVyIGNhbGxzLlwiLFxyXG4gICAgICAgICAgICBcIjxiPldlYWsgUG9zdC1NYXR1cml0eSBFbmdhZ2VtZW50OjwvYj4gT25jZSBhIHNhdmluZ3Mgc2NoZW1lIG1hdHVyZWQsIHJlZGVlbWluZyB0aGUgZmluYWwgcHJvZHVjdCBmZWx0IHRyYW5zYWN0aW9uYWwgcmF0aGVyIHRoYW4gcmV3YXJkaW5nLCBsZWFkaW5nIHRvIGxvdyByZXBlYXQgZW5nYWdlbWVudC5cIlxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCIxT3hxNlQwVGhkXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIlRoZSBTb2x1dGlvbjogRGlnaXRhbCBUcmFuc2Zvcm1hdGlvbiB3aXRoIFBhc3Nib29rQXBwXCIsXHJcbiAgICAgICAgICBcImxldmVsXCI6IDJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiY0NwclVjOVA3OFwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5UaGUgaW1wbGVtZW50YXRpb24gYXQgTGFndSBCYW5kaHUgbGV2ZXJhZ2VkIFBhc3Nib29rQXBw4oCZcyBjb21wbGV0ZSA8L3NwYW4+PGI+amV3ZWxsZXJ5IENSTSBzb2Z0d2FyZTwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYW5kIDwvc3Bhbj48Yj5qZXdlbGxlcnkgbG95YWx0eSBzb2Z0d2FyZTwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gY2FwYWJpbGl0aWVzIHRvIG1vZGVybml6ZSBvcGVyYXRpb25zLjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gQnkgaW50ZWdyYXRpbmcgdGhlc2Ugc3BlY2lmaWMgdGVjaG5vbG9naWVzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gdGhlIHJldGFpbGVyIHdhcyBhYmxlIHRvIGFjaGlldmUgc2lnbmlmaWNhbnQgZ2FpbnM6PC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImJucTJjNFhNMmhcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiMS4gRGlnaXRhbCBQYXNzYm9vayBJbXBsZW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcInZKc0lXNzUzZTJcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+UmVwbGFjaW5nIHBoeXNpY2FsIGJvb2tsZXRzIHdpdGggYSBjZW50cmFsaXplZCA8L3NwYW4+PGI+ZGlnaXRhbCBwYXNzYm9vayBmb3IgamV3ZWxsZXJ5IHN0b3JlczwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYWxsb3dlZCBjdXN0b21lcnMgdG8gdmlldyB0aGVpciB0b3RhbCBiYWxhbmNlLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gcmVhbC10aW1lIGdvbGQgd2VpZ2h0LDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gcGFpZCB2cy48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHJlbWFpbmluZyBpbnN0YWxsbWVudHMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgbWF0dXJpdHkgZGF0ZXMgb24tZGVtYW5kLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJkZy1QSDhvNkd4XCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjIuIFdoYXRzQXBwIEF1dG9tYXRpb24gYW5kIFJlbWluZGVyc1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIlpvbmY4SFVaeHJcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+RGVwbG95aW5nIDwvc3Bhbj48Yj5qZXdlbGxlcnkgV2hhdHNBcHAgcmVtaW5kZXIgc29mdHdhcmU8L2I+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGVuc3VyZWQgY3VzdG9tZXJzIHJlY2VpdmVkIGF1dG9tYXRlZCByZWNlaXB0cyBmb3IgZGlnaXRhbCBwYXltZW50cyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHRpbWVseSBpbnN0YWxsbWVudCByZW1pbmRlcnMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgbWF0dXJpdHkgbm90aWZpY2F0aW9ucyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGxlYWRpbmcgdG8gYW4gODUlIGltcHJvdmVtZW50IGluIHNjaGVtZSByZW5ld2Fscy48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiOVo1ci1Oa2RJNlwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcImhlYWRlclwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCIzLiBJbnRlZ3JhdGVkIEpld2VsbGVyeSBDUk0gJmFtcDsgTWFuYWdlbWVudFwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImgyUVY5U3k2RlpcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+UGFzc2Jvb2tBcHDigJlzIGludGVncmF0ZWQgPC9zcGFuPjxiPmpld2VsbGVyeSBtYW5hZ2VtZW50IHNvZnR3YXJlPC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBwcm92aWRlZCBhIHNpbmdsZSBkYXNoYm9hcmQgZm9yIGN1c3RvbWVyIHB1cmNoYXNlIGhpc3RvcnkgYW5kIHNjaGVtZSBwcm9ncmVzcy48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IFRoaXMgZGF0YSBnYXZlIHN0b3JlIHN0YWZmIHBlcnNvbmFsaXplZCBpbnNpZ2h0cyB0byB1c2UgZHVyaW5nIHNob3dyb29tIHZpc2l0cy48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiaVgtMnU5UXUwOVwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcImhlYWRlclwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCJSZXN1bHRzOiBUaGUgSW1wYWN0IG9uIEN1c3RvbWVyIEVuZ2FnZW1lbnQgYW5kIEJ1c2luZXNzIEdyb3d0aFwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIlU3emNyLWNCcFFcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+V2l0aGluIGp1c3Qgc2l4IG1vbnRocyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHRoZSBpbXBsZW1lbnRhdGlvbnMgZHJpdmVuIGJ5IFBhc3Nib29rQXBwIGRlbGl2ZXJlZCB0cmFuc2Zvcm1hdGl2ZSBidXNpbmVzcyByZXN1bHRzOjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJxRWoyNEZaQXljXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwibGlzdFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInN0eWxlXCI6IFwidW5vcmRlcmVkXCIsXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgXCI8Yj40MCUgSW5jcmVhc2UgaW4gQ3VzdG9tZXIgRW5nYWdlbWVudDo8L2I+IFRoZSBkaWdpdGFsIHBhc3Nib29rIGFwcCBiZWNhbWUgYSBjcml0aWNhbCwgZGFpbHkgdG91Y2hwb2ludCBmb3IgY3VzdG9tZXJzLlwiLFxyXG4gICAgICAgICAgICBcIjxiPjg1JSBJbXByb3ZlbWVudCBpbiBTY2hlbWUgUmVuZXdhbHM6PC9iPiBBdXRvbWF0ZWQgcmVtaW5kZXJzIGVmZmVjdGl2ZWx5IGVsaW1pbmF0ZWQgbWlzc2VkIGluc3RhbGxtZW50cy5cIixcclxuICAgICAgICAgICAgXCI8Yj4zNSUgQm9vc3QgaW4gUmVwZWF0IFB1cmNoYXNlczo8L2I+IFBlcnNvbmFsaXplZCBDUk0gaW5zaWdodHMgYWxsb3dlZCB0YXJnZXRlZCBvZmZlcnMgdXBvbiBtYXR1cml0eS5cIixcclxuICAgICAgICAgICAgXCI8Yj43MCUgUmVkdWN0aW9uIGluIE9wZXJhdGlvbmFsIFdvcmtsb2FkOjwvYj4gRWxpbWluYXRpbmcgbWFudWFsIHRyYWNraW5nIGZyZWVkIHN0YWZmIGZvciBoaWdoLXZhbHVlIHNhbGVzLCBtaXJyb3JpbmcgTGFndSBCYW5kaHUncyBhZG1pbmlzdHJhdGl2ZSBzYXZpbmdzLlwiXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIms2ckhOeDNEMWpcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiS2V5IFRha2Vhd2F5cyBmb3IgSmV3ZWxsZXJ5IE1lcmNoYW50c1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIk1BSFFmZHZnX3NcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+VGhlIHN1Y2Nlc3NmdWwgPC9zcGFuPjxiPmpld2VsbGVyeSBzb2Z0d2FyZSBzdWNjZXNzIHN0b3J5PC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBvZiByZXRhaWxlcnMgbGlrZSBMYWd1IEJhbmRodSBwcm92ZXMgdGhhdCBtb2Rlcm5pemF0aW9uIGlzIGtleSB0byBzdXN0YWluYWJsZSA8L3NwYW4+PGI+amV3ZWxsZXJ5IGJ1c2luZXNzIGdyb3d0aDwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj46PC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIjM1YTg1UnE0QzNcIixcclxuICAgICAgICBcInR5cGVcIjogXCJsaXN0XCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwic3R5bGVcIjogXCJvcmRlcmVkXCIsXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgXCI8Yj5MZXZlcmFnZSB0aGUgUmlnaHQgVGVjaCBmb3IgWW91ciBTY2FsZTo8L2I+IEFzIGEgPGI+amV3ZWxsZXJ5IENSTSBjYXNlIHN0dWR5PC9iPiBmb3IgbXVsdGktbG9jYXRpb24gYnVzaW5lc3NlcyBzaG93cywgY2VudHJhbGl6ZWQgdmlzaWJpbGl0eSBpcyBlc3NlbnRpYWwgZm9yIG9wZXJhdGlvbmFsIGNvbnRyb2wgYW5kIHBlcnNvbmFsaXplZCBzZXJ2aWNlLlwiLFxyXG4gICAgICAgICAgICBcIjxiPk1lZXQgQ3VzdG9tZXJzIFdoZXJlIFRoZXkgQXJlOjwvYj4gTW9kZXJuIGJ1eWVycyBkZW1hbmQgbW9iaWxlIGFjY2Vzcy4gQSA8Yj5kaWdpdGFsIHBhc3Nib29rIGZvciBqZXdlbGxlcnkgc3RvcmVzPC9iPiB3aXRoIGRpZ2l0YWwgcGF5bWVudCBvcHRpb25zIGlzIGEgYmFzZWxpbmUgZXhwZWN0YXRpb24uXCIsXHJcbiAgICAgICAgICAgIFwiPGI+QXV0b21hdGUgZm9yIEVmZmljaWVuY3k6PC9iPiBJbnRlZ3JhdGluZyA8Yj5qZXdlbGxlcnkgV2hhdHNBcHAgcmVtaW5kZXIgc29mdHdhcmU8L2I+IGNyZWF0ZXMgaGlnaC1pbXBhY3QgY29tbXVuaWNhdGlvbiB3aXRoIG1pbmltYWwgbWFudWFsIGVmZm9ydC5cIlxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJLWlIwcGpQWXpnXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIlJlYWR5IHRvIEVsZXZhdGUgWW91ciBKZXdlbGxlcnkgU3RvcmUncyBFbmdhZ2VtZW50P1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIk4tblFGQlJvVF9cIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+SWYgeW91IGFyZSBsb29raW5nIHRvIHNjYWxlIHlvdXIgamV3ZWxsZXJ5IGJ1c2luZXNzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gZWxpbWluYXRlIG1hbnVhbCBhZG1pbmlzdHJhdGl2ZSBoYXNzbGUgbGlrZSBwaHlzaWNhbCByZWdpc3RlcnMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgaW5jcmVhc2UgY3VzdG9tZXIgbG95YWx0eSw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGl0J3MgdGltZSB0byB1cGdyYWRlIHlvdXIgdGVjaCBzdGFjay48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiSjVxclhkRTNsdlwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5TZWUgaG93IFBhc3Nib29rQXBwIGhlbHBzIGpld2VsbGVyeSBidXNpbmVzc2VzIGF1dG9tYXRlIHNhdmluZ3Mgc2NoZW1lcyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGltcHJvdmUgcmVuZXdhbHMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBpbmNyZWFzZSByZXBlYXQgcHVyY2hhc2VzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYW5kIGJ1aWxkIGxvbmctdGVybSBjdXN0b21lciBsb3lhbHR5Ljwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJyNWtDRk81MDNXXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxiPjxhIGhyZWY9XFxcImh0dHBzOi8vd3d3LnBhc3Nib29rYXBwLmluL2RlbW9cXFwiPkJvb2sgYSBGcmVlIFBhc3Nib29rQXBwIERlbW8gVG9kYXk8L2E+PC9iPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgXCJjcmVhdGVkQnlcIjogXCJSYWpcIixcclxuICAgIFwicG9zdFN1bW1hcnlcIjogXCJEaXNjb3ZlciBob3cgSmV3ZWxsZXJ5IHJldGFpbGVycyBlbGltaW5hdGVkIG1hbnVhbCByZWdpc3RlcnMsIGluY3JlYXNlZCBjdXN0b21lciBlbmdhZ2VtZW50LCBhbmQgc3RyZWFtbGluZWQgc2F2aW5ncyBzY2hlbWVzIHVzaW5nIFBhc3Nib29rQXBwLlwiLFxyXG4gICAgXCJwb3N0VGl0bGVcIjogXCJDYXNlIFN0dWR5OiBIb3cgYSBKZXdlbGxlcnkgUmV0YWlsZXIgSW5jcmVhc2VkICBDdXN0b21lciBFbmdhZ2VtZW50IFVzaW5nIFBhc3Nib29rQXBwXCIsXHJcbiAgICBcIm5ld1Bvc3RUaXRsZVwiOiBcIkNhc2UtU3R1ZHktSG93LWEtSmV3ZWxsZXJ5LVJldGFpbGVyLUluY3JlYXNlZC0tQ3VzdG9tZXItRW5nYWdlbWVudC1Vc2luZy1QYXNzYm9va0FwcFwiLFxyXG4gICAgXCJibG9nTWV0YVwiOiB7XHJcbiAgICAgIFwibWV0YVRpdGxlXCI6IFwiQ2FzZSBTdHVkeTogSG93IGEgSmV3ZWxsZXJ5IFJldGFpbGVyIEluY3JlYXNlZCAgQ3VzdG9tZXIgRW5nYWdlbWVudCBVc2luZyBQYXNzYm9va0FwcFwiLFxyXG4gICAgICBcIm1ldGFEZXNjcmlwdGlvblwiOiB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwiZGVzY3JpcHRpb25cIixcclxuICAgICAgICBcImNvbnRlbnRcIjogXCJEaXNjb3ZlciBob3cgSmV3ZWxsZXJ5IHJldGFpbGVycyBlbGltaW5hdGVkIG1hbnVhbCByZWdpc3RlcnMsIGluY3JlYXNlZCBjdXN0b21lciBlbmdhZ2VtZW50LCBhbmQgc3RyZWFtbGluZWQgc2F2aW5ncyBzY2hlbWVzIHVzaW5nIFBhc3Nib29rQXBwLlwiXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcImNyZWF0ZWRUaW1lU3RhbXBcIjogXCIyMDI2LTA4LTA0VDExOjU4OjM3LjAwMCswMDowMFwiLFxyXG4gICAgXCJwdWJsaXNoZWREYXRlXCI6IG51bGwsXHJcbiAgICBcImJsb2dTY2hlZHVsZWREYXRlXCI6IFwiMjAyNi0wOC0wNFQwMDowMDowMC4wMDArMDA6MDBcIixcclxuICAgIFwiYmxvZ1NjaGVkdWxlVGltZVwiOiBcIjE3OjI5OjI0XCIsXHJcbiAgICBcImtleVdvcmRzXCI6IHtcclxuICAgICAgXCJuYW1lXCI6IFwia2V5d29yZHNcIixcclxuICAgICAgXCJjb250ZW50XCI6IFwiZGlnaXRhbCBwYXNzYm9vayBmb3IgamV3ZWxsZXJ5IHN0b3JlcyxKZXdlbGxlcnkgY3VzdG9tZXIgZW5nYWdlbWVudCxqZXdlbGxlcnkgY3VzdG9tZXIgZW5nYWdlbWVudCBzb2Z0d2FyZSxqZXdlbGxlcnkgQ1JNIHNvZnR3YXJlLGpld2VsbGVyeSBjdXN0b21lciBleHBlcmllbmNlXCJcclxuICAgIH0sXHJcbiAgICBcImF1dGhvclwiOiB7XHJcbiAgICAgIFwibmFtZVwiOiBcImF1dGhvclwiLFxyXG4gICAgICBcImNvbnRlbnRcIjogXCJQYXNzYm9va2FwcFwiXHJcbiAgICB9LFxyXG4gICAgXCJibG9nU3RhdHVzXCI6IFwiUFVCTElTSFwiLFxyXG4gICAgXCJibG9nVHlwZVwiOiBcIkJVU0lORVNTXCJcclxuICB9XHJcblxyXG4gIHRvY0l0ZW1zOiBUb2NJdGVtW10gPSBbXTtcclxuICB0b2NPcGVuID0gZmFsc2U7XHJcbiAgYWN0aXZlVG9jSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRpbmdCbG9ja0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyOiBib29sZWFuO1xyXG4gIHByaXZhdGUgdG9jT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogb2JqZWN0XHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmJ1aWxkVGFibGVPZkNvbnRlbnRzKCk7XHJcbiAgICB0aGlzLnJlY29yZFZpc2l0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1sncmVzcG9uc2VEYXRhJ10gJiYgIWNoYW5nZXNbJ3Jlc3BvbnNlRGF0YSddLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLmJ1aWxkVGFibGVPZkNvbnRlbnRzKCk7XHJcbiAgICAgIHRoaXMucmVjb3JkVmlzaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENvdW50cyBvbmUgcHVibGljIHZpZXcgcGVyIGJsb2cgcGVyIGJyb3dzZXIgc2Vzc2lvbiwgcGVyIHRoZSBcIkluY3JlbWVudCBibG9nIHZpc2l0c1wiIHNwZWM6XHJcbiAgLy8gUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlL3tibG9nSWR9LCBmaXJlLWFuZC1mb3JnZXQsIGd1YXJkZWQgc28gcmVmcmVzaC9yZS1yZW5kZXIgZG9lc24ndCBkb3VibGUtY291bnQuXHJcbiAgcHJpdmF0ZSByZWNvcmRWaXNpdCgpIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmxvZ0lkID0gdGhpcy5yZXNwb25zZURhdGE/LmlkO1xyXG4gICAgaWYgKCFibG9nSWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2Vzc2lvbktleSA9IGBibG9nLXZpc2l0LSR7YmxvZ0lkfWA7XHJcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzZXNzaW9uS2V5KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksICcxJyk7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmluY3JlbWVudEJsb2dWaXNpdChibG9nSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHsgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHsgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXR1cFNjcm9sbFNweSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnRvY09ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVyb0ltYWdlQmxvY2tJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGJsb2NrczogQmxvZ0Jsb2NrW10gPSB0aGlzLnJlc3BvbnNlRGF0YT8uYmxvY2tzIHx8IFtdO1xyXG4gICAgcmV0dXJuIGJsb2Nrcy5maW5kKGJsb2NrID0+IGJsb2NrLnR5cGUgPT09ICdpbWFnZScpPy5pZCA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhZ3MoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVzcG9uc2VEYXRhPy5rZXlXb3Jkcz8uY29udGVudDtcclxuICAgIGlmICghY29udGVudCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudFxyXG4gICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAubWFwKCh0YWc6IHN0cmluZykgPT4gdGFnLnRyaW0oKSlcclxuICAgICAgLmZpbHRlcigodGFnOiBzdHJpbmcpID0+IHRhZy5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG4gICAgLy8gdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9CbG9jayhldmVudDogRXZlbnQsIGJsb2NrSWQ6IHN0cmluZykge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgIC5xdWVyeVNlbGVjdG9yKGAjYmxvY2stJHtibG9ja0lkfWApXHJcbiAgICAgID8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xyXG4gICAgdGhpcy50b2NPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkVGFibGVPZkNvbnRlbnRzKCkge1xyXG4gICAgY29uc3QgYmxvY2tzOiBCbG9nQmxvY2tbXSA9IHRoaXMucmVzcG9uc2VEYXRhPy5ibG9ja3MgfHwgW107XHJcbiAgICB0aGlzLmhlYWRpbmdCbG9ja0lkcy5jbGVhcigpO1xyXG4gICAgdGhpcy50b2NJdGVtcyA9IGJsb2Nrc1xyXG4gICAgICAubWFwKGJsb2NrID0+IHRoaXMuZ2V0SGVhZGluZ0NhbmRpZGF0ZShibG9jaykpXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIFRvY0l0ZW0gPT4gISFpdGVtKTtcclxuICAgIHRoaXMudG9jSXRlbXMuZm9yRWFjaChpdGVtID0+IHRoaXMuaGVhZGluZ0Jsb2NrSWRzLmFkZChpdGVtLmlkKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7XHJcbiAgICAgIC8vIFJlLWF0dGFjaCB0aGUgc2Nyb2xsIHNweSBzaW5jZSB0aGUgYW5jaG9ycyBpdCB3YXRjaGVzIGp1c3QgY2hhbmdlZC5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldHVwU2Nyb2xsU3B5KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNUb2NBbmNob3IoYmxvY2tJZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5oZWFkaW5nQmxvY2tJZHMuaGFzKGJsb2NrSWQpO1xyXG4gIH1cclxuXHJcbiAgaGFzVmlzaWJsZVRleHQoaHRtbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdHJpcEh0bWwoaHRtbCkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SGVhZGluZ0NhbmRpZGF0ZShibG9jazogQmxvZ0Jsb2NrKTogVG9jSXRlbSB8IG51bGwge1xyXG4gICAgaWYgKCFibG9jaz8uaWQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJsb2NrLnR5cGUgPT09ICdoZWFkZXInKSB7XHJcbiAgICAgIGNvbnN0IGxldmVsID0gKGJsb2NrLmRhdGE/LlsnbGV2ZWwnXSBhcyBudW1iZXIpIHx8IDI7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnN0cmlwSHRtbChibG9jay5kYXRhPy5bJ3RleHQnXSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xyXG4gICAgICBpZiAobGV2ZWwgPD0gMSB8fCAhdGV4dCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IGlkOiBibG9jay5pZCwgdGV4dCwgbGV2ZWwgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gJ3BhcmFncmFwaCcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Qm9sZFBhcmFncmFwaEhlYWRpbmcoYmxvY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCb2xkUGFyYWdyYXBoSGVhZGluZyhibG9jazogQmxvZ0Jsb2NrKTogVG9jSXRlbSB8IG51bGwge1xyXG4gICAgY29uc3QgaHRtbCA9IChibG9jay5kYXRhPy5bJ3RleHQnXSBhcyBzdHJpbmcpIHx8ICcnO1xyXG4gICAgaWYgKCFodG1sLmluY2x1ZGVzKCc8c3BhbicpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNwYW5SZWdleCA9IC88c3BhbihbXj5dKik+KFtcXHNcXFNdKj8pPFxcL3NwYW4+L2c7XHJcbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XHJcbiAgICBsZXQgYm9sZFRleHQgPSAnJztcclxuICAgIGxldCBub25Cb2xkVGV4dCA9ICcnO1xyXG4gICAgbGV0IG1heEZvbnRTaXplUHQgPSAwO1xyXG5cclxuICAgIHdoaWxlICgobWF0Y2ggPSBzcGFuUmVnZXguZXhlYyhodG1sKSkpIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSBtYXRjaFsxXTtcclxuICAgICAgY29uc3QgaW5uZXJUZXh0ID0gdGhpcy5zdHJpcEh0bWwobWF0Y2hbMl0pO1xyXG4gICAgICBjb25zdCBpc0JvbGQgPSAvZm9udC13ZWlnaHQ6XFxzKihib2xkfFs2LTldMDApL2kudGVzdChzdHlsZSk7XHJcbiAgICAgIGNvbnN0IHNpemVNYXRjaCA9IHN0eWxlLm1hdGNoKC9mb250LXNpemU6XFxzKihbXFxkLl0rKXB0L2kpO1xyXG4gICAgICBpZiAoc2l6ZU1hdGNoKSB7XHJcbiAgICAgICAgbWF4Rm9udFNpemVQdCA9IE1hdGgubWF4KG1heEZvbnRTaXplUHQsIHBhcnNlRmxvYXQoc2l6ZU1hdGNoWzFdKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzQm9sZCkge1xyXG4gICAgICAgIGJvbGRUZXh0ICs9IGlubmVyVGV4dDtcclxuICAgICAgfSBlbHNlIGlmIChpbm5lclRleHQpIHtcclxuICAgICAgICBub25Cb2xkVGV4dCArPSBpbm5lclRleHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0ZXh0ID0gYm9sZFRleHQudHJpbSgpO1xyXG4gICAgLy8gTWl4ZWQgYm9sZC9wbGFpbiB0ZXh0IGlzIGFuIGVtcGhhc2l6ZWQgcGhyYXNlIGluc2lkZSBhIG5vcm1hbCBwYXJhZ3JhcGgsIG5vdCBhIGhlYWRpbmcuXHJcbiAgICBpZiAoIXRleHQgfHwgbm9uQm9sZFRleHQudHJpbSgpIHx8IHRleHQubGVuZ3RoID4gMTIwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy8gVGl0bGUtc2l6ZWQgYm9sZCB0ZXh0ICg+PTE2cHQsIG1hdGNoaW5nIHRoZSBhcnRpY2xlJ3Mgb3duIGhlYWRpbmcpIGlzbid0IGEgVE9DIGVudHJ5LlxyXG4gICAgaWYgKG1heEZvbnRTaXplUHQgPj0gMTYpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgaWQ6IGJsb2NrLmlkLCB0ZXh0LCBsZXZlbDogMiB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdHJpcEh0bWwoaHRtbDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghaHRtbCkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaHRtbFxyXG4gICAgICAucmVwbGFjZSgvPFtePl0qPi9nLCAnJylcclxuICAgICAgLnJlcGxhY2UoLyZuYnNwOy9nLCAnICcpXHJcbiAgICAgIC5yZXBsYWNlKC8mYW1wOy9nLCAnJicpXHJcbiAgICAgIC50cmltKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwU2Nyb2xsU3B5KCkge1xyXG4gICAgaWYgKCF0aGlzLmlzQnJvd3Nlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvY09ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcblxyXG4gICAgY29uc3QgYW5jaG9ycyA9IEFycmF5LmZyb20oXHJcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcclxuICAgICAgICAnLnRvYy1hbmNob3InXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgICBpZiAoIWFuY2hvcnMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRvY09ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxyXG4gICAgICBlbnRyaWVzID0+IHtcclxuICAgICAgICBjb25zdCB2aXNpYmxlID0gZW50cmllcy5maWx0ZXIoZW50cnkgPT4gZW50cnkuaXNJbnRlcnNlY3RpbmcpO1xyXG4gICAgICAgIGlmICh2aXNpYmxlLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVUb2NJZCA9IHZpc2libGVbMF0udGFyZ2V0LmlkLnJlcGxhY2UoJ2Jsb2NrLScsICcnKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgcm9vdE1hcmdpbjogJzBweCAwcHggLTcwJSAwcHgnIH1cclxuICAgICk7XHJcbiAgICBhbmNob3JzLmZvckVhY2goYW5jaG9yID0+IHRoaXMudG9jT2JzZXJ2ZXI/Lm9ic2VydmUoYW5jaG9yKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGNsYXNzPVwibWFpbi1zZWN0aW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJibG9nLWNvbnRhaW5lclwiPlxuICAgIDxoMSBjbGFzcz1cImJsb2ctdGl0bGVcIiAqbmdJZj1cInJlc3BvbnNlRGF0YT8ucG9zdFRpdGxlXCI+XG4gICAgICB7eyByZXNwb25zZURhdGEucG9zdFRpdGxlIH19XG4gICAgPC9oMT5cblxuICAgIDxkaXYgY2xhc3M9XCJtZXRhLWJhclwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtbGFiZWxcIj5QdWJsaWNhdGlvbiBEYXRlPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtdmFsdWVcIj57e1xuICAgICAgICAgIHJlc3BvbnNlRGF0YT8ucHVibGlzaGVkRGF0ZSB8fFxuICAgICAgICAgICAgcmVzcG9uc2VEYXRhPy5ibG9nU2NoZWR1bGVkRGF0ZSB8fFxuICAgICAgICAgICAgcmVzcG9uc2VEYXRhPy5jcmVhdGVkVGltZVN0YW1wIHwgZGF0ZTogJ2QgTU1NTSB5J1xuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtbGFiZWxcIj5BdXRob3I8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YS12YWx1ZVwiPnt7XG4gICAgICAgICAgcmVzcG9uc2VEYXRhPy5hdXRob3I/LmNvbnRlbnQgfHwgJ+KAlCdcbiAgICAgICAgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtZXRhLWl0ZW1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRhLWxhYmVsXCI+UmVhZCBUaW1lPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtdmFsdWVcIlxuICAgICAgICAgID57eyByZXNwb25zZURhdGE/LnJlYWRUaW1lIHx8ICfigJQnIH19IG1pbiByZWFkPC9zcGFuXG4gICAgICAgID5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtbGFiZWxcIj5WaWV3czwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRhLXZhbHVlXCI+e3sgcmVzcG9uc2VEYXRhPy50b3RhbFZpc2l0cyB8fCAwIH19Kzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInRhZ3Mtcm93XCIgKm5nSWY9XCJ0YWdzLmxlbmd0aFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ0YWctY2hpcFwiICpuZ0Zvcj1cImxldCB0YWcgb2YgdGFnc1wiPnt7IHRhZyB8IHRpdGxlY2FzZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJibG9nLWxheW91dFwiIFtjbGFzcy53aXRoLXRvY109XCJ0b2NJdGVtcy5sZW5ndGggPiAxXCI+XG4gICAgICA8YXNpZGUgY2xhc3M9XCJ0b2Mtc2lkZWJhclwiICpuZ0lmPVwidG9jSXRlbXMubGVuZ3RoID4gMVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJ0b2MtdG9nZ2xlXCJcbiAgICAgICAgICAoY2xpY2spPVwidG9jT3BlbiA9ICF0b2NPcGVuXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInRvY09wZW5cIj5cbiAgICAgICAgICA8c3Bhbj5UYWJsZSBPZiBDb250ZW50PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9jLXRvZ2dsZS1pY29uXCIgW2NsYXNzLm9wZW5dPVwidG9jT3BlblwiPjwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2MtaGVhZGVyXCI+VGFibGUgT2YgQ29udGVudDwvZGl2PlxuICAgICAgICA8bmF2IGNsYXNzPVwidG9jLWxpc3RcIiBbY2xhc3Mub3Blbl09XCJ0b2NPcGVuXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0b2Mgb2YgdG9jSXRlbXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0b2MtbGlua1wiXG4gICAgICAgICAgICBbY2xhc3MudG9jLXRvcF09XCJ0b2MubGV2ZWwgPD0gMlwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZ0xlZnQucHhdPVwiKHRvYy5sZXZlbCAtIDIpICogMTRcIlxuICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVUb2NJZCA9PT0gdG9jLmlkXCJcbiAgICAgICAgICAgIFtocmVmXT1cIicjYmxvY2stJyArIHRvYy5pZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2Nyb2xsVG9CbG9jaygkZXZlbnQsIHRvYy5pZClcIj5cbiAgICAgICAgICAgIHt7IHRvYy50ZXh0IH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L25hdj5cbiAgICAgIDwvYXNpZGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJibG9nLWRldGFpbHNcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXNwb25zZURhdGE/LmJsb2Nrc1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09ICdoZWFkZXInICYmIGhhc1Zpc2libGVUZXh0KGl0ZW0uZGF0YT8udGV4dClcIlxuICAgICAgICAgICAgW2lkXT1cIidibG9jay0nICsgaXRlbS5pZFwiXG4gICAgICAgICAgICBbY2xhc3MudG9jLWFuY2hvcl09XCJpc1RvY0FuY2hvcihpdGVtLmlkKVwiPlxuICAgICAgICAgICAgPGgxICpuZ0lmPVwiaXRlbS5kYXRhLmxldmVsID09IDFcIiBbaW5uZXJIVE1MXT1cIml0ZW0uZGF0YS50ZXh0XCI+PC9oMT5cbiAgICAgICAgICAgIDxoMiAqbmdJZj1cIml0ZW0uZGF0YS5sZXZlbCA9PSAyXCIgW2lubmVySFRNTF09XCJpdGVtLmRhdGEudGV4dFwiPjwvaDI+XG4gICAgICAgICAgICA8aDMgKm5nSWY9XCJpdGVtLmRhdGEubGV2ZWwgPT0gM1wiIFtpbm5lckhUTUxdPVwiaXRlbS5kYXRhLnRleHRcIj48L2gzPlxuICAgICAgICAgICAgPGg0ICpuZ0lmPVwiaXRlbS5kYXRhLmxldmVsID09IDRcIiBbaW5uZXJIVE1MXT1cIml0ZW0uZGF0YS50ZXh0XCI+PC9oND5cbiAgICAgICAgICAgIDxoNSAqbmdJZj1cIml0ZW0uZGF0YS5sZXZlbCA9PSA1XCIgW2lubmVySFRNTF09XCJpdGVtLmRhdGEudGV4dFwiPjwvaDU+XG4gICAgICAgICAgICA8aDYgKm5nSWY9XCJpdGVtLmRhdGEubGV2ZWwgPT0gNlwiIFtpbm5lckhUTUxdPVwiaXRlbS5kYXRhLnRleHRcIj48L2g2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS50eXBlID09ICdwYXJhZ3JhcGgnICYmIGhhc1Zpc2libGVUZXh0KGl0ZW0uZGF0YT8udGV4dClcIlxuICAgICAgICAgICAgW2lkXT1cIidibG9jay0nICsgaXRlbS5pZFwiXG4gICAgICAgICAgICBbY2xhc3MudG9jLWFuY2hvcl09XCJpc1RvY0FuY2hvcihpdGVtLmlkKVwiPlxuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbm5lci10ZXh0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmhlYWRpbmctcGFyYWdyYXBoXT1cImlzVG9jQW5jaG9yKGl0ZW0uaWQpXCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpdGVtLmRhdGEudGV4dFwiPjwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09ICdsaXN0J1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uZGF0YS5zdHlsZSA9PSAnb3JkZXJlZCdcIj5cbiAgICAgICAgICAgICAgPG9sIGNsYXNzPVwibGlzdC1zdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGxpc3Qgb2YgaXRlbS5kYXRhLml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICA8bGkgW2lubmVySFRNTF09XCJsaXN0XCI+PC9saT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9vbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0uZGF0YS5zdHlsZSA9PSAndW5vcmRlcmVkJ1wiPlxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXN0eWxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGlzdCBvZiBpdGVtLmRhdGEuaXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxsaSBbaW5uZXJIVE1MXT1cImxpc3RcIj48L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAnZGVsaW1pdGVyJ1wiIGNsYXNzPVwiY2UtZGVsaW1pdGVyXCI+PC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2ltYWdlJ1wiXG4gICAgICAgICAgICBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbY2xhc3MuaGVyby1pbWFnZV09XCJpdGVtLmlkID09PSBoZXJvSW1hZ2VCbG9ja0lkXCI+XG4gICAgICAgICAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgW3NyY109XCJpdGVtLmRhdGEuZmlsZS51cmxcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZS1jYXB0aW9uXCIgKm5nSWY9XCJpdGVtLmRhdGE/LmNhcHRpb25cIj57e1xuICAgICAgICAgICAgICBpdGVtLmRhdGEuY2FwdGlvblxuICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PSAndGFibGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8dGFibGVcbiAgICAgICAgICAgICAgICBbY2xhc3MudGFibGUtbm8taGVhZGluZ109XCJpdGVtLmRhdGEud2l0aEhlYWRpbmdzID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgaXRlbS5kYXRhLmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIFtpbm5lckhUTUxdPVwiaXRlbVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPHNpbXBvLXJlY2VudC1ibG9nLXBvc3Qtc2VjdGlvblxuICAgICAgW3BvcHVsYXJdPVwidHJ1ZVwiXG4gICAgICBbYnVzaW5lc3NJZF09XCJyZXNwb25zZURhdGE/LmJ1c2luZXNzSWRcIlxuICAgICAgW2V4Y2x1ZGVCbG9nSWRdPVwicmVzcG9uc2VEYXRhPy5pZFwiXG4gICAgICBbZWRpdF09XCJmYWxzZVwiPlxuICAgIDwvc2ltcG8tcmVjZW50LWJsb2ctcG9zdC1zZWN0aW9uPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
528
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlldy1ibG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NpbXBvLXVpL3NyYy9saWIvc2VjdGlvbnMvdmlldy1ibG9nL3ZpZXctYmxvZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL3NlY3Rpb25zL3ZpZXctYmxvZy92aWV3LWJsb2cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RSxPQUFPLEVBRUwsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBSUwsV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGdFQUFnRSxDQUFDOzs7OztBQXFCaEgsTUFBTSxPQUFPLGlCQUFpQjtJQWdWNUIsWUFDbUIsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsV0FBb0MsRUFDaEMsVUFBa0I7UUFIdEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBalY5QyxpQkFBWSxHQUFRO1lBQzNCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsV0FBVyxFQUFFLFFBQVE7WUFDckIsYUFBYSxFQUFFLHNGQUFzRjtZQUNyRyxrQkFBa0IsRUFBRSwrQkFBK0I7WUFDbkQsVUFBVSxFQUFFLEdBQUc7WUFDZixXQUFXLEVBQUUsR0FBRztZQUNoQixhQUFhLEVBQUUsQ0FBQztZQUNoQixJQUFJLEVBQUUsc0NBQXNDO1lBQzVDLFlBQVksRUFBRSxzQ0FBc0M7WUFDcEQsTUFBTSxFQUFFLENBQUM7WUFDVCxTQUFTLEVBQUUsRUFBRTtZ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Q3hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUM3QyxhQUFhLENBQ2QsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxvQkFBb0IsQ0FDekMsT0FBTyxDQUFDLEVBQUU7WUFDUixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDaEUsQ0FBQztRQUNILENBQUMsRUFDRCxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxDQUNuQyxDQUFDO1FBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQzsrR0FwaUJVLGlCQUFpQixvR0FvVmxCLFdBQVc7bUdBcFZWLGlCQUFpQiwwSUNwQzlCLDgyS0F3SUEscWlKRHhHWSxZQUFZLGdYQUFZLDhCQUE4Qjs7NEZBSXJELGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixDQUFDOzswQkF3VjlELE1BQU07MkJBQUMsV0FBVzt5Q0FsVlosWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRGF0ZVBpcGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBQTEFURk9STV9JRCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWNlbnRCbG9nUG9zdFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9yZWNlbnQtYmxvZy1wb3N0LXNlY3Rpb24vcmVjZW50LWJsb2ctcG9zdC1zZWN0aW9uLmNvbXBvbmVudCc7XHJcblxyXG5pbnRlcmZhY2UgVG9jSXRlbSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0ZXh0OiBzdHJpbmc7XHJcbiAgbGV2ZWw6IG51bWJlcjtcclxufVxyXG5cclxuaW50ZXJmYWNlIEJsb2dCbG9jayB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NpbXBvLXZpZXctYmxvZycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSwgUmVjZW50QmxvZ1Bvc3RTZWN0aW9uQ29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vdmlldy1ibG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdmlldy1ibG9nLmNvbXBvbmVudC5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld0Jsb2dDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIHJlc3BvbnNlRGF0YTogYW55ID0ge1xyXG4gICAgXCJzdWJJbmR1c3RyeUlkXCI6IG51bGwsXHJcbiAgICBcInN1YkluZHVzdHJ5TmFtZVwiOiBcIlwiLFxyXG4gICAgXCJkaXNwbGF5SWRcIjogXCJCRzE3ODRcIixcclxuICAgIFwiYXJ0aWNsZVNsdWdcIjogXCJDYXNlLVN0dWR5LUhvdy1hLUpld2VsbGVyeS1SZXRhaWxlci1JbmNyZWFzZWQtLUN1c3RvbWVyLUVuZ2FnZW1lbnQtVXNpbmctUGFzc2Jvb2tBcHBcIixcclxuICAgIFwidXBkYXRlZFRpbWVTdGFtcFwiOiBcIjIwMjYtMDgtMDRUMTE6NTk6MjQuMDAwKzAwOjAwXCIsXHJcbiAgICBcInJlYWRUaW1lXCI6IFwiM1wiLFxyXG4gICAgXCJ3b3JkQ291bnRcIjogNjM0LFxyXG4gICAgXCJ0b3RhbFZpc2l0c1wiOiAwLFxyXG4gICAgXCJpZFwiOiBcIjFmMThmZmJkLTNmOTgtNjVjMy1hMzc3LTlkMjlhNzgxYjk3OFwiLFxyXG4gICAgXCJidXNpbmVzc0lkXCI6IFwiMWYxOTU2N2EtY2UyNi02NzkwLThhMTQtYzc4NmZjMDg0YTgyXCIsXHJcbiAgICBcInRpbWVcIjogMCxcclxuICAgIFwidmVyc2lvblwiOiBcIlwiLFxyXG4gICAgXCJibG9ja3NcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcInUyelI0UTdBVXlcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiQ2FzZSBTdHVkeTogSG93IGEgSmV3ZWxsZXJ5IFJldGFpbGVyIEluY3JlYXNlZCBDdXN0b21lciBFbmdhZ2VtZW50IGJ5IDQwJSBVc2luZyBQYXNzYm9va0FwcFwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAxXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIjBVSjFXcWRWZm5cIixcclxuICAgICAgICBcInR5cGVcIjogXCJpbWFnZVwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcImNhcHRpb25cIjogXCJcIixcclxuICAgICAgICAgIFwid2l0aEJvcmRlclwiOiBmYWxzZSxcclxuICAgICAgICAgIFwid2l0aEJhY2tncm91bmRcIjogZmFsc2UsXHJcbiAgICAgICAgICBcInN0cmV0Y2hlZFwiOiBmYWxzZSxcclxuICAgICAgICAgIFwiZmlsZVwiOiB7XHJcbiAgICAgICAgICAgIFwidXJsXCI6IFwiaHR0cHM6Ly9wcm9kLXNpbXBvLnMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbS9pbWFnZXMvMTY5NzUyYzE3ODU4NDQzNTA0NzNDaGF0R1BUJTIwSW1hZ2UlMjBBdWclMjA0JTJDJTIwMjAyNiUyQyUyMDA1XzIyXzE4JTIwUE0ucG5nXCIsXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNTAwcHhcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJZSE96bWk1WGc3XCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxzcGFuIGNsYXNzPVxcXCJcXFwiPkluIHRvZGF54oCZcyBmYXN0LXBhY2VkIHJldGFpbCBtYXJrZXQsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBidWlsZGluZyBsb25nLXRlcm0gY3VzdG9tZXIgbG95YWx0eSBhbmQgbWFpbnRhaW5pbmcgYWN0aXZlIGVuZ2FnZW1lbnQgaXMgYSBtYWpvciBodXJkbGUgZm9yIHRyYWRpdGlvbmFsIGpld2VsZXJzLjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gV2hpbGUgZ29sZCBhbmQgc2lsdmVyIHNhdmluZyBzY2hlbWVzIChsaWtlIDEwKzEgbW9udGhseSBkZXBvc2l0IHBsYW5zKSBoYXZlIGxvbmcgYmVlbiB0aGUgYmFja2JvbmUgb2YgY3VzdG9tZXIgYWNxdWlzaXRpb24sPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBtYW5hZ2luZyB0aGVtIHRocm91Z2ggdHJhZGl0aW9uYWwgcGFwZXIgcGFzc2Jvb2tzIG9mdGVuIGxlYWRzIHRvIGxvdyBlbmdhZ2VtZW50LDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gbWlzc2VkIHBheW1lbnRzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gbG9zdCBwaHlzaWNhbCBib29rcyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGFuZCB1bHRpbWF0ZSBkcm9wLW9mZnMuPC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIm1vdUVicmZ4N3lcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+Rm9yIG11bHRpLWxvY2F0aW9uIHJldGFpbGVycyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHRoZXNlIGNoYWxsZW5nZXMgYXJlIGFtcGxpZmllZC48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IFBoeXNpY2FsIHJlZ2lzdGVycyBhbmQgbWFudWFsIGZvbGxvdy11cHMgYXQgZWFjaCBzdG9yZSBtYWtlIGNyZWF0aW5nIGEgdW5pZmllZCB2aWV3IG9mIHRoZSBjdXN0b21lciBsZXQgYWxvbmUgdGhlIGJ1c2luZXNzIHZpcnR1YWxseSBpbXBvc3NpYmxlLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJNN1luODZJZ2pSXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxzcGFuIGNsYXNzPVxcXCJcXFwiPlRoaXMgPC9zcGFuPjxiPmpld2VsbGVyeSBjdXN0b21lciBlbmdhZ2VtZW50IGNhc2Ugc3R1ZHk8L2I+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGRlbW9uc3RyYXRlcyBob3cgYSBwcm9taW5lbnQgcmV0YWlsIGpld2VsZXIgbGV2ZXJhZ2VkIDwvc3Bhbj48Yj5QYXNzYm9va0FwcCZuYnNwOzwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj5hIG1vZGVybiA8L3NwYW4+PGI+ZGlnaXRhbCBwYXNzYm9vayBmb3IgamV3ZWxsZXJ5IHN0b3JlczwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4mbmJzcDt0byBvdmVyaGF1bCB0aGVpciBvcGVyYXRpb25zLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYXV0b21hdGUgY3VzdG9tZXIgY29tbXVuaWNhdGlvbiB2aWEgV2hhdHNBcHAsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgZHJpdmUgc2lnbmlmaWNhbnQgYnVzaW5lc3MgZ3Jvd3RoLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCItdzVXc241NG1aXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIkZlYXR1cmVkIFN1Y2Nlc3MgU3Rvcnk6IEhvdyBQYXNzYm9va0FwcCBUb29rIExhZ3UgQmFuZGh1IEpld2VsbGVycyBmcm9tIFJlZ2lzdGVycyB0byBSZWFsLVRpbWVcIixcclxuICAgICAgICAgIFwibGV2ZWxcIjogMlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJ1ZFVFVFB6OXNOXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2VcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJjYXB0aW9uXCI6IFwiXCIsXHJcbiAgICAgICAgICBcIndpdGhCb3JkZXJcIjogZmFsc2UsXHJcbiAgICAgICAgICBcIndpdGhCYWNrZ3JvdW5kXCI6IGZhbHNlLFxyXG4gICAgICAgICAgXCJzdHJldGNoZWRcIjogZmFsc2UsXHJcbiAgICAgICAgICBcImZpbGVcIjoge1xyXG4gICAgICAgICAgICBcInVybFwiOiBcImh0dHBzOi8vcHJvZC1zaW1wby5zMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20vaW1hZ2VzLzc2NzA0NGMxNzg1ODQzODQ4MjIwU2xpZGUlMjAxNl85JTIwLSUyMDElMjAlMjg0JTI5LnBuZ1wiLFxyXG4gICAgICAgICAgICBcImhlaWdodFwiOiBcIjUwMHB4XCJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiUEpWVUFocUw1NlwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5MYWd1IEJhbmRodSBKZXdlbGxlcnMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhIGxlZ2FjeSBicmFuZCBzaW5jZSAxOTM2IHdpdGggbXVsdGlwbGUgc3RvcmUgbG9jYXRpb25zLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gZmFjZWQgYSBjcml0aWNhbCBvcGVyYXRpb25hbCBib3R0bGVuZWNrLjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gTWFuYWdpbmcgamV3ZWxsZXJ5IHNhdmluZyBzY2hlbWVzIGFjcm9zcyBudW1lcm91cyBicmFuY2hlcyB1c2luZyBwaHlzaWNhbCByZWdpc3RlcnMgbWVhbnQgcGF5bWVudHMgd2VyZSBkaWZmaWN1bHQgdG8gdHJhY2sgY2VudHJhbGx5LDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gZm9sbG93LXVwcyB3ZXJlIGRvbmUgbWFudWFsbHksPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgYSBzaW5nbGUsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiB1bmlmaWVkIHZpZXcgb2YgdGhlIGJ1c2luZXNzIHdhcyBtaXNzaW5nLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJoenpGZHZTazZmXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxzcGFuIGNsYXNzPVxcXCJcXFwiPlRoZXkgaW1wbGVtZW50ZWQgUGFzc2Jvb2tBcHAgYXMgdGhlaXIgZGVkaWNhdGVkIDwvc3Bhbj48Yj5qZXdlbGxlcnkgY3VzdG9tZXIgcmV0ZW50aW9uIHNvZnR3YXJlPC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiB0byByZXBsYWNlIHRoZWlyIGVudGlyZSBwYXBlci1iYXNlZCBzeXN0ZW0gd2l0aCBvbmUgZGlnaXRhbCB3b3JrZmxvdyB3aXRob3V0IGRpc3J1cHRpbmcgZXhpc3Rpbmcgb3BlcmF0aW9ucy48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiNGZwQ21xNGEwS1wiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5UaGlzIDwvc3Bhbj48Yj5qZXdlbGxlcnkgY3VzdG9tZXIgZW5nYWdlbWVudCBjYXNlIHN0dWR5PC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBoaWdobGlnaHRzIHRoZSBzcGVjaWZpYyBvdXRjb21lcyBhY2hpZXZlZCBieSBMYWd1IEJhbmRodSB3aXRoIHRoZSBwbGF0Zm9ybTo8L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwid0IzX2E1eFJRLVwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcImxpc3RcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJzdHlsZVwiOiBcInVub3JkZXJlZFwiLFxyXG4gICAgICAgICAgXCJpdGVtc1wiOiBbXHJcbiAgICAgICAgICAgIFwiPGI+Q3VzdG9tZXIgQ29udmVuaWVuY2UgdmlhIERpZ2l0YWwgUGF5bWVudHM6PC9iPiBBIGtleSBmZWF0dXJlIHdhcyBlbmFibGluZyBjdXN0b21lcnMgdG8gcGF5IGZvciB0aGVpciBtb250aGx5IHNjaGVtZXMgZGlnaXRhbGx5LCBjb21wbGV0ZWx5IGVsaW1pbmF0aW5nIHRoZSBuZWVkIGZvciBhIHN0b3JlIHZpc2l0LlwiLFxyXG4gICAgICAgICAgICBcIjxiPkNlbnRyYWxpemVkIE11bHRpLUxvY2F0aW9uIFZpZXc6PC9iPiBNYW5hZ2VtZW50IG5vdyBoYXMgYSByZWFsLXRpbWUsIGNlbnRyYWxpemVkIHNjaGVtZSB2aWV3IGFjcm9zcyBhbGwgc3RvcmUgbG9jYXRpb25zLCBhIGNydWNpYWwgZWxlbWVudCBvZiB0aGVpciA8Yj5kaWdpdGFsIHRyYW5zZm9ybWF0aW9uIGluIGpld2VsbGVyeSByZXRhaWw8L2I+LlwiLFxyXG4gICAgICAgICAgICBcIjxiPlN0cmVhbWxpbmVkIE9wZXJhdGlvbnM6PC9iPiBNYW51YWwgdHJhY2tpbmcgYW5kIGV4Y2Vzc2l2ZSBwYXBlcndvcmsgaGF2ZSBiZWVuIG5lYXJseSBlbGltaW5hdGVkLCBvcHRpbWl6aW5nIHN0YWZmIHRpbWUgZm9yIHNhbGVzLlwiXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImlPV2hIeHJVR3hcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+UmVmbGVjdGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBNci48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IFBhcmFnIExhZ3UsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBEaXJlY3RvciBvZiBMYWd1IEJhbmRodSw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IG5vdGVkOjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCIwNm1MVUZleGRLXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxpPuKAnEFmdGVyIG1vcmUgdGhhbiB0d28geWVhcnMgd2l0aCBQYXNzYm9va0FQUCwgSSBjYW4gY29uZmlkZW50bHkgc2F5IGl04oCZcyBiZWVuIGFuIG91dHN0YW5kaW5nIGV4cGVyaWVuY2UuIFRoZWlyIHN1cHBvcnQgdGVhbSBpcyByZXNwb25zaXZlLCBrbm93bGVkZ2VhYmxlLCBhbmQgdHJ1bHkgY29tbWl0dGVkIHRvIG91ciBncm93dGguIEFueSBqZXdlbGVyIGxvb2tpbmcgdG8gc3RyZWFtbGluZSB0aGVpciBvcGVyYXRpb25zIHdvdWxkIGJlIHdpc2UgdG8gY29uc2lkZXIgUGFzc2Jvb2tBUFAu4oCdPC9pPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIjFoVnh2WVUtb0VcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiVGhlIENoYWxsZW5nZTogRnJpY3Rpb24gaW4gVHJhZGl0aW9uYWwgSmV3ZWxsZXJ5IFNhdmluZ3MgU2NoZW1lc1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImRtZkVKZ294Q1pcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+TGFndSBCYW5kaHUncyBleHBlcmllbmNlIHBlcmZlY3RseSBtaXJyb3JzIHRoZSBsYXJnZXIgb3BlcmF0aW9uYWwgY2hhbGxlbmdlIGZhY2VkIGJ5IHRoZSBpbmR1c3RyeS48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IEJlZm9yZSBwYXJ0bmVyaW5nIHdpdGggUGFzc2Jvb2tBcHAsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiB0cmFkaXRpb25hbCBtZXRob2RzIGNyZWF0ZWQgYSBwb29yIDwvc3Bhbj48Yj5qZXdlbGxlcnkgY3VzdG9tZXIgZXhwZXJpZW5jZTwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj46PC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImFwZ1ViS1BPT3dcIixcclxuICAgICAgICBcInR5cGVcIjogXCJsaXN0XCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwic3R5bGVcIjogXCJ1bm9yZGVyZWRcIixcclxuICAgICAgICAgIFwiaXRlbXNcIjogW1xyXG4gICAgICAgICAgICBcIjxiPkhpZ2ggRHJvcC1vZmYgUmF0ZXM6PC9iPiBDdXN0b21lcnMgZnJlcXVlbnRseSBmb3Jnb3QgbW9udGhseSBpbnN0YWxsbWVudHMsIGxlYWRpbmcgdG8gbGFwc2VkIGFjY291bnRzLlwiLFxyXG4gICAgICAgICAgICBcIjxiPkxhY2sgb2YgVmlzaWJpbGl0eTo8L2I+IEN1c3RvbWVycyBjb3VsZG7igJl0IHRyYWNrIHRoZWlyIGFjY3VtdWxhdGVkIGJhbGFuY2Ugb3IgZ29sZCB3ZWlnaHQgaW4gcmVhbC10aW1lLCBkZWNyZWFzaW5nIHRoZWlyIGVtb3Rpb25hbCBpbnZlc3RtZW50IGluIHRoZSBzY2hlbWUuXCIsXHJcbiAgICAgICAgICAgIFwiPGI+TWFudWFsIEFkbWluaXN0cmF0aXZlIEJ1cmRlbjo8L2I+IFN0YWZmIHNwZW50IGNvdW50bGVzcyBob3VycyBhbnN3ZXJpbmcgYmFsYW5jZSBpbnF1aXJpZXMsIGlzc3VpbmcgcmVjZWlwdHMsIGFuZCBtYWtpbmcgbWFudWFsIHJlbWluZGVyIGNhbGxzLlwiLFxyXG4gICAgICAgICAgICBcIjxiPldlYWsgUG9zdC1NYXR1cml0eSBFbmdhZ2VtZW50OjwvYj4gT25jZSBhIHNhdmluZ3Mgc2NoZW1lIG1hdHVyZWQsIHJlZGVlbWluZyB0aGUgZmluYWwgcHJvZHVjdCBmZWx0IHRyYW5zYWN0aW9uYWwgcmF0aGVyIHRoYW4gcmV3YXJkaW5nLCBsZWFkaW5nIHRvIGxvdyByZXBlYXQgZW5nYWdlbWVudC5cIlxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCIxT3hxNlQwVGhkXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIlRoZSBTb2x1dGlvbjogRGlnaXRhbCBUcmFuc2Zvcm1hdGlvbiB3aXRoIFBhc3Nib29rQXBwXCIsXHJcbiAgICAgICAgICBcImxldmVsXCI6IDJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiY0NwclVjOVA3OFwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5UaGUgaW1wbGVtZW50YXRpb24gYXQgTGFndSBCYW5kaHUgbGV2ZXJhZ2VkIFBhc3Nib29rQXBw4oCZcyBjb21wbGV0ZSA8L3NwYW4+PGI+amV3ZWxsZXJ5IENSTSBzb2Z0d2FyZTwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYW5kIDwvc3Bhbj48Yj5qZXdlbGxlcnkgbG95YWx0eSBzb2Z0d2FyZTwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gY2FwYWJpbGl0aWVzIHRvIG1vZGVybml6ZSBvcGVyYXRpb25zLjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gQnkgaW50ZWdyYXRpbmcgdGhlc2Ugc3BlY2lmaWMgdGVjaG5vbG9naWVzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gdGhlIHJldGFpbGVyIHdhcyBhYmxlIHRvIGFjaGlldmUgc2lnbmlmaWNhbnQgZ2FpbnM6PC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImJucTJjNFhNMmhcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiMS4gRGlnaXRhbCBQYXNzYm9vayBJbXBsZW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcInZKc0lXNzUzZTJcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+UmVwbGFjaW5nIHBoeXNpY2FsIGJvb2tsZXRzIHdpdGggYSBjZW50cmFsaXplZCA8L3NwYW4+PGI+ZGlnaXRhbCBwYXNzYm9vayBmb3IgamV3ZWxsZXJ5IHN0b3JlczwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYWxsb3dlZCBjdXN0b21lcnMgdG8gdmlldyB0aGVpciB0b3RhbCBiYWxhbmNlLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gcmVhbC10aW1lIGdvbGQgd2VpZ2h0LDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gcGFpZCB2cy48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHJlbWFpbmluZyBpbnN0YWxsbWVudHMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgbWF0dXJpdHkgZGF0ZXMgb24tZGVtYW5kLjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJkZy1QSDhvNkd4XCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjIuIFdoYXRzQXBwIEF1dG9tYXRpb24gYW5kIFJlbWluZGVyc1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIlpvbmY4SFVaeHJcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+RGVwbG95aW5nIDwvc3Bhbj48Yj5qZXdlbGxlcnkgV2hhdHNBcHAgcmVtaW5kZXIgc29mdHdhcmU8L2I+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGVuc3VyZWQgY3VzdG9tZXJzIHJlY2VpdmVkIGF1dG9tYXRlZCByZWNlaXB0cyBmb3IgZGlnaXRhbCBwYXltZW50cyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHRpbWVseSBpbnN0YWxsbWVudCByZW1pbmRlcnMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgbWF0dXJpdHkgbm90aWZpY2F0aW9ucyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGxlYWRpbmcgdG8gYW4gODUlIGltcHJvdmVtZW50IGluIHNjaGVtZSByZW5ld2Fscy48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiOVo1ci1Oa2RJNlwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcImhlYWRlclwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCIzLiBJbnRlZ3JhdGVkIEpld2VsbGVyeSBDUk0gJmFtcDsgTWFuYWdlbWVudFwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAzXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcImgyUVY5U3k2RlpcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+UGFzc2Jvb2tBcHDigJlzIGludGVncmF0ZWQgPC9zcGFuPjxiPmpld2VsbGVyeSBtYW5hZ2VtZW50IHNvZnR3YXJlPC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBwcm92aWRlZCBhIHNpbmdsZSBkYXNoYm9hcmQgZm9yIGN1c3RvbWVyIHB1cmNoYXNlIGhpc3RvcnkgYW5kIHNjaGVtZSBwcm9ncmVzcy48L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IFRoaXMgZGF0YSBnYXZlIHN0b3JlIHN0YWZmIHBlcnNvbmFsaXplZCBpbnNpZ2h0cyB0byB1c2UgZHVyaW5nIHNob3dyb29tIHZpc2l0cy48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiaVgtMnU5UXUwOVwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcImhlYWRlclwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCJSZXN1bHRzOiBUaGUgSW1wYWN0IG9uIEN1c3RvbWVyIEVuZ2FnZW1lbnQgYW5kIEJ1c2luZXNzIEdyb3d0aFwiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIlU3emNyLWNCcFFcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+V2l0aGluIGp1c3Qgc2l4IG1vbnRocyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IHRoZSBpbXBsZW1lbnRhdGlvbnMgZHJpdmVuIGJ5IFBhc3Nib29rQXBwIGRlbGl2ZXJlZCB0cmFuc2Zvcm1hdGl2ZSBidXNpbmVzcyByZXN1bHRzOjwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJxRWoyNEZaQXljXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwibGlzdFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInN0eWxlXCI6IFwidW5vcmRlcmVkXCIsXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgXCI8Yj40MCUgSW5jcmVhc2UgaW4gQ3VzdG9tZXIgRW5nYWdlbWVudDo8L2I+IFRoZSBkaWdpdGFsIHBhc3Nib29rIGFwcCBiZWNhbWUgYSBjcml0aWNhbCwgZGFpbHkgdG91Y2hwb2ludCBmb3IgY3VzdG9tZXJzLlwiLFxyXG4gICAgICAgICAgICBcIjxiPjg1JSBJbXByb3ZlbWVudCBpbiBTY2hlbWUgUmVuZXdhbHM6PC9iPiBBdXRvbWF0ZWQgcmVtaW5kZXJzIGVmZmVjdGl2ZWx5IGVsaW1pbmF0ZWQgbWlzc2VkIGluc3RhbGxtZW50cy5cIixcclxuICAgICAgICAgICAgXCI8Yj4zNSUgQm9vc3QgaW4gUmVwZWF0IFB1cmNoYXNlczo8L2I+IFBlcnNvbmFsaXplZCBDUk0gaW5zaWdodHMgYWxsb3dlZCB0YXJnZXRlZCBvZmZlcnMgdXBvbiBtYXR1cml0eS5cIixcclxuICAgICAgICAgICAgXCI8Yj43MCUgUmVkdWN0aW9uIGluIE9wZXJhdGlvbmFsIFdvcmtsb2FkOjwvYj4gRWxpbWluYXRpbmcgbWFudWFsIHRyYWNraW5nIGZyZWVkIHN0YWZmIGZvciBoaWdoLXZhbHVlIHNhbGVzLCBtaXJyb3JpbmcgTGFndSBCYW5kaHUncyBhZG1pbmlzdHJhdGl2ZSBzYXZpbmdzLlwiXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIms2ckhOeDNEMWpcIixcclxuICAgICAgICBcInR5cGVcIjogXCJoZWFkZXJcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiS2V5IFRha2Vhd2F5cyBmb3IgSmV3ZWxsZXJ5IE1lcmNoYW50c1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIk1BSFFmZHZnX3NcIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+VGhlIHN1Y2Nlc3NmdWwgPC9zcGFuPjxiPmpld2VsbGVyeSBzb2Z0d2FyZSBzdWNjZXNzIHN0b3J5PC9iPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBvZiByZXRhaWxlcnMgbGlrZSBMYWd1IEJhbmRodSBwcm92ZXMgdGhhdCBtb2Rlcm5pemF0aW9uIGlzIGtleSB0byBzdXN0YWluYWJsZSA8L3NwYW4+PGI+amV3ZWxsZXJ5IGJ1c2luZXNzIGdyb3d0aDwvYj48c3BhbiBjbGFzcz1cXFwiXFxcIj46PC9zcGFuPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIjM1YTg1UnE0QzNcIixcclxuICAgICAgICBcInR5cGVcIjogXCJsaXN0XCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwic3R5bGVcIjogXCJvcmRlcmVkXCIsXHJcbiAgICAgICAgICBcIml0ZW1zXCI6IFtcclxuICAgICAgICAgICAgXCI8Yj5MZXZlcmFnZSB0aGUgUmlnaHQgVGVjaCBmb3IgWW91ciBTY2FsZTo8L2I+IEFzIGEgPGI+amV3ZWxsZXJ5IENSTSBjYXNlIHN0dWR5PC9iPiBmb3IgbXVsdGktbG9jYXRpb24gYnVzaW5lc3NlcyBzaG93cywgY2VudHJhbGl6ZWQgdmlzaWJpbGl0eSBpcyBlc3NlbnRpYWwgZm9yIG9wZXJhdGlvbmFsIGNvbnRyb2wgYW5kIHBlcnNvbmFsaXplZCBzZXJ2aWNlLlwiLFxyXG4gICAgICAgICAgICBcIjxiPk1lZXQgQ3VzdG9tZXJzIFdoZXJlIFRoZXkgQXJlOjwvYj4gTW9kZXJuIGJ1eWVycyBkZW1hbmQgbW9iaWxlIGFjY2Vzcy4gQSA8Yj5kaWdpdGFsIHBhc3Nib29rIGZvciBqZXdlbGxlcnkgc3RvcmVzPC9iPiB3aXRoIGRpZ2l0YWwgcGF5bWVudCBvcHRpb25zIGlzIGEgYmFzZWxpbmUgZXhwZWN0YXRpb24uXCIsXHJcbiAgICAgICAgICAgIFwiPGI+QXV0b21hdGUgZm9yIEVmZmljaWVuY3k6PC9iPiBJbnRlZ3JhdGluZyA8Yj5qZXdlbGxlcnkgV2hhdHNBcHAgcmVtaW5kZXIgc29mdHdhcmU8L2I+IGNyZWF0ZXMgaGlnaC1pbXBhY3QgY29tbXVuaWNhdGlvbiB3aXRoIG1pbmltYWwgbWFudWFsIGVmZm9ydC5cIlxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJLWlIwcGpQWXpnXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwiaGVhZGVyXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIlJlYWR5IHRvIEVsZXZhdGUgWW91ciBKZXdlbGxlcnkgU3RvcmUncyBFbmdhZ2VtZW50P1wiLFxyXG4gICAgICAgICAgXCJsZXZlbFwiOiAyXHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJpZFwiOiBcIk4tblFGQlJvVF9cIixcclxuICAgICAgICBcInR5cGVcIjogXCJwYXJhZ3JhcGhcIixcclxuICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgXCJ0ZXh0XCI6IFwiPHNwYW4gY2xhc3M9XFxcIlxcXCI+SWYgeW91IGFyZSBsb29raW5nIHRvIHNjYWxlIHlvdXIgamV3ZWxsZXJ5IGJ1c2luZXNzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gZWxpbWluYXRlIG1hbnVhbCBhZG1pbmlzdHJhdGl2ZSBoYXNzbGUgbGlrZSBwaHlzaWNhbCByZWdpc3RlcnMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBhbmQgaW5jcmVhc2UgY3VzdG9tZXIgbG95YWx0eSw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGl0J3MgdGltZSB0byB1cGdyYWRlIHlvdXIgdGVjaCBzdGFjay48L3NwYW4+XCJcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcImlkXCI6IFwiSjVxclhkRTNsdlwiLFxyXG4gICAgICAgIFwidHlwZVwiOiBcInBhcmFncmFwaFwiLFxyXG4gICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICBcInRleHRcIjogXCI8c3BhbiBjbGFzcz1cXFwiXFxcIj5TZWUgaG93IFBhc3Nib29rQXBwIGhlbHBzIGpld2VsbGVyeSBidXNpbmVzc2VzIGF1dG9tYXRlIHNhdmluZ3Mgc2NoZW1lcyw8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIlxcXCI+IGltcHJvdmUgcmVuZXdhbHMsPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJcXFwiPiBpbmNyZWFzZSByZXBlYXQgcHVyY2hhc2VzLDwvc3Bhbj48c3BhbiBjbGFzcz1cXFwiXFxcIj4gYW5kIGJ1aWxkIGxvbmctdGVybSBjdXN0b21lciBsb3lhbHR5Ljwvc3Bhbj5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwiaWRcIjogXCJyNWtDRk81MDNXXCIsXHJcbiAgICAgICAgXCJ0eXBlXCI6IFwicGFyYWdyYXBoXCIsXHJcbiAgICAgICAgXCJkYXRhXCI6IHtcclxuICAgICAgICAgIFwidGV4dFwiOiBcIjxiPjxhIGhyZWY9XFxcImh0dHBzOi8vd3d3LnBhc3Nib29rYXBwLmluL2RlbW9cXFwiPkJvb2sgYSBGcmVlIFBhc3Nib29rQXBwIERlbW8gVG9kYXk8L2E+PC9iPlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICBdLFxyXG4gICAgXCJjcmVhdGVkQnlcIjogXCJSYWpcIixcclxuICAgIFwicG9zdFN1bW1hcnlcIjogXCJEaXNjb3ZlciBob3cgSmV3ZWxsZXJ5IHJldGFpbGVycyBlbGltaW5hdGVkIG1hbnVhbCByZWdpc3RlcnMsIGluY3JlYXNlZCBjdXN0b21lciBlbmdhZ2VtZW50LCBhbmQgc3RyZWFtbGluZWQgc2F2aW5ncyBzY2hlbWVzIHVzaW5nIFBhc3Nib29rQXBwLlwiLFxyXG4gICAgXCJwb3N0VGl0bGVcIjogXCJDYXNlIFN0dWR5OiBIb3cgYSBKZXdlbGxlcnkgUmV0YWlsZXIgSW5jcmVhc2VkICBDdXN0b21lciBFbmdhZ2VtZW50IFVzaW5nIFBhc3Nib29rQXBwXCIsXHJcbiAgICBcIm5ld1Bvc3RUaXRsZVwiOiBcIkNhc2UtU3R1ZHktSG93LWEtSmV3ZWxsZXJ5LVJldGFpbGVyLUluY3JlYXNlZC0tQ3VzdG9tZXItRW5nYWdlbWVudC1Vc2luZy1QYXNzYm9va0FwcFwiLFxyXG4gICAgXCJibG9nTWV0YVwiOiB7XHJcbiAgICAgIFwibWV0YVRpdGxlXCI6IFwiQ2FzZSBTdHVkeTogSG93IGEgSmV3ZWxsZXJ5IFJldGFpbGVyIEluY3JlYXNlZCAgQ3VzdG9tZXIgRW5nYWdlbWVudCBVc2luZyBQYXNzYm9va0FwcFwiLFxyXG4gICAgICBcIm1ldGFEZXNjcmlwdGlvblwiOiB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwiZGVzY3JpcHRpb25cIixcclxuICAgICAgICBcImNvbnRlbnRcIjogXCJEaXNjb3ZlciBob3cgSmV3ZWxsZXJ5IHJldGFpbGVycyBlbGltaW5hdGVkIG1hbnVhbCByZWdpc3RlcnMsIGluY3JlYXNlZCBjdXN0b21lciBlbmdhZ2VtZW50LCBhbmQgc3RyZWFtbGluZWQgc2F2aW5ncyBzY2hlbWVzIHVzaW5nIFBhc3Nib29rQXBwLlwiXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBcImNyZWF0ZWRUaW1lU3RhbXBcIjogXCIyMDI2LTA4LTA0VDExOjU4OjM3LjAwMCswMDowMFwiLFxyXG4gICAgXCJwdWJsaXNoZWREYXRlXCI6IG51bGwsXHJcbiAgICBcImJsb2dTY2hlZHVsZWREYXRlXCI6IFwiMjAyNi0wOC0wNFQwMDowMDowMC4wMDArMDA6MDBcIixcclxuICAgIFwiYmxvZ1NjaGVkdWxlVGltZVwiOiBcIjE3OjI5OjI0XCIsXHJcbiAgICBcImtleVdvcmRzXCI6IHtcclxuICAgICAgXCJuYW1lXCI6IFwia2V5d29yZHNcIixcclxuICAgICAgXCJjb250ZW50XCI6IFwiZGlnaXRhbCBwYXNzYm9vayBmb3IgamV3ZWxsZXJ5IHN0b3JlcyxKZXdlbGxlcnkgY3VzdG9tZXIgZW5nYWdlbWVudCxqZXdlbGxlcnkgY3VzdG9tZXIgZW5nYWdlbWVudCBzb2Z0d2FyZSxqZXdlbGxlcnkgQ1JNIHNvZnR3YXJlLGpld2VsbGVyeSBjdXN0b21lciBleHBlcmllbmNlXCJcclxuICAgIH0sXHJcbiAgICBcImF1dGhvclwiOiB7XHJcbiAgICAgIFwibmFtZVwiOiBcImF1dGhvclwiLFxyXG4gICAgICBcImNvbnRlbnRcIjogXCJQYXNzYm9va2FwcFwiXHJcbiAgICB9LFxyXG4gICAgXCJibG9nU3RhdHVzXCI6IFwiUFVCTElTSFwiLFxyXG4gICAgXCJibG9nVHlwZVwiOiBcIkJVU0lORVNTXCJcclxuICB9XHJcblxyXG4gIHRvY0l0ZW1zOiBUb2NJdGVtW10gPSBbXTtcclxuICB0b2NPcGVuID0gZmFsc2U7XHJcbiAgYWN0aXZlVG9jSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRpbmdCbG9ja0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNCcm93c2VyOiBib29sZWFuO1xyXG4gIHByaXZhdGUgdG9jT2JzZXJ2ZXI/OiBJbnRlcnNlY3Rpb25PYnNlcnZlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcGxhdGZvcm1JZDogb2JqZWN0XHJcbiAgKSB7XHJcbiAgICB0aGlzLmlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmJ1aWxkVGFibGVPZkNvbnRlbnRzKCk7XHJcbiAgICB0aGlzLnJlY29yZFZpc2l0KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBpZiAoY2hhbmdlc1sncmVzcG9uc2VEYXRhJ10gJiYgIWNoYW5nZXNbJ3Jlc3BvbnNlRGF0YSddLmlzRmlyc3RDaGFuZ2UoKSkge1xyXG4gICAgICB0aGlzLmJ1aWxkVGFibGVPZkNvbnRlbnRzKCk7XHJcbiAgICAgIHRoaXMucmVjb3JkVmlzaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIENvdW50cyBvbmUgcHVibGljIHZpZXcgcGVyIGJsb2cgcGVyIGJyb3dzZXIgc2Vzc2lvbiwgcGVyIHRoZSBcIkluY3JlbWVudCBibG9nIHZpc2l0c1wiIHNwZWM6XHJcbiAgLy8gUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlL3tibG9nSWR9LCBmaXJlLWFuZC1mb3JnZXQsIGd1YXJkZWQgc28gcmVmcmVzaC9yZS1yZW5kZXIgZG9lc24ndCBkb3VibGUtY291bnQuXHJcbiAgcHJpdmF0ZSByZWNvcmRWaXNpdCgpIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmxvZ0lkID0gdGhpcy5yZXNwb25zZURhdGE/LmlkO1xyXG4gICAgaWYgKCFibG9nSWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2Vzc2lvbktleSA9IGBibG9nLXZpc2l0LSR7YmxvZ0lkfWA7XHJcbiAgICBpZiAoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShzZXNzaW9uS2V5KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksICcxJyk7XHJcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmluY3JlbWVudEJsb2dWaXNpdChibG9nSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHsgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHsgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zZXR1cFNjcm9sbFNweSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnRvY09ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaGVyb0ltYWdlQmxvY2tJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IGJsb2NrczogQmxvZ0Jsb2NrW10gPSB0aGlzLnJlc3BvbnNlRGF0YT8uYmxvY2tzIHx8IFtdO1xyXG4gICAgcmV0dXJuIGJsb2Nrcy5maW5kKGJsb2NrID0+IGJsb2NrLnR5cGUgPT09ICdpbWFnZScpPy5pZCA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhZ3MoKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMucmVzcG9uc2VEYXRhPy5rZXlXb3Jkcz8uY29udGVudDtcclxuICAgIGlmICghY29udGVudCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udGVudFxyXG4gICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAubWFwKCh0YWc6IHN0cmluZykgPT4gdGFnLnRyaW0oKSlcclxuICAgICAgLmZpbHRlcigodGFnOiBzdHJpbmcpID0+IHRhZy5sZW5ndGggPiAwKTtcclxuICB9XHJcblxyXG4gIGVkaXRTZWN0aW9uKCkge1xyXG4gICAgLy8gdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9CbG9jayhldmVudDogRXZlbnQsIGJsb2NrSWQ6IHN0cmluZykge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgIC5xdWVyeVNlbGVjdG9yKGAjYmxvY2stJHtibG9ja0lkfWApXHJcbiAgICAgID8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pO1xyXG4gICAgdGhpcy50b2NPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBSZWFsIHB1Ymxpc2hlZCBibG9ncyBkb24ndCBhbHdheXMgY2FycnkgYSBibG9jayBpZCAob25seSBlZGl0b3ItcHJvZHVjZWQgb25lcyBkbykuIFRoZSBUT0MsXHJcbiAgLy8gc2Nyb2xsIGFuY2hvcnMsIGFuZCBoZXJvLWltYWdlIGRldGVjdGlvbiBhbGwga2V5IG9mZiBibG9jay5pZCwgc28gYmFja2ZpbGwgYSBzdGFibGUgb25lIOKAlFxyXG4gIC8vIHN0YWJsZSBhY3Jvc3MgcmUtcmVuZGVycyBzaW5jZSBpdCdzIGRlcml2ZWQgZnJvbSB0aGUgYmxvY2sncyBmaXhlZCBwb3NpdGlvbiBpbiB0aGUgYXJyYXkuXHJcbiAgcHJpdmF0ZSBlbnN1cmVCbG9ja0lkcyhibG9ja3M6IEJsb2dCbG9ja1tdKSB7XHJcbiAgICBibG9ja3MuZm9yRWFjaCgoYmxvY2ssIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghYmxvY2suaWQpIHtcclxuICAgICAgICBibG9jay5pZCA9IGBibG9jay1pZHgtJHtpbmRleH1gO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRUYWJsZU9mQ29udGVudHMoKSB7XHJcbiAgICBjb25zdCBibG9ja3M6IEJsb2dCbG9ja1tdID0gdGhpcy5yZXNwb25zZURhdGE/LmJsb2NrcyB8fCBbXTtcclxuICAgIHRoaXMuZW5zdXJlQmxvY2tJZHMoYmxvY2tzKTtcclxuICAgIHRoaXMuaGVhZGluZ0Jsb2NrSWRzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnRvY0l0ZW1zID0gYmxvY2tzXHJcbiAgICAgIC5tYXAoYmxvY2sgPT4gdGhpcy5nZXRIZWFkaW5nQ2FuZGlkYXRlKGJsb2NrKSlcclxuICAgICAgLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgVG9jSXRlbSA9PiAhIWl0ZW0pO1xyXG4gICAgdGhpcy50b2NJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gdGhpcy5oZWFkaW5nQmxvY2tJZHMuYWRkKGl0ZW0uaWQpKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc0Jyb3dzZXIpIHtcclxuICAgICAgLy8gUmUtYXR0YWNoIHRoZSBzY3JvbGwgc3B5IHNpbmNlIHRoZSBhbmNob3JzIGl0IHdhdGNoZXMganVzdCBjaGFuZ2VkLlxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0dXBTY3JvbGxTcHkoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc1RvY0FuY2hvcihibG9ja0lkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRpbmdCbG9ja0lkcy5oYXMoYmxvY2tJZCk7XHJcbiAgfVxyXG5cclxuICBoYXNWaXNpYmxlVGV4dChodG1sOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnN0cmlwSHRtbChodG1sKS5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRIZWFkaW5nQ2FuZGlkYXRlKGJsb2NrOiBCbG9nQmxvY2spOiBUb2NJdGVtIHwgbnVsbCB7XHJcbiAgICBpZiAoIWJsb2NrPy5pZCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYmxvY2sudHlwZSA9PT0gJ2hlYWRlcicpIHtcclxuICAgICAgY29uc3QgbGV2ZWwgPSAoYmxvY2suZGF0YT8uWydsZXZlbCddIGFzIG51bWJlcikgfHwgMjtcclxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuc3RyaXBIdG1sKGJsb2NrLmRhdGE/LlsndGV4dCddIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XHJcbiAgICAgIGlmIChsZXZlbCA8PSAxIHx8ICF0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHsgaWQ6IGJsb2NrLmlkLCB0ZXh0LCBsZXZlbCB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChibG9jay50eXBlID09PSAncGFyYWdyYXBoJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRCb2xkUGFyYWdyYXBoSGVhZGluZyhibG9jayk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJvbGRQYXJhZ3JhcGhIZWFkaW5nKGJsb2NrOiBCbG9nQmxvY2spOiBUb2NJdGVtIHwgbnVsbCB7XHJcbiAgICBjb25zdCBodG1sID0gKGJsb2NrLmRhdGE/LlsndGV4dCddIGFzIHN0cmluZykgfHwgJyc7XHJcbiAgICBpZiAoIWh0bWwuaW5jbHVkZXMoJzxzcGFuJykpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3BhblJlZ2V4ID0gLzxzcGFuKFtePl0qKT4oW1xcc1xcU10qPyk8XFwvc3Bhbj4vZztcclxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcclxuICAgIGxldCBib2xkVGV4dCA9ICcnO1xyXG4gICAgbGV0IG5vbkJvbGRUZXh0ID0gJyc7XHJcbiAgICBsZXQgbWF4Rm9udFNpemVQdCA9IDA7XHJcblxyXG4gICAgd2hpbGUgKChtYXRjaCA9IHNwYW5SZWdleC5leGVjKGh0bWwpKSkge1xyXG4gICAgICBjb25zdCBzdHlsZSA9IG1hdGNoWzFdO1xyXG4gICAgICBjb25zdCBpbm5lclRleHQgPSB0aGlzLnN0cmlwSHRtbChtYXRjaFsyXSk7XHJcbiAgICAgIGNvbnN0IGlzQm9sZCA9IC9mb250LXdlaWdodDpcXHMqKGJvbGR8WzYtOV0wMCkvaS50ZXN0KHN0eWxlKTtcclxuICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gc3R5bGUubWF0Y2goL2ZvbnQtc2l6ZTpcXHMqKFtcXGQuXSspcHQvaSk7XHJcbiAgICAgIGlmIChzaXplTWF0Y2gpIHtcclxuICAgICAgICBtYXhGb250U2l6ZVB0ID0gTWF0aC5tYXgobWF4Rm9udFNpemVQdCwgcGFyc2VGbG9hdChzaXplTWF0Y2hbMV0pKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNCb2xkKSB7XHJcbiAgICAgICAgYm9sZFRleHQgKz0gaW5uZXJUZXh0O1xyXG4gICAgICB9IGVsc2UgaWYgKGlubmVyVGV4dCkge1xyXG4gICAgICAgIG5vbkJvbGRUZXh0ICs9IGlubmVyVGV4dDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRleHQgPSBib2xkVGV4dC50cmltKCk7XHJcbiAgICAvLyBNaXhlZCBib2xkL3BsYWluIHRleHQgaXMgYW4gZW1waGFzaXplZCBwaHJhc2UgaW5zaWRlIGEgbm9ybWFsIHBhcmFncmFwaCwgbm90IGEgaGVhZGluZy5cclxuICAgIGlmICghdGV4dCB8fCBub25Cb2xkVGV4dC50cmltKCkgfHwgdGV4dC5sZW5ndGggPiAxMjApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBUaXRsZS1zaXplZCBib2xkIHRleHQgKD49MTZwdCwgbWF0Y2hpbmcgdGhlIGFydGljbGUncyBvd24gaGVhZGluZykgaXNuJ3QgYSBUT0MgZW50cnkuXHJcbiAgICBpZiAobWF4Rm9udFNpemVQdCA+PSAxNikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBpZDogYmxvY2suaWQsIHRleHQsIGxldmVsOiAyIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0cmlwSHRtbChodG1sOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFodG1sKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIHJldHVybiBodG1sXHJcbiAgICAgIC5yZXBsYWNlKC88W14+XSo+L2csICcnKVxyXG4gICAgICAucmVwbGFjZSgvJm5ic3A7L2csICcgJylcclxuICAgICAgLnJlcGxhY2UoLyZhbXA7L2csICcmJylcclxuICAgICAgLnRyaW0oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBTY3JvbGxTcHkoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudG9jT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcclxuXHJcbiAgICBjb25zdCBhbmNob3JzID0gQXJyYXkuZnJvbShcclxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxyXG4gICAgICAgICcudG9jLWFuY2hvcidcclxuICAgICAgKVxyXG4gICAgKTtcclxuICAgIGlmICghYW5jaG9ycy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudG9jT2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXHJcbiAgICAgIGVudHJpZXMgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGUgPSBlbnRyaWVzLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5pc0ludGVyc2VjdGluZyk7XHJcbiAgICAgICAgaWYgKHZpc2libGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZVRvY0lkID0gdmlzaWJsZVswXS50YXJnZXQuaWQucmVwbGFjZSgnYmxvY2stJywgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgeyByb290TWFyZ2luOiAnMHB4IDBweCAtNzAlIDBweCcgfVxyXG4gICAgKTtcclxuICAgIGFuY2hvcnMuZm9yRWFjaChhbmNob3IgPT4gdGhpcy50b2NPYnNlcnZlcj8ub2JzZXJ2ZShhbmNob3IpKTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gY2xhc3M9XCJtYWluLXNlY3Rpb25cIj5cbiAgPGRpdiBjbGFzcz1cImJsb2ctY29udGFpbmVyXCI+XG4gICAgPGgxIGNsYXNzPVwiYmxvZy10aXRsZVwiICpuZ0lmPVwicmVzcG9uc2VEYXRhPy5wb3N0VGl0bGVcIj5cbiAgICAgIHt7IHJlc3BvbnNlRGF0YS5wb3N0VGl0bGUgfX1cbiAgICA8L2gxPlxuXG4gICAgPGRpdiBjbGFzcz1cIm1ldGEtYmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWV0YS1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YS1sYWJlbFwiPlB1YmxpY2F0aW9uIERhdGU8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YS12YWx1ZVwiPnt7XG4gICAgICAgICAgcmVzcG9uc2VEYXRhPy5wdWJsaXNoZWREYXRlIHx8XG4gICAgICAgICAgICByZXNwb25zZURhdGE/LmJsb2dTY2hlZHVsZWREYXRlIHx8XG4gICAgICAgICAgICByZXNwb25zZURhdGE/LmNyZWF0ZWRUaW1lU3RhbXAgfCBkYXRlOiAnZCBNTU1NIHknXG4gICAgICAgIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWV0YS1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YS1sYWJlbFwiPkF1dGhvcjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZXRhLXZhbHVlXCI+e3tcbiAgICAgICAgICByZXNwb25zZURhdGE/LmF1dGhvcj8uY29udGVudCB8fCAn4oCUJ1xuICAgICAgICB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtaXRlbVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtbGFiZWxcIj5SZWFkIFRpbWU8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YS12YWx1ZVwiXG4gICAgICAgICAgPnt7IHJlc3BvbnNlRGF0YT8ucmVhZFRpbWUgfHwgJ+KAlCcgfX0gbWluIHJlYWQ8L3NwYW5cbiAgICAgICAgPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWV0YS1pdGVtXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWV0YS1sYWJlbFwiPlZpZXdzPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1ldGEtdmFsdWVcIj57eyByZXNwb25zZURhdGE/LnRvdGFsVmlzaXRzIHx8IDAgfX0rPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFncy1yb3dcIiAqbmdJZj1cInRhZ3MubGVuZ3RoXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInRhZy1jaGlwXCIgKm5nRm9yPVwibGV0IHRhZyBvZiB0YWdzXCI+e3sgdGFnIHwgdGl0bGVjYXNlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImJsb2ctbGF5b3V0XCIgW2NsYXNzLndpdGgtdG9jXT1cInRvY0l0ZW1zLmxlbmd0aCA+IDFcIj5cbiAgICAgIDxhc2lkZSBjbGFzcz1cInRvYy1zaWRlYmFyXCIgKm5nSWY9XCJ0b2NJdGVtcy5sZW5ndGggPiAxXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cInRvYy10b2dnbGVcIlxuICAgICAgICAgIChjbGljayk9XCJ0b2NPcGVuID0gIXRvY09wZW5cIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwidG9jT3BlblwiPlxuICAgICAgICAgIDxzcGFuPlRhYmxlIE9mIENvbnRlbnQ8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b2MtdG9nZ2xlLWljb25cIiBbY2xhc3Mub3Blbl09XCJ0b2NPcGVuXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRvYy1oZWFkZXJcIj5UYWJsZSBPZiBDb250ZW50PC9kaXY+XG4gICAgICAgIDxuYXYgY2xhc3M9XCJ0b2MtbGlzdFwiIFtjbGFzcy5vcGVuXT1cInRvY09wZW5cIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRvYyBvZiB0b2NJdGVtc1wiXG4gICAgICAgICAgICBjbGFzcz1cInRvYy1saW5rXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2MtdG9wXT1cInRvYy5sZXZlbCA8PSAyXCJcbiAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nTGVmdC5weF09XCIodG9jLmxldmVsIC0gMikgKiAxNFwiXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRvY0lkID09PSB0b2MuaWRcIlxuICAgICAgICAgICAgW2hyZWZdPVwiJyNibG9jay0nICsgdG9jLmlkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb0Jsb2NrKCRldmVudCwgdG9jLmlkKVwiPlxuICAgICAgICAgICAge3sgdG9jLnRleHQgfX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmF2PlxuICAgICAgPC9hc2lkZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImJsb2ctZGV0YWlsc1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc3BvbnNlRGF0YT8uYmxvY2tzXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2hlYWRlcicgJiYgaGFzVmlzaWJsZVRleHQoaXRlbS5kYXRhPy50ZXh0KVwiXG4gICAgICAgICAgICBbaWRdPVwiJ2Jsb2NrLScgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2MtYW5jaG9yXT1cImlzVG9jQW5jaG9yKGl0ZW0uaWQpXCI+XG4gICAgICAgICAgICA8aDEgKm5nSWY9XCJpdGVtLmRhdGEubGV2ZWwgPT0gMVwiIFtpbm5lckhUTUxdPVwiaXRlbS5kYXRhLnRleHRcIj48L2gxPlxuICAgICAgICAgICAgPGgyICpuZ0lmPVwiaXRlbS5kYXRhLmxldmVsID09IDJcIiBbaW5uZXJIVE1MXT1cIml0ZW0uZGF0YS50ZXh0XCI+PC9oMj5cbiAgICAgICAgICAgIDxoMyAqbmdJZj1cIml0ZW0uZGF0YS5sZXZlbCA9PSAzXCIgW2lubmVySFRNTF09XCJpdGVtLmRhdGEudGV4dFwiPjwvaDM+XG4gICAgICAgICAgICA8aDQgKm5nSWY9XCJpdGVtLmRhdGEubGV2ZWwgPT0gNFwiIFtpbm5lckhUTUxdPVwiaXRlbS5kYXRhLnRleHRcIj48L2g0PlxuICAgICAgICAgICAgPGg1ICpuZ0lmPVwiaXRlbS5kYXRhLmxldmVsID09IDVcIiBbaW5uZXJIVE1MXT1cIml0ZW0uZGF0YS50ZXh0XCI+PC9oNT5cbiAgICAgICAgICAgIDxoNiAqbmdJZj1cIml0ZW0uZGF0YS5sZXZlbCA9PSA2XCIgW2lubmVySFRNTF09XCJpdGVtLmRhdGEudGV4dFwiPjwvaDY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ3BhcmFncmFwaCcgJiYgaGFzVmlzaWJsZVRleHQoaXRlbS5kYXRhPy50ZXh0KVwiXG4gICAgICAgICAgICBbaWRdPVwiJ2Jsb2NrLScgKyBpdGVtLmlkXCJcbiAgICAgICAgICAgIFtjbGFzcy50b2MtYW5jaG9yXT1cImlzVG9jQW5jaG9yKGl0ZW0uaWQpXCI+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cImlubmVyLXRleHRcIlxuICAgICAgICAgICAgICBbY2xhc3MuaGVhZGluZy1wYXJhZ3JhcGhdPVwiaXNUb2NBbmNob3IoaXRlbS5pZClcIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIml0ZW0uZGF0YS50ZXh0XCI+PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT0gJ2xpc3QnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5kYXRhLnN0eWxlID09ICdvcmRlcmVkJ1wiPlxuICAgICAgICAgICAgICA8b2wgY2xhc3M9XCJsaXN0LXN0eWxlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbGlzdCBvZiBpdGVtLmRhdGEuaXRlbXNcIj5cbiAgICAgICAgICAgICAgICAgIDxsaSBbaW5uZXJIVE1MXT1cImxpc3RcIj48L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L29sPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5kYXRhLnN0eWxlID09ICd1bm9yZGVyZWQnXCI+XG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3Qtc3R5bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaXN0IG9mIGl0ZW0uZGF0YS5pdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgPGxpIFtpbm5lckhUTUxdPVwibGlzdFwiPjwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09ICdkZWxpbWl0ZXInXCIgY2xhc3M9XCJjZS1kZWxpbWl0ZXJcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIml0ZW0udHlwZSA9PSAnaW1hZ2UnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5oZXJvLWltYWdlXT1cIml0ZW0uaWQgPT09IGhlcm9JbWFnZUJsb2NrSWRcIj5cbiAgICAgICAgICAgIDxpbWcgbG9hZGluZz1cImxhenlcIiBbc3JjXT1cIml0ZW0uZGF0YS5maWxlLnVybFwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlLWNhcHRpb25cIiAqbmdJZj1cIml0ZW0uZGF0YT8uY2FwdGlvblwiPnt7XG4gICAgICAgICAgICAgIGl0ZW0uZGF0YS5jYXB0aW9uXG4gICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09ICd0YWJsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS13cmFwcGVyXCI+XG4gICAgICAgICAgICAgIDx0YWJsZVxuICAgICAgICAgICAgICAgIFtjbGFzcy50YWJsZS1uby1oZWFkaW5nXT1cIml0ZW0uZGF0YS53aXRoSGVhZGluZ3MgPT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBpdGVtLmRhdGEuY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgW2lubmVySFRNTF09XCJpdGVtXCI+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8c2ltcG8tcmVjZW50LWJsb2ctcG9zdC1zZWN0aW9uXG4gICAgICBbcG9wdWxhcl09XCJ0cnVlXCJcbiAgICAgIFtidXNpbmVzc0lkXT1cInJlc3BvbnNlRGF0YT8uYnVzaW5lc3NJZFwiXG4gICAgICBbZXhjbHVkZUJsb2dJZF09XCJyZXNwb25zZURhdGE/LmlkXCJcbiAgICAgIFtlZGl0XT1cImZhbHNlXCI+XG4gICAgPC9zaW1wby1yZWNlbnQtYmxvZy1wb3N0LXNlY3Rpb24+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
@@ -13026,10 +13026,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
13026
13026
  }] } });
13027
13027
 
13028
13028
  class RecentBlogPostSectionComponent extends BaseSection {
13029
- constructor(_eventService, restService, storage) {
13029
+ constructor(_eventService, restService, router, storage) {
13030
13030
  super();
13031
13031
  this._eventService = _eventService;
13032
13032
  this.restService = restService;
13033
+ this.router = router;
13033
13034
  this.storage = storage;
13034
13035
  this.responseData = [];
13035
13036
  this.popular = false;
@@ -13111,12 +13112,18 @@ class RecentBlogPostSectionComponent extends BaseSection {
13111
13112
  });
13112
13113
  }
13113
13114
  getSliceParameters() {
13114
- const fallbackCap = this.popular ? 5 : 0;
13115
+ // A details-page "You Might Also Like" widget (excludeBlogId set) shows a clean single
13116
+ // row of 3; a page-level popular section with no builder config falls back to 5.
13117
+ const fallbackCap = this.popular ? (this.excludeBlogId ? 3 : 5) : 0;
13115
13118
  return [0, (this.content?.noOfPosts || fallbackCap)];
13116
13119
  }
13117
13120
  getBlogById(blogId) {
13118
13121
  this._eventService.blogByIdEvent.emit(blogId);
13119
13122
  }
13123
+ goToBlog(content) {
13124
+ this.getBlogById(content.newPostTitle);
13125
+ this.router.navigate(['/blog', content.newPostTitle]);
13126
+ }
13120
13127
  openBlogList() {
13121
13128
  this._eventService.openBlogListEvent.emit();
13122
13129
  }
@@ -13128,8 +13135,8 @@ class RecentBlogPostSectionComponent extends BaseSection {
13128
13135
  this._eventService.editSection.emit({ data: this.data });
13129
13136
  }, 100);
13130
13137
  }
13131
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecentBlogPostSectionComponent, deps: [{ token: EventsService }, { token: RestService }, { token: LOCAL_STORAGE }], target: i0.ɵɵFactoryTarget.Component }); }
13132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecentBlogPostSectionComponent, isStandalone: true, selector: "simpo-recent-blog-post-section", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor", responseData: "responseData", popular: "popular", businessId: "businessId", excludeBlogId: "excludeBlogId", size: "size" }, usesInheritance: true, ngImport: i0, template: "<section *ngIf=\"!popular || apiLoading || showCards\" [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\" [ngStyle]=\"{'width' : (displayedPosts.length || 0) == 0 ? '100%' : ''}\">\r\n <div *ngFor=\"let text of data?.content?.inputText; let i = index\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\" >\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"i\" [isRTE]=\"text.isRTE\"></simpo-text-editor>\r\n\r\n </div>\r\n </div>\r\n <div class=\"heading-large content-side mb-2\" *ngIf=\"popular && !data?.content?.inputText?.length\">\r\n You Might Also Like\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'justify-content-between': showCardStyle}\" *ngIf=\"showCards\">\r\n <div (click)=\"getBlogById(content.newPostTitle)\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\"\r\n class=\"individual-cards col-12\"\r\n *ngFor=\"let content of displayedPosts | slice:getSliceParameters()[0]:getSliceParameters()[1]\" [ngClass]=\"{'card-form': showCardStyle}\">\r\n <div class=\"image\">\r\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\r\n [simpoCorner]=\"style?.corners\" class=\"d-block mx-lg-auto img-fluid h-100\" alt=\"\" *ngIf=\"content.img\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10 h-35': showCardStyle}\">\r\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\r\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\r\n alt=\"\" *ngIf=\"!content.img\" class=\"h-35\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10': showCardStyle}\">\r\n </div>\r\n <div class=\"heading-medium title mt-4\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postTitle?.length || 0) > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\r\n </div>\r\n <div class=\"body-large mt-4 pb-15\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postSummary?.length || 0) > 250 ? content.postSummary.substring(0, 250) + '...' :\r\n content.postSummary}}\r\n </div>\r\n <!-- <div class=\"body-large adate mt-3\">\r\n {{content.createdTimeStamp | date:'EEEE, MMM, d, y'}}\r\n </div> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"apiLoading\" class=\"row\">\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!showCards && !apiLoading\" class=\"row\">\r\n <div class=\"no-blog-post\">\r\n <mat-icon>info</mat-icon>This section won't be visible because you have no published blog posts.\r\n </div>\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-section mt-3rem\" *ngIf=\"this.data?.action && this.data?.action?.display\">\r\n <button class=\"button p-2\" [buttonData]=\"buttonData?.content\" [buttonStyle]=\"buttonData?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(buttonData?.id || '')\" [sectionId]=\"data?.id\" [color]=\"data?.styles?.background?.accentColor\"\r\n [backgroundInfo]=\"data?.styles?.background\" [appButtonEditor]=\"edit ?? false\" [buttonId]=\"buttonData?.id ?? ''\" (click)=\"openBlogList()\">{{buttonData?.content?.label}}</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.total-container{position:relative;height:auto}.container-fluid{height:auto;padding:6rem 3rem;display:block!important}.individual-cards{padding-bottom:30px}.individual-cards img{width:100%;height:37vh}.title{font-size:20px;font-weight:500}.mt-3rem{margin-top:3rem}@media only screen and (max-width: 475px){.cards{flex-direction:column}.individual-cards{width:100%}.title{font-size:26px}.col-12{flex:0 0 auto!important;width:100%!important}}.button{font-size:16px!important;padding:.5rem 1.5rem!important;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important;margin-top:1rem}.skeleton-parent{display:flex;gap:15px}.skeleton{padding:10px;border-radius:10px}.second-section-wrapper{width:100%;height:auto;flex:1}.wrapper{width:100%;flex:1}.no-blog-post{color:#5185ad;text-align:left;display:flex;align-items:center;gap:15px;height:55px;background:#f6fbff;font-size:16px;font-weight:600}.card-form{background:#fff;color:#000!important;border-radius:15px;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;padding-left:unset;padding-right:unset}.br-10{border-radius:1rem 1rem 0 0!important}.p-10{padding:10px}.h-35{height:35vh!important}.col-md-4{flex:0 0 auto;width:32.333333%}.pb-15{padding-bottom:15px}\n"], dependencies: [{ kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ContentTitleDirective, selector: "[simpoContentTitleSpace]", inputs: ["simpoContentTitleSpace"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "isRTE", "sectionId", "label", "type", "inputTextIndex", "itemIndex"], outputs: ["valueChange"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId", "itemIndex"] }] }); }
13138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecentBlogPostSectionComponent, deps: [{ token: EventsService }, { token: RestService }, { token: i2$2.Router }, { token: LOCAL_STORAGE }], target: i0.ɵɵFactoryTarget.Component }); }
13139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RecentBlogPostSectionComponent, isStandalone: true, selector: "simpo-recent-blog-post-section", inputs: { data: "data", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor", responseData: "responseData", popular: "popular", businessId: "businessId", excludeBlogId: "excludeBlogId", size: "size" }, usesInheritance: true, ngImport: i0, template: "<section *ngIf=\"!popular || apiLoading || showCards\" [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\" [ngStyle]=\"{'width' : (displayedPosts.length || 0) == 0 ? '100%' : ''}\">\r\n <div *ngFor=\"let text of data?.content?.inputText; let i = index\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\" >\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"i\" [isRTE]=\"text.isRTE\"></simpo-text-editor>\r\n\r\n </div>\r\n </div>\r\n <div class=\"heading-large content-side popular-heading\" *ngIf=\"popular && !data?.content?.inputText?.length\">\r\n You Might Also Like\r\n </div>\r\n <div class=\"row gap-3\" *ngIf=\"showCards\">\r\n <div (click)=\"goToBlog(content)\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\"\r\n class=\"individual-cards col-12\"\r\n *ngFor=\"let content of displayedPosts | slice:getSliceParameters()[0]:getSliceParameters()[1]\" [ngClass]=\"{'card-form': showCardStyle}\">\r\n <div class=\"image\">\r\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\r\n [simpoCorner]=\"style?.corners\" class=\"d-block mx-lg-auto img-fluid\" alt=\"\" *ngIf=\"content.img\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10': showCardStyle}\">\r\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\r\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\r\n alt=\"\" *ngIf=\"!content.img\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10': showCardStyle}\">\r\n </div>\r\n <div class=\"heading-medium title mt-4\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postTitle?.length || 0) > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\r\n </div>\r\n <div class=\"body-large mt-4 pb-15\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postSummary?.length || 0) > 250 ? content.postSummary.substring(0, 250) + '...' :\r\n content.postSummary}}\r\n </div>\r\n <!-- <div class=\"body-large adate mt-3\">\r\n {{content.createdTimeStamp | date:'EEEE, MMM, d, y'}}\r\n </div> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"apiLoading\" class=\"row\">\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n 'aspect-ratio': '16/9',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!showCards && !apiLoading\" class=\"row\">\r\n <div class=\"no-blog-post\">\r\n <mat-icon>info</mat-icon>This section won't be visible because you have no published blog posts.\r\n </div>\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n 'aspect-ratio': '16/9',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-section mt-3rem\" *ngIf=\"this.data?.action && this.data?.action?.display\">\r\n <button class=\"button p-2\" [buttonData]=\"buttonData?.content\" [buttonStyle]=\"buttonData?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(buttonData?.id || '')\" [sectionId]=\"data?.id\" [color]=\"data?.styles?.background?.accentColor\"\r\n [backgroundInfo]=\"data?.styles?.background\" [appButtonEditor]=\"edit ?? false\" [buttonId]=\"buttonData?.id ?? ''\" (click)=\"openBlogList()\">{{buttonData?.content?.label}}</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.total-container{position:relative;height:auto}.container-fluid{height:auto;padding:6rem 3rem;display:block!important}.individual-cards{padding-bottom:30px;cursor:pointer}.individual-cards img{width:100%;height:auto;aspect-ratio:16 / 9;object-fit:cover}.title{font-size:20px;font-weight:500}.popular-heading{font-size:2rem;line-height:1.25em;font-weight:700;margin-bottom:24px}@media only screen and (max-width: 475px){.popular-heading{font-size:1.5rem}}.mt-3rem{margin-top:3rem}@media only screen and (max-width: 475px){.cards{flex-direction:column}.individual-cards{width:100%}.title{font-size:26px}.col-12{flex:0 0 auto!important;width:100%!important}}.button{font-size:16px!important;padding:.5rem 1.5rem!important;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important;margin-top:1rem}.skeleton-parent{display:flex;gap:15px}.skeleton{padding:10px;border-radius:10px}.second-section-wrapper{width:100%;height:auto;flex:1}.wrapper{width:100%;flex:1}.no-blog-post{color:#5185ad;text-align:left;display:flex;align-items:center;gap:15px;height:55px;background:#f6fbff;font-size:16px;font-weight:600}.card-form{background:#fff;color:#000!important;border-radius:15px;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;padding-left:unset;padding-right:unset}.br-10{border-radius:1rem 1rem 0 0!important}.p-10{padding:10px}.col-md-4{flex:0 0 auto;width:32.333333%}.pb-15{padding-bottom:15px}\n"], dependencies: [{ kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "component", type: HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "directive", type: AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: ImageDirectiveDirective, selector: "[simpoImageDirective]", inputs: ["simpoImageDirective"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: ContentTitleDirective, selector: "[simpoContentTitleSpace]", inputs: ["simpoContentTitleSpace"] }, { kind: "directive", type: ButtonDirectiveDirective, selector: "[simpoButtonDirective]", inputs: ["buttonStyle", "color", "scrollValue", "backgroundInfo"] }, { kind: "directive", type: ColumnDirectiveDirective, selector: "[simpoColumnDirective]", inputs: ["simpoColumnDirective"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "isRTE", "sectionId", "label", "type", "inputTextIndex", "itemIndex"], outputs: ["valueChange"] }, { kind: "directive", type: ButtonEditorDirective, selector: "button[appButtonEditor]", inputs: ["appButtonEditor", "buttonData", "buttonStyle", "backgroundInfo", "sectionId", "buttonId", "itemIndex"] }] }); }
13133
13140
  }
13134
13141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RecentBlogPostSectionComponent, decorators: [{
13135
13142
  type: Component,
@@ -13156,8 +13163,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
13156
13163
  SpacingHorizontalDirective,
13157
13164
  TextEditorComponent,
13158
13165
  ButtonEditorDirective
13159
- ], template: "<section *ngIf=\"!popular || apiLoading || showCards\" [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\" [ngStyle]=\"{'width' : (displayedPosts.length || 0) == 0 ? '100%' : ''}\">\r\n <div *ngFor=\"let text of data?.content?.inputText; let i = index\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\" >\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"i\" [isRTE]=\"text.isRTE\"></simpo-text-editor>\r\n\r\n </div>\r\n </div>\r\n <div class=\"heading-large content-side mb-2\" *ngIf=\"popular && !data?.content?.inputText?.length\">\r\n You Might Also Like\r\n </div>\r\n <div class=\"row\" [ngClass]=\"{'justify-content-between': showCardStyle}\" *ngIf=\"showCards\">\r\n <div (click)=\"getBlogById(content.newPostTitle)\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\"\r\n class=\"individual-cards col-12\"\r\n *ngFor=\"let content of displayedPosts | slice:getSliceParameters()[0]:getSliceParameters()[1]\" [ngClass]=\"{'card-form': showCardStyle}\">\r\n <div class=\"image\">\r\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\r\n [simpoCorner]=\"style?.corners\" class=\"d-block mx-lg-auto img-fluid h-100\" alt=\"\" *ngIf=\"content.img\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10 h-35': showCardStyle}\">\r\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\r\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\r\n alt=\"\" *ngIf=\"!content.img\" class=\"h-35\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10': showCardStyle}\">\r\n </div>\r\n <div class=\"heading-medium title mt-4\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postTitle?.length || 0) > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\r\n </div>\r\n <div class=\"body-large mt-4 pb-15\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postSummary?.length || 0) > 250 ? content.postSummary.substring(0, 250) + '...' :\r\n content.postSummary}}\r\n </div>\r\n <!-- <div class=\"body-large adate mt-3\">\r\n {{content.createdTimeStamp | date:'EEEE, MMM, d, y'}}\r\n </div> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"apiLoading\" class=\"row\">\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!showCards && !apiLoading\" class=\"row\">\r\n <div class=\"no-blog-post\">\r\n <mat-icon>info</mat-icon>This section won't be visible because you have no published blog posts.\r\n </div>\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n height: '40vh',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-section mt-3rem\" *ngIf=\"this.data?.action && this.data?.action?.display\">\r\n <button class=\"button p-2\" [buttonData]=\"buttonData?.content\" [buttonStyle]=\"buttonData?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(buttonData?.id || '')\" [sectionId]=\"data?.id\" [color]=\"data?.styles?.background?.accentColor\"\r\n [backgroundInfo]=\"data?.styles?.background\" [appButtonEditor]=\"edit ?? false\" [buttonId]=\"buttonData?.id ?? ''\" (click)=\"openBlogList()\">{{buttonData?.content?.label}}</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.total-container{position:relative;height:auto}.container-fluid{height:auto;padding:6rem 3rem;display:block!important}.individual-cards{padding-bottom:30px}.individual-cards img{width:100%;height:37vh}.title{font-size:20px;font-weight:500}.mt-3rem{margin-top:3rem}@media only screen and (max-width: 475px){.cards{flex-direction:column}.individual-cards{width:100%}.title{font-size:26px}.col-12{flex:0 0 auto!important;width:100%!important}}.button{font-size:16px!important;padding:.5rem 1.5rem!important;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important;margin-top:1rem}.skeleton-parent{display:flex;gap:15px}.skeleton{padding:10px;border-radius:10px}.second-section-wrapper{width:100%;height:auto;flex:1}.wrapper{width:100%;flex:1}.no-blog-post{color:#5185ad;text-align:left;display:flex;align-items:center;gap:15px;height:55px;background:#f6fbff;font-size:16px;font-weight:600}.card-form{background:#fff;color:#000!important;border-radius:15px;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;padding-left:unset;padding-right:unset}.br-10{border-radius:1rem 1rem 0 0!important}.p-10{padding:10px}.h-35{height:35vh!important}.col-md-4{flex:0 0 auto;width:32.333333%}.pb-15{padding-bottom:15px}\n"] }]
13160
- }], ctorParameters: () => [{ type: EventsService }, { type: RestService }, { type: undefined, decorators: [{
13166
+ ], template: "<section *ngIf=\"!popular || apiLoading || showCards\" [id]=\"data?.id\" [simpoBackground]=\"style?.background\" simpoHover (hovering)=\"showEditTabs($event)\"\r\n class=\"total-container\" [attr.style]=\"customClass\">\r\n <div [id]=\"data?.id\" [simpoOverlay]=\"style?.background\" [spacingHorizontal]=\"stylesLayout\">\r\n <div class=\"container-fluid\" [id]=\"data?.id\" [simpoBorder]=\"style?.border\" [simpoLayout]=\"style?.layout\">\r\n <div [id]=\"data?.id\" [simpoAnimation]=\"style?.animation\" [ngStyle]=\"{'width' : (displayedPosts.length || 0) == 0 ? '100%' : ''}\">\r\n <div *ngFor=\"let text of data?.content?.inputText; let i = index\">\r\n <div class=\"heading-large content-side\" [simpoContentTitleSpace]=\"headingSpace\" >\r\n <simpo-text-editor [(value)]=\"text.value\" [editable]=\"edit || false\" [sectionId]=\"data?.id\" [inputTextIndex]=\"i\" [isRTE]=\"text.isRTE\"></simpo-text-editor>\r\n\r\n </div>\r\n </div>\r\n <div class=\"heading-large content-side popular-heading\" *ngIf=\"popular && !data?.content?.inputText?.length\">\r\n You Might Also Like\r\n </div>\r\n <div class=\"row gap-3\" *ngIf=\"showCards\">\r\n <div (click)=\"goToBlog(content)\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\"\r\n class=\"individual-cards col-12\"\r\n *ngFor=\"let content of displayedPosts | slice:getSliceParameters()[0]:getSliceParameters()[1]\" [ngClass]=\"{'card-form': showCardStyle}\">\r\n <div class=\"image\">\r\n <img loading=\"lazy\" [src]=\"content.img\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\"\r\n [simpoCorner]=\"style?.corners\" class=\"d-block mx-lg-auto img-fluid\" alt=\"\" *ngIf=\"content.img\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10': showCardStyle}\">\r\n <img loading=\"lazy\" [simpoImageDirective]=\"style?.image\" [id]=\"data?.id\" [simpoCorner]=\"style?.corners\"\r\n src=\"https://dev-beeos.s3.amazonaws.com/library-media/541329c1719236963199pexels-pixabay-262508.jpg\"\r\n alt=\"\" *ngIf=\"!content.img\"\r\n loading=\"lazy\" [ngClass]=\"{'br-10': showCardStyle}\">\r\n </div>\r\n <div class=\"heading-medium title mt-4\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postTitle?.length || 0) > 100 ? content.postTitle.substring(0,100)+'...\"' : content.postTitle}}\r\n </div>\r\n <div class=\"body-large mt-4 pb-15\" [ngClass]=\"{'p-10': showCardStyle}\">\r\n {{(content?.postSummary?.length || 0) > 250 ? content.postSummary.substring(0, 250) + '...' :\r\n content.postSummary}}\r\n </div>\r\n <!-- <div class=\"body-large adate mt-3\">\r\n {{content.createdTimeStamp | date:'EEEE, MMM, d, y'}}\r\n </div> -->\r\n </div>\r\n </div>\r\n <div *ngIf=\"apiLoading\" class=\"row\">\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n 'aspect-ratio': '16/9',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!showCards && !apiLoading\" class=\"row\">\r\n <div class=\"no-blog-post\">\r\n <mat-icon>info</mat-icon>This section won't be visible because you have no published blog posts.\r\n </div>\r\n <div class=\"skeleton col-12\" [simpoColumnDirective]=\"columnSize\" [id]=\"data?.id\" *ngFor=\"let i of [1,2,3]\">\r\n <ngx-skeleton-loader count=\"1\" appearance=\"circle\" [theme]=\"{\r\n width: '100%',\r\n 'aspect-ratio': '16/9',\r\n 'border-radius': '10px',\r\n 'position': 'relative',\r\n 'right': '5px'\r\n }\">\r\n </ngx-skeleton-loader>\r\n <div class=\"second-section-wrapper\">\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '100%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '90%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n <div class=\"wrapper\">\r\n <ngx-skeleton-loader [theme]=\"{\r\n width: '60%',\r\n 'border-radius': '0',\r\n height: '15px',\r\n 'margin-bottom': '10px',\r\n 'display' : 'flex'\r\n }\"></ngx-skeleton-loader>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-section mt-3rem\" *ngIf=\"this.data?.action && this.data?.action?.display\">\r\n <button class=\"button p-2\" [buttonData]=\"buttonData?.content\" [buttonStyle]=\"buttonData?.styles\"\r\n simpoButtonDirective [id]=\"data?.id+(buttonData?.id || '')\" [sectionId]=\"data?.id\" [color]=\"data?.styles?.background?.accentColor\"\r\n [backgroundInfo]=\"data?.styles?.background\" [appButtonEditor]=\"edit ?? false\" [buttonId]=\"buttonData?.id ?? ''\" (click)=\"openBlogList()\">{{buttonData?.content?.label}}</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"style?.devider?.display\">\r\n <simpo-svg-divider [dividerType]=\"style?.devider?.deviderType\" [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\r\n </ng-container>\r\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\r\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\r\n </div>\r\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\r\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\r\n </div>\r\n</section>\r\n", styles: [".hover_effect{position:unset;width:100%;top:0;left:0;height:100%}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.total-container{position:relative;height:auto}.container-fluid{height:auto;padding:6rem 3rem;display:block!important}.individual-cards{padding-bottom:30px;cursor:pointer}.individual-cards img{width:100%;height:auto;aspect-ratio:16 / 9;object-fit:cover}.title{font-size:20px;font-weight:500}.popular-heading{font-size:2rem;line-height:1.25em;font-weight:700;margin-bottom:24px}@media only screen and (max-width: 475px){.popular-heading{font-size:1.5rem}}.mt-3rem{margin-top:3rem}@media only screen and (max-width: 475px){.cards{flex-direction:column}.individual-cards{width:100%}.title{font-size:26px}.col-12{flex:0 0 auto!important;width:100%!important}}.button{font-size:16px!important;padding:.5rem 1.5rem!important;display:inline-flex;align-items:center;justify-content:center;width:fit-content!important;margin-top:1rem}.skeleton-parent{display:flex;gap:15px}.skeleton{padding:10px;border-radius:10px}.second-section-wrapper{width:100%;height:auto;flex:1}.wrapper{width:100%;flex:1}.no-blog-post{color:#5185ad;text-align:left;display:flex;align-items:center;gap:15px;height:55px;background:#f6fbff;font-size:16px;font-weight:600}.card-form{background:#fff;color:#000!important;border-radius:15px;box-shadow:#0000001a 0 1px 3px,#0000000f 0 1px 2px;padding-left:unset;padding-right:unset}.br-10{border-radius:1rem 1rem 0 0!important}.p-10{padding:10px}.col-md-4{flex:0 0 auto;width:32.333333%}.pb-15{padding-bottom:15px}\n"] }]
13167
+ }], ctorParameters: () => [{ type: EventsService }, { type: RestService }, { type: i2$2.Router }, { type: undefined, decorators: [{
13161
13168
  type: Inject,
13162
13169
  args: [LOCAL_STORAGE]
13163
13170
  }] }], propDecorators: { data: [{
@@ -13712,8 +13719,19 @@ class ViewBlogComponent {
13712
13719
  ?.scrollIntoView({ behavior: 'smooth', block: 'start' });
13713
13720
  this.tocOpen = false;
13714
13721
  }
13722
+ // Real published blogs don't always carry a block id (only editor-produced ones do). The TOC,
13723
+ // scroll anchors, and hero-image detection all key off block.id, so backfill a stable one —
13724
+ // stable across re-renders since it's derived from the block's fixed position in the array.
13725
+ ensureBlockIds(blocks) {
13726
+ blocks.forEach((block, index) => {
13727
+ if (!block.id) {
13728
+ block.id = `block-idx-${index}`;
13729
+ }
13730
+ });
13731
+ }
13715
13732
  buildTableOfContents() {
13716
13733
  const blocks = this.responseData?.blocks || [];
13734
+ this.ensureBlockIds(blocks);
13717
13735
  this.headingBlockIds.clear();
13718
13736
  this.tocItems = blocks
13719
13737
  .map(block => this.getHeadingCandidate(block))