@osovitny/anatoly 3.16.50 → 3.16.52

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.
@@ -81,8 +81,18 @@ export class ContactUsForm extends BaseEditComponent {
81
81
  }
82
82
  ngOnInit() {
83
83
  this.createFormGroup();
84
- this.appContext.getCurrent(context => {
85
- this.setContext(context);
84
+ this.appContext.updated$.subscribe((context) => {
85
+ if (!context) {
86
+ return;
87
+ }
88
+ this.isUserSignedIn = context.isUserSignedIn;
89
+ this.reCaptchaSiteKey = context.reCaptchaSiteKeyV3;
90
+ this.selectedTopic = this.topicList[3].value;
91
+ this.setFormValue('topic', this.selectedTopic);
92
+ if (this.isUserSignedIn) {
93
+ this.setFormValue('name', context.user.displayNameOrFullName);
94
+ this.setFormValue('email', context.user.email);
95
+ }
86
96
  });
87
97
  }
88
98
  createFormGroup() {
@@ -94,16 +104,6 @@ export class ContactUsForm extends BaseEditComponent {
94
104
  message: new FormControl('', [Validators.required])
95
105
  });
96
106
  }
97
- setContext(context) {
98
- this.isUserSignedIn = context.isUserSignedIn;
99
- this.reCaptchaSiteKey = context.reCaptchaSiteKeyV3;
100
- this.selectedTopic = this.topicList[3].value;
101
- this.setFormValue('topic', this.selectedTopic);
102
- if (this.isUserSignedIn) {
103
- this.setFormValue('name', context.user.displayNameOrFullName);
104
- this.setFormValue('email', context.user.email);
105
- }
106
- }
107
107
  isValid() {
108
108
  return this.formGroup.valid;
109
109
  }
@@ -216,4 +216,4 @@ export class ContactUsForm extends BaseEditComponent {
216
216
  }], submit: [{
217
217
  type: Output
218
218
  }] }); })();
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC11cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi91aS9mb3Jtcy9jb250YWN0LXVzL2NvbnRhY3QtdXMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29udGFjdC11cy9jb250YWN0LXVzLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixNQUFNO0FBQ04sT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7SUNiaEUsa0NBQThEO0lBQUEsWUFBa0I7SUFBQSxpQkFBUzs7O0lBQWpELHNDQUFxQjtJQUFDLGVBQWtCO0lBQWxCLDhDQUFrQjs7O0lBcUJwRix5QkFBMkI7SUFBQSxtR0FBbUY7SUFBQSxpQkFBSTs7O0lBaUNsSCxrQ0FHc0I7SUFDcEIsd0JBQ0Y7SUFBQSxpQkFBUzs7O0lBSkQsd0RBQXdDOzs7QURwQzFELE1BQU0sT0FBTyxhQUFjLFNBQVEsaUJBQWlCO0lBb0J4QztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdkJWLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsZ0JBQWdCLENBQUM7SUFDakIsYUFBYSxDQUFDO0lBRWQsU0FBUyxHQUFHO1FBQ1YsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7UUFDOUIsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7UUFDNUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3hCLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO1FB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bnQiOlsiLypcclxuPGZpbGU+XHJcbiAgUHJvamVjdDpcclxuICAgIEBvc292aXRueS9hbmF0b2x5XHJcblxyXG4gIEF1dGhvcnM6XHJcbiAgICBWYWRpbSBPc292aXRueSB2YWRpbUBvc292aXRueS5jb21cclxuICAgIEFuYXRvbHkgT3Nvdml0bnkgYW5hdG9seUBvc292aXRueS5jb21cclxuXHJcbiAgQ3JlYXRlZDpcclxuICAgIDAyIEF1ZyAyMDIyXHJcblxyXG4gIENvcHlyaWdodCAoYykgMjAxNy0yMDIyIE9zb3ZpdG55IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuPC9maWxlPlxyXG4qL1xyXG5cclxuLy9Ob2RlXHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBSZUNhcHRjaGFWM1NlcnZpY2UgfSBmcm9tICduZ3gtY2FwdGNoYSc7XHJcblxyXG4vL0FwcFxyXG5pbXBvcnQgeyBBcHBDb250ZXh0U2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2FwcGNvbnRleHQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvcmUvbm90aWZpY2F0aW9ucy9zZXJ2aWNlcy9ub3RpZmljYXRpb24tc2VydmljZVwiO1xyXG5pbXBvcnQgeyBFbWFpbHNBcGlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGF0YS9zZXJ2aWNlcy9lbWFpbHMtYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlRWRpdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2Jhc2UvYmFzZS1lZGl0LmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbmF0b2x5LWZvcm1zLWNvbnRhY3R1cy1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udGFjdC11cy5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGFjdFVzRm9ybSBleHRlbmRzIEJhc2VFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBpc1VzZXJTaWduZWRJbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJlQ2FwdGNoYVNpdGVLZXk7XHJcbiAgc2VsZWN0ZWRUb3BpYztcclxuXHJcbiAgdG9waWNMaXN0ID0gW1xyXG4gICAgeyB2YWx1ZTogJ0JpbGxpbmcgJiBQcmljaW5nJyB9LFxyXG4gICAgeyB2YWx1ZTogJ0xlZ2FsICYgUHJpdmFjeScgfSxcclxuICAgIHsgdmFsdWU6ICdSZXBvciBhYnVzZScgfSxcclxuICAgIHsgdmFsdWU6ICdUZWNobmljYWwgU3VwcG9ydCcgfSxcclxuICAgIHsgdmFsdWU6ICdPdGhlcicgfVxyXG4gIF07XHJcblxyXG4gIC8vSW5wdXRzXHJcbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ1dHRvbnMgPSB0cnVlO1xyXG5cclxuICAvL091dHB1dHNcclxuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlQ2FwdGNoYTogUmVDYXB0Y2hhVjNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGFwcENvbnRleHQ6IEFwcENvbnRleHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhcGk6IEVtYWlsc0FwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUdyb3VwKCk7XHJcbiBcclxuICAgIHRoaXMuYXBwQ29udGV4dC5nZXRDdXJyZW50KGNvbnRleHQgPT4ge1xyXG4gICAgICB0aGlzLnNldENvbnRleHQoY29udGV4dCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZvcm1Hcm91cCgpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgWyBWYWxpZGF0b3JzLnJlcXVpcmVkIF0pLFxyXG4gICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbIFZhbGlkYXRvcnMucmVxdWlyZWQgXSksXHJcbiAgICAgIHRvcGljOiBuZXcgRm9ybUNvbnRyb2woJycsIFsgVmFsaWRhdG9ycy5yZXF1aXJlZCBdKSxcclxuICAgICAgc3ViamVjdDogbmV3IEZvcm1Db250cm9sKCcnLCBbIFZhbGlkYXRvcnMucmVxdWlyZWQgXSksXHJcbiAgICAgIG1lc3NhZ2U6IG5ldyBGb3JtQ29udHJvbCgnJywgWyBWYWxpZGF0b3JzLnJlcXVpcmVkIF0pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldENvbnRleHQoY29udGV4dCkge1xyXG4gICAgdGhpcy5pc1VzZXJTaWduZWRJbiA9IGNvbnRleHQuaXNVc2VyU2lnbmVkSW47XHJcbiAgICB0aGlzLnJlQ2FwdGNoYVNpdGVLZXkgPSBjb250ZXh0LnJlQ2FwdGNoYVNpdGVLZXlWMztcclxuICAgIHRoaXMuc2VsZWN0ZWRUb3BpYyA9IHRoaXMudG9waWNMaXN0WzNdLnZhbHVlO1xyXG5cclxuICAgIHRoaXMuc2V0Rm9ybVZhbHVlKCd0b3BpYycsIHRoaXMuc2VsZWN0ZWRUb3BpYyk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNVc2VyU2lnbmVkSW4pIHtcclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWUoJ25hbWUnLCBjb250ZXh0LnVzZXIuZGlzcGxheU5hbWVPckZ1bGxOYW1lKTtcclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWUoJ2VtYWlsJywgY29udGV4dC51c2VyLmVtYWlsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVmFsaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAudmFsaWQ7XHJcbiAgfVxyXG5cclxuICBjb250YWN0VXMoKSB7XHJcbiAgICB0aGlzLmZvcm1TdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEZvcm1WYWx1ZSgnbmFtZScpO1xyXG4gICAgY29uc3QgZW1haWwgPSB0aGlzLmdldEZvcm1WYWx1ZSgnZW1haWwnKTtcclxuICAgIGNvbnN0IHRvcGljID0gdGhpcy5zZWxlY3RlZFRvcGljO1xyXG4gICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuZ2V0Rm9ybVZhbHVlKCdzdWJqZWN0Jyk7XHJcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRGb3JtVmFsdWUoJ21lc3NhZ2UnKTtcclxuXHJcbiAgICB0aGlzLnJlQ2FwdGNoYS5leGVjdXRlKHRoaXMucmVDYXB0Y2hhU2l0ZUtleSwgJ0NvbnRhY3RVcycsICh0b2tlbikgPT4ge1xyXG4gICAgICB0aGlzLmFwaS5zZW5kQ29udGFjdFVzKHRva2VuLCBuYW1lLCBlbWFpbCwgdG9waWMsIHN1YmplY3QsIG1lc3NhZ2UsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcygnTWVzc2FnZSBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcclxuICBcclxuICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9FdmVudHNcclxuICBvblN1Ym1pdCgpIHtcclxuICAgIHRoaXMuY29udGFjdFVzKCk7XHJcbiAgfVxyXG5cclxuICBvblRvcGljQ2hhbmdlKGV2ZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVG9waWMgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIChuZ1N1Ym1pdCk9J29uU3VibWl0KCknIFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnIG5vdmFsaWRhdGU+XHJcbiAgPGFuYXRvbHktZm9ybS12YWxpZGF0aW9uLXN1bW1hcnkgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZV09J2Zvcm1TdWJtaXR0ZWQgJiYgZm9ybUdyb3VwLmludmFsaWQnPjwvYW5hdG9seS1mb3JtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuXHJcbiAgPGRpdiBjbGFzcz0nY29udGFjdC11cyc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZmllbGRzIGNvbC02Jz5cclxuICAgICAgICA8cD5XaGF0IGNhbiB3ZSBoZWxwIHlvdSB3aXRoPzwvcD5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgndG9waWMnKSB9XCIgY2xhc3M9J2Zvcm0tdG9waWMnPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz0nZm9ybS1zZWxlY3Qtd3JhcHBlcic+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0nYXNzaXN0aXZlLXRleHQnPlRvcGljICo8L2xhYmVsPlxyXG4gICAgICAgICAgICA8c2VsZWN0IChjaGFuZ2UpPSdvblRvcGljQ2hhbmdlKCRldmVudCknIGNsYXNzPSdmb3JtLXNlbGVjdCcgZm9ybUNvbnRyb2xOYW1lPSd0b3BpYyc+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9J2xldCB0b3BpYyBvZiB0b3BpY0xpc3QnIFt2YWx1ZV09J3RvcGljLnZhbHVlJz57eyB0b3BpYy52YWx1ZSB9fSA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU9J3RvcGljJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J3RvcGljJz5cclxuICAgICAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoJ25hbWUnKSB9XCIgY2xhc3M9J2Zvcm0tbmFtZSc+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9J2Fzc2lzdGl2ZS10ZXh0Jz5OYW1lICo8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPSdmb3JtLWNvbnRyb2wnIGZvcm1Db250cm9sTmFtZT0nbmFtZScgcGxhY2Vob2xkZXI9J05hbWUgKicgdHlwZT0ndGV4dCc+XHJcbiAgICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU9J25hbWUnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J25hbWUnPlxyXG4gICAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCdlbWFpbCcpIH1cIiBjbGFzcz0nZm9ybS1lbWFpbCc+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9J2Fzc2lzdGl2ZS10ZXh0Jz5FLW1haWwgKiA8L2xhYmVsPlxyXG4gICAgICAgICAgPGlucHV0IGNsYXNzPSdmb3JtLWNvbnRyb2wnIGZvcm1Db250cm9sTmFtZT0nZW1haWwnIHBsYWNlaG9sZGVyPSdFLW1haWwgKicgdHlwZT0ndGV4dCcgLz5cclxuICAgICAgICAgIDxwICpuZ0lmPSchaXNVc2VyU2lnbmVkSW4nPlBsZWFzZSBpbmRpY2F0ZSB0aGUgZW1haWwgdXNlZCBmb3IgeW91ciBNYWlsRXggbG9naW4gaWYgeW91IGFscmVhZHkgaGF2ZSBhbiBhY2NvdW50PC9wPlxyXG4gICAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lPSdlbWFpbCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUaXRsZT0nZW1haWwnPlxyXG4gICAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCdzdWJqZWN0JykgfVwiIGNsYXNzPSdmb3JtLXN1YmplY3QnPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSdhc3Npc3RpdmUtdGV4dCc+U3ViamVjdCAqPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J3N1YmplY3QnIHBsYWNlaG9sZGVyPSdTdWJqZWN0IConIHR5cGU9J3RleHQnIC8+XHJcbiAgICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1TdWJtaXR0ZWRdPSdmb3JtU3VibWl0dGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbE5hbWU9J3N1YmplY3QnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J3N1YmplY3QnPlxyXG4gICAgICAgICAgPC9hbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9J2NvbC02Jz5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnbWVzc2FnZScpIH1cIiBjbGFzcz0nZm9ybS1tZXNzYWdlJz5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0nYXNzaXN0aXZlLXRleHQnPk1lc3NhZ2UgKjwvbGFiZWw+XHJcbiAgICAgICAgICA8dGV4dGFyZWEgZm9ybUNvbnRyb2xOYW1lPSdtZXNzYWdlJyBuYW1lPSdtZXNzYWdlJyBwbGFjZWhvbGRlcj0nTWVzc2FnZSAgKicgcm93cz0nNCdcclxuICAgICAgICAgICAgICAgICAgICB0eXBlPSd0ZXh0Jz48L3RleHRhcmVhPlxyXG4gICAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lPSdtZXNzYWdlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFRpdGxlPSdtZXNzYWdlJz5cclxuICAgICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9J3Nob3dBY3Rpb25CdXR0b25zJ1xyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYnRuLXByaW1hcnldPSchZm9ybUdyb3VwLmludmFsaWQnXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSdidG4gYnRuLXN1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9J3N1Ym1pdCc+XHJcbiAgICAgICAgICAgIFN1Ym1pdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9mb3JtPlxyXG4iXX0=
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFjdC11cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuYXRvbHkvc3JjL2xpYi91aS9mb3Jtcy9jb250YWN0LXVzL2NvbnRhY3QtdXMudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmF0b2x5L3NyYy9saWIvdWkvZm9ybXMvY29udGFjdC11cy9jb250YWN0LXVzLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0VBY0U7QUFFRixNQUFNO0FBQ04sT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBT3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7SUNiaEUsa0NBQThEO0lBQUEsWUFBa0I7SUFBQSxpQkFBUzs7O0lBQWpELHNDQUFxQjtJQUFDLGVBQWtCO0lBQWxCLDhDQUFrQjs7O0lBcUJwRix5QkFBMkI7SUFBQSxtR0FBbUY7SUFBQSxpQkFBSTs7O0lBaUNsSCxrQ0FHc0I7SUFDcEIsd0JBQ0Y7SUFBQSxpQkFBUzs7O0lBSkQsd0RBQXdDOzs7QURwQzFELE1BQU0sT0FBTyxhQUFjLFNBQVEsaUJBQWlCO0lBb0J4QztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBdkJWLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsZ0JBQWdCLENBQUM7SUFDakIsYUFBYSxDQUFDO0lBRWQsU0FBUyxHQUFHO1FBQ1YsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7UUFDOUIsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7UUFDNUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3hCLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFO1FB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aWxlPlxyXG4gIFByb2plY3Q6XHJcbiAgICBAb3Nvdml0bnkvYW5hdG9seVxyXG5cclxuICBBdXRob3JzOlxyXG4gICAgVmFkaW0gT3Nvdml0bnkgdmFkaW1Ab3Nvdml0bnkuY29tXHJcbiAgICBBbmF0b2x5IE9zb3ZpdG55IGFuYXRvbHlAb3Nvdml0bnkuY29tXHJcblxyXG4gIENyZWF0ZWQ6XHJcbiAgICAwMiBBdWcgMjAyMlxyXG5cclxuICBDb3B5cmlnaHQgKGMpIDIwMTctMjAyMiBPc292aXRueSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbjwvZmlsZT5cclxuKi9cclxuXHJcbi8vTm9kZVxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUmVDYXB0Y2hhVjNTZXJ2aWNlIH0gZnJvbSAnbmd4LWNhcHRjaGEnO1xyXG5cclxuLy9BcHBcclxuaW1wb3J0IHsgQXBwQ29udGV4dFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9hcHBjb250ZXh0LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9jb3JlL25vdGlmaWNhdGlvbnMvc2VydmljZXMvbm90aWZpY2F0aW9uLXNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRW1haWxzQXBpU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2RhdGEvc2VydmljZXMvZW1haWxzLWFwaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUVkaXRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9iYXNlL2Jhc2UtZWRpdC5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYW5hdG9seS1mb3Jtcy1jb250YWN0dXMtZm9ybScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRhY3QtdXMuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnRhY3RVc0Zvcm0gZXh0ZW5kcyBCYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgaXNVc2VyU2lnbmVkSW46IGJvb2xlYW4gPSBmYWxzZTtcclxuICByZUNhcHRjaGFTaXRlS2V5O1xyXG4gIHNlbGVjdGVkVG9waWM7XHJcblxyXG4gIHRvcGljTGlzdCA9IFtcclxuICAgIHsgdmFsdWU6ICdCaWxsaW5nICYgUHJpY2luZycgfSxcclxuICAgIHsgdmFsdWU6ICdMZWdhbCAmIFByaXZhY3knIH0sXHJcbiAgICB7IHZhbHVlOiAnUmVwb3IgYWJ1c2UnIH0sXHJcbiAgICB7IHZhbHVlOiAnVGVjaG5pY2FsIFN1cHBvcnQnIH0sXHJcbiAgICB7IHZhbHVlOiAnT3RoZXInIH1cclxuICBdO1xyXG5cclxuICAvL0lucHV0c1xyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CdXR0b25zID0gdHJ1ZTtcclxuXHJcbiAgLy9PdXRwdXRzXHJcbiAgQE91dHB1dCgpIHN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZUNhcHRjaGE6IFJlQ2FwdGNoYVYzU2VydmljZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBhcHBDb250ZXh0OiBBcHBDb250ZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpOiBFbWFpbHNBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm1Hcm91cCgpO1xyXG5cclxuICAgIHRoaXMuYXBwQ29udGV4dC51cGRhdGVkJC5zdWJzY3JpYmUoKGNvbnRleHQpID0+IHtcclxuICAgICAgaWYgKCFjb250ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzVXNlclNpZ25lZEluID0gY29udGV4dC5pc1VzZXJTaWduZWRJbjtcclxuICAgICAgdGhpcy5yZUNhcHRjaGFTaXRlS2V5ID0gY29udGV4dC5yZUNhcHRjaGFTaXRlS2V5VjM7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb3BpYyA9IHRoaXMudG9waWNMaXN0WzNdLnZhbHVlO1xyXG5cclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWUoJ3RvcGljJywgdGhpcy5zZWxlY3RlZFRvcGljKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmlzVXNlclNpZ25lZEluKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWUoJ25hbWUnLCBjb250ZXh0LnVzZXIuZGlzcGxheU5hbWVPckZ1bGxOYW1lKTtcclxuICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZSgnZW1haWwnLCBjb250ZXh0LnVzZXIuZW1haWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZUZvcm1Hcm91cCgpIHtcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgWyBWYWxpZGF0b3JzLnJlcXVpcmVkIF0pLFxyXG4gICAgICBlbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbIFZhbGlkYXRvcnMucmVxdWlyZWQgXSksXHJcbiAgICAgIHRvcGljOiBuZXcgRm9ybUNvbnRyb2woJycsIFsgVmFsaWRhdG9ycy5yZXF1aXJlZCBdKSxcclxuICAgICAgc3ViamVjdDogbmV3IEZvcm1Db250cm9sKCcnLCBbIFZhbGlkYXRvcnMucmVxdWlyZWQgXSksXHJcbiAgICAgIG1lc3NhZ2U6IG5ldyBGb3JtQ29udHJvbCgnJywgWyBWYWxpZGF0b3JzLnJlcXVpcmVkIF0pXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAudmFsaWQ7XHJcbiAgfVxyXG5cclxuICBjb250YWN0VXMoKSB7XHJcbiAgICB0aGlzLmZvcm1TdWJtaXR0ZWQgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEZvcm1WYWx1ZSgnbmFtZScpO1xyXG4gICAgY29uc3QgZW1haWwgPSB0aGlzLmdldEZvcm1WYWx1ZSgnZW1haWwnKTtcclxuICAgIGNvbnN0IHRvcGljID0gdGhpcy5zZWxlY3RlZFRvcGljO1xyXG4gICAgY29uc3Qgc3ViamVjdCA9IHRoaXMuZ2V0Rm9ybVZhbHVlKCdzdWJqZWN0Jyk7XHJcbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5nZXRGb3JtVmFsdWUoJ21lc3NhZ2UnKTtcclxuXHJcbiAgICB0aGlzLnJlQ2FwdGNoYS5leGVjdXRlKHRoaXMucmVDYXB0Y2hhU2l0ZUtleSwgJ0NvbnRhY3RVcycsICh0b2tlbikgPT4ge1xyXG4gICAgICB0aGlzLmFwaS5zZW5kQ29udGFjdFVzKHRva2VuLCBuYW1lLCBlbWFpbCwgdG9waWMsIHN1YmplY3QsIG1lc3NhZ2UsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcygnTWVzc2FnZSBoYXMgYmVlbiBzZW50IHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoKTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vRXZlbnRzXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICB0aGlzLmNvbnRhY3RVcygpO1xyXG4gIH1cclxuXHJcbiAgb25Ub3BpY0NoYW5nZShldmVudCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRvcGljID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSAobmdTdWJtaXQpPSdvblN1Ym1pdCgpJyBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJyBub3ZhbGlkYXRlPlxyXG4gIDxhbmF0b2x5LWZvcm0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zpc2libGVdPSdmb3JtU3VibWl0dGVkICYmIGZvcm1Hcm91cC5pbnZhbGlkJz48L2FuYXRvbHktZm9ybS12YWxpZGF0aW9uLXN1bW1hcnk+XHJcblxyXG4gIDxkaXYgY2xhc3M9J2NvbnRhY3QtdXMnPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPSdmb3JtLWZpZWxkcyBjb2wtNic+XHJcbiAgICAgICAgPHA+V2hhdCBjYW4gd2UgaGVscCB5b3Ugd2l0aD88L3A+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoJ3RvcGljJykgfVwiIGNsYXNzPSdmb3JtLXRvcGljJz5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tc2VsZWN0LXdyYXBwZXInPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9J2Fzc2lzdGl2ZS10ZXh0Jz5Ub3BpYyAqPC9sYWJlbD5cclxuICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT0nb25Ub3BpY0NoYW5nZSgkZXZlbnQpJyBjbGFzcz0nZm9ybS1zZWxlY3QnIGZvcm1Db250cm9sTmFtZT0ndG9waWMnPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPSdsZXQgdG9waWMgb2YgdG9waWNMaXN0JyBbdmFsdWVdPSd0b3BpYy52YWx1ZSc+e3sgdG9waWMudmFsdWUgfX0gPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeSBbZm9ybUdyb3VwXT0nZm9ybUdyb3VwJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lPSd0b3BpYydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFRpdGxlPSd0b3BpYyc+XHJcbiAgICAgICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydoYXMtZXJyb3InOiBpc0NvbnRyb2xJbnZhbGlkKCduYW1lJykgfVwiIGNsYXNzPSdmb3JtLW5hbWUnPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSdhc3Npc3RpdmUtdGV4dCc+TmFtZSAqPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J25hbWUnIHBsYWNlaG9sZGVyPSdOYW1lIConIHR5cGU9J3RleHQnPlxyXG4gICAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lPSduYW1lJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFRpdGxlPSduYW1lJz5cclxuICAgICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnZW1haWwnKSB9XCIgY2xhc3M9J2Zvcm0tZW1haWwnPlxyXG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSdhc3Npc3RpdmUtdGV4dCc+RS1tYWlsICogPC9sYWJlbD5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz0nZm9ybS1jb250cm9sJyBmb3JtQ29udHJvbE5hbWU9J2VtYWlsJyBwbGFjZWhvbGRlcj0nRS1tYWlsIConIHR5cGU9J3RleHQnIC8+XHJcbiAgICAgICAgICA8cCAqbmdJZj0nIWlzVXNlclNpZ25lZEluJz5QbGVhc2UgaW5kaWNhdGUgdGhlIGVtYWlsIHVzZWQgZm9yIHlvdXIgTWFpbEV4IGxvZ2luIGlmIHlvdSBhbHJlYWR5IGhhdmUgYW4gYWNjb3VudDwvcD5cclxuICAgICAgICAgIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZT0nZW1haWwnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVGl0bGU9J2VtYWlsJz5cclxuICAgICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaGFzLWVycm9yJzogaXNDb250cm9sSW52YWxpZCgnc3ViamVjdCcpIH1cIiBjbGFzcz0nZm9ybS1zdWJqZWN0Jz5cclxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0nYXNzaXN0aXZlLXRleHQnPlN1YmplY3QgKjwvbGFiZWw+XHJcbiAgICAgICAgICA8aW5wdXQgY2xhc3M9J2Zvcm0tY29udHJvbCcgZm9ybUNvbnRyb2xOYW1lPSdzdWJqZWN0JyBwbGFjZWhvbGRlcj0nU3ViamVjdCAqJyB0eXBlPSd0ZXh0JyAvPlxyXG4gICAgICAgICAgPGFuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnkgW2Zvcm1Hcm91cF09J2Zvcm1Hcm91cCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtU3VibWl0dGVkXT0nZm9ybVN1Ym1pdHRlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xOYW1lPSdzdWJqZWN0J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFRpdGxlPSdzdWJqZWN0Jz5cclxuICAgICAgICAgIDwvYW5hdG9seS1pdGVtLXZhbGlkYXRpb24tc3VtbWFyeT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPSdjb2wtNic+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2hhcy1lcnJvcic6IGlzQ29udHJvbEludmFsaWQoJ21lc3NhZ2UnKSB9XCIgY2xhc3M9J2Zvcm0tbWVzc2FnZSc+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9J2Fzc2lzdGl2ZS10ZXh0Jz5NZXNzYWdlICo8L2xhYmVsPlxyXG4gICAgICAgICAgPHRleHRhcmVhIGZvcm1Db250cm9sTmFtZT0nbWVzc2FnZScgbmFtZT0nbWVzc2FnZScgcGxhY2Vob2xkZXI9J01lc3NhZ2UgIConIHJvd3M9JzQnXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0ndGV4dCc+PC90ZXh0YXJlYT5cclxuICAgICAgICAgIDxhbmF0b2x5LWl0ZW0tdmFsaWRhdGlvbi1zdW1tYXJ5IFtmb3JtR3JvdXBdPSdmb3JtR3JvdXAnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybVN1Ym1pdHRlZF09J2Zvcm1TdWJtaXR0ZWQnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sTmFtZT0nbWVzc2FnZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xUaXRsZT0nbWVzc2FnZSc+XHJcbiAgICAgICAgICA8L2FuYXRvbHktaXRlbS12YWxpZGF0aW9uLXN1bW1hcnk+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1mb290ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPSdzaG93QWN0aW9uQnV0dG9ucydcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmJ0bi1wcmltYXJ5XT0nIWZvcm1Hcm91cC5pbnZhbGlkJ1xyXG4gICAgICAgICAgICAgICAgICBjbGFzcz0nYnRuIGJ0bi1zdWNjZXNzJ1xyXG4gICAgICAgICAgICAgICAgICB0eXBlPSdzdWJtaXQnPlxyXG4gICAgICAgICAgICBTdWJtaXRcclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
@@ -6,7 +6,7 @@ import { NavigationEnd, NavigationStart, NavigationCancel, NavigationError, Rout
6
6
  import * as i1$1 from '@angular/common/http';
7
7
  import { HttpResponse, HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
8
8
  import { map, tap, mergeMap, catchError as catchError$1 } from 'rxjs/operators';
9
- import { Subject, filter, takeUntil, map as map$1, catchError, of, BehaviorSubject, timer, merge, fromEvent, forkJoin } from 'rxjs';
9
+ import { BehaviorSubject, Subject, filter, takeUntil, map as map$1, catchError, of, timer, merge, fromEvent, forkJoin } from 'rxjs';
10
10
  import * as i4 from '@azure/msal-angular';
11
11
  import { MSAL_GUARD_CONFIG, MsalGuard, MsalInterceptor, MSAL_INTERCEPTOR_CONFIG, MSAL_INSTANCE, MsalService, MsalBroadcastService, MsalModule } from '@azure/msal-angular';
12
12
  import { BrowserUtils, EventType, InteractionStatus, InteractionType, InteractionRequiredAuthError, PromptValue, PublicClientApplication, LogLevel } from '@azure/msal-browser';
@@ -674,12 +674,10 @@ class AppContextService extends ApiServiceBase {
674
674
  http;
675
675
  localStorage;
676
676
  sessionStorage;
677
- //Consts
678
677
  storageKeyName = 'appContext';
679
678
  subscription = null;
680
- successes = [];
681
679
  //Private Streams
682
- _updated = new Subject();
680
+ _updated = new BehaviorSubject(null);
683
681
  //Public Streams
684
682
  updated$ = this._updated.asObservable();
685
683
  constructor(http, localStorage, sessionStorage) {
@@ -689,64 +687,36 @@ class AppContextService extends ApiServiceBase {
689
687
  this.sessionStorage = sessionStorage;
690
688
  this.baseUrl = `${ApiUrl}/appContext`;
691
689
  }
690
+ fireUpdated(data) {
691
+ if (!data) {
692
+ return;
693
+ }
694
+ let now = new Date();
695
+ console.log('AppContext has been updated at ' + now);
696
+ this._updated.next(data);
697
+ }
692
698
  //Session
693
- getCurrentFromSession() {
699
+ getCurrent4Session() {
694
700
  return this.sessionStorage.getObject(this.storageKeyName);
695
701
  }
696
- setCurrentFromSession(value) {
702
+ setCurrent2Session(value) {
697
703
  this.sessionStorage.setObject(this.storageKeyName, value);
698
704
  }
699
- updateCurrentIfExpired() {
700
- let context = this.getCurrentFromSession();
701
- if (!context) {
702
- return;
703
- }
704
- let shouldBeUpdated = false;
705
- let lr = context.lastRequested;
706
- if (lr) {
707
- let now = new Date();
708
- let lastRequested = new Date(context.lastRequested);
709
- let in3Mins = new Date(lastRequested.getFullYear(), lastRequested.getMonth(), lastRequested.getDate(), lastRequested.getHours(), lastRequested.getMinutes() + 3, 0, 0);
710
- if (in3Mins.getTime() < now.getTime()) {
711
- shouldBeUpdated = true;
712
- }
713
- }
714
- else {
715
- shouldBeUpdated = true;
716
- }
717
- if (shouldBeUpdated) {
718
- this.updateCurrent();
719
- }
720
- }
721
705
  dataReceived(data) {
722
706
  this.current = data;
723
- for (let i = 0; i < this.successes.length; i++) {
724
- let success = this.successes[i];
725
- if (success) {
726
- success(data);
727
- }
728
- }
729
- this.successes = [];
730
707
  this.subscription.unsubscribe();
731
708
  this.subscription = null;
732
- if (data) {
733
- let now = new Date();
734
- console.log('AppContext has been updated at ' + now);
735
- this._updated.next(data);
736
- }
737
709
  }
738
710
  getCurrentPrivate(success = null, getCachedIfExist = true) {
739
711
  if (getCachedIfExist) {
740
- let context = this.getCurrentFromSession();
712
+ let context = this.getCurrent4Session();
741
713
  if (context != null) {
742
- if (success)
714
+ if (success) {
743
715
  success(context);
716
+ }
744
717
  return;
745
718
  }
746
719
  }
747
- if (success) {
748
- this.successes.push(success);
749
- }
750
720
  if (this.subscription != null) {
751
721
  return;
752
722
  }
@@ -758,23 +728,34 @@ class AppContextService extends ApiServiceBase {
758
728
  }
759
729
  });
760
730
  }
731
+ updateCurrentIfExpired() {
732
+ let context = this.getCurrent4Session();
733
+ if (!context) {
734
+ return;
735
+ }
736
+ let shouldBeUpdated = false;
737
+ let lr = context.lastRequested;
738
+ if (lr) {
739
+ let now = new Date();
740
+ let lastRequested = new Date(context.lastRequested);
741
+ let in3Mins = new Date(lastRequested.getFullYear(), lastRequested.getMonth(), lastRequested.getDate(), lastRequested.getHours(), lastRequested.getMinutes() + 3, 0, 0);
742
+ if (in3Mins.getTime() < now.getTime()) {
743
+ shouldBeUpdated = true;
744
+ }
745
+ }
746
+ else {
747
+ shouldBeUpdated = true;
748
+ }
749
+ if (shouldBeUpdated) {
750
+ this.updateCurrent();
751
+ }
752
+ }
761
753
  //Public
762
754
  init(context) {
763
755
  this.current = context;
764
756
  }
765
- getLatestCurrent(success = null) {
766
- this.getCurrentPrivate(success, false);
767
- }
768
- getCurrent(success = null) {
769
- this.getCurrentPrivate(success, true);
770
- }
771
757
  updateCurrent(success = null) {
772
- //VadimOS: make dropping current & isAdmin throw 403
773
- //this.clearCurrent();
774
- this.getLatestCurrent(success);
775
- }
776
- clearCurrent() {
777
- this.sessionStorage.remove(this.storageKeyName);
758
+ this.getCurrentPrivate(success, false);
778
759
  }
779
760
  //Storage
780
761
  clearLocalStorage() {
@@ -790,10 +771,11 @@ class AppContextService extends ApiServiceBase {
790
771
  //current
791
772
  get current() {
792
773
  this.updateCurrentIfExpired();
793
- return this.getCurrentFromSession();
774
+ return this.getCurrent4Session();
794
775
  }
795
776
  set current(value) {
796
- this.setCurrentFromSession(value);
777
+ this.setCurrent2Session(value);
778
+ this.fireUpdated(value);
797
779
  }
798
780
  //currentUser
799
781
  get currentUser() {
@@ -1104,18 +1086,29 @@ class AuthService extends ApiServiceBase {
1104
1086
  }
1105
1087
  logout(popup) {
1106
1088
  let activeAccount = this.getActiveAccount();
1107
- if (!activeAccount) {
1108
- return;
1109
- }
1110
1089
  if (this.isPopup(popup)) {
1111
- this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).subscribe(() => {
1112
- this.appContext.clearWebStorage();
1113
- });
1090
+ if (activeAccount) {
1091
+ this.msalService.logoutPopup({ account: activeAccount, mainWindowRedirectUri: "/" }).subscribe(() => {
1092
+ this.appContext.clearWebStorage();
1093
+ });
1094
+ }
1095
+ else {
1096
+ this.msalService.logoutPopup({ mainWindowRedirectUri: "/" }).subscribe(() => {
1097
+ this.appContext.clearWebStorage();
1098
+ });
1099
+ }
1114
1100
  }
1115
1101
  else {
1116
- this.msalService.logoutRedirect({ account: activeAccount }).pipe(map$1(() => {
1117
- this.appContext.clearWebStorage();
1118
- }));
1102
+ if (activeAccount) {
1103
+ this.msalService.logoutRedirect({ account: activeAccount }).pipe(map$1(() => {
1104
+ this.appContext.clearWebStorage();
1105
+ }));
1106
+ }
1107
+ else {
1108
+ this.msalService.logoutRedirect().pipe(map$1(() => {
1109
+ this.appContext.clearWebStorage();
1110
+ }));
1111
+ }
1119
1112
  }
1120
1113
  }
1121
1114
  isUserAuthenticated() {
@@ -3223,11 +3216,14 @@ class BuyAccessButtonComponent {
3223
3216
  this.appContext = appContext;
3224
3217
  }
3225
3218
  ngOnInit() {
3226
- this.appContext.getCurrent((current) => {
3227
- this.isUserSignedIn = current.isUserSignedIn;
3219
+ this.appContext.updated$.subscribe((context) => {
3220
+ if (!context) {
3221
+ return;
3222
+ }
3223
+ this.isUserSignedIn = context.isUserSignedIn;
3228
3224
  if (this.isUserSignedIn) {
3229
- this.currentPlan = current.account.billingPlan;
3230
- this.currentPlanTitle = current.account.billingPlanAsString;
3225
+ this.currentPlan = context.account.billingPlan;
3226
+ this.currentPlanTitle = context.account.billingPlanAsString;
3231
3227
  }
3232
3228
  this.contextUpdated = true;
3233
3229
  });
@@ -3337,13 +3333,16 @@ class SubscribePlanButtonComponent {
3337
3333
  this.appContext = appContext;
3338
3334
  }
3339
3335
  ngOnInit() {
3340
- this.appContext.getCurrent((current) => {
3341
- this.isUserSignedIn = current.isUserSignedIn;
3336
+ this.appContext.updated$.subscribe((context) => {
3337
+ if (!context) {
3338
+ return;
3339
+ }
3340
+ this.isUserSignedIn = context.isUserSignedIn;
3342
3341
  if (this.isUserSignedIn) {
3343
- this.currentPlan = current.account.billingPlan;
3344
- this.currentPlanTitle = current.account.billingPlanAsString;
3345
- this.requestedPlan = current.account.requestedBillingPlan;
3346
- this.requestedPlanTitle = current.account.requestedBillingPlanAsString;
3342
+ this.currentPlan = context.account.billingPlan;
3343
+ this.currentPlanTitle = context.account.billingPlanAsString;
3344
+ this.requestedPlan = context.account.requestedBillingPlan;
3345
+ this.requestedPlanTitle = context.account.requestedBillingPlanAsString;
3347
3346
  }
3348
3347
  this.contextUpdated = true;
3349
3348
  });
@@ -5049,8 +5048,18 @@ class ContactUsForm extends BaseEditComponent {
5049
5048
  }
5050
5049
  ngOnInit() {
5051
5050
  this.createFormGroup();
5052
- this.appContext.getCurrent(context => {
5053
- this.setContext(context);
5051
+ this.appContext.updated$.subscribe((context) => {
5052
+ if (!context) {
5053
+ return;
5054
+ }
5055
+ this.isUserSignedIn = context.isUserSignedIn;
5056
+ this.reCaptchaSiteKey = context.reCaptchaSiteKeyV3;
5057
+ this.selectedTopic = this.topicList[3].value;
5058
+ this.setFormValue('topic', this.selectedTopic);
5059
+ if (this.isUserSignedIn) {
5060
+ this.setFormValue('name', context.user.displayNameOrFullName);
5061
+ this.setFormValue('email', context.user.email);
5062
+ }
5054
5063
  });
5055
5064
  }
5056
5065
  createFormGroup() {
@@ -5062,16 +5071,6 @@ class ContactUsForm extends BaseEditComponent {
5062
5071
  message: new FormControl('', [Validators.required])
5063
5072
  });
5064
5073
  }
5065
- setContext(context) {
5066
- this.isUserSignedIn = context.isUserSignedIn;
5067
- this.reCaptchaSiteKey = context.reCaptchaSiteKeyV3;
5068
- this.selectedTopic = this.topicList[3].value;
5069
- this.setFormValue('topic', this.selectedTopic);
5070
- if (this.isUserSignedIn) {
5071
- this.setFormValue('name', context.user.displayNameOrFullName);
5072
- this.setFormValue('email', context.user.email);
5073
- }
5074
- }
5075
5074
  isValid() {
5076
5075
  return this.formGroup.valid;
5077
5076
  }