valtech-components 4.0.166 → 4.0.168

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.
@@ -148,6 +148,9 @@ export class TicketCardComponent {
148
148
  folio: p.folio,
149
149
  folioLabel: p.shareFolioLabel,
150
150
  buyerName: p.buyerName,
151
+ eventDate: p.shareEventDate,
152
+ eventLocation: p.shareEventLocation,
153
+ scanHint: p.shareScanHint,
151
154
  };
152
155
  }
153
156
  async copyToClipboard(config, p) {
@@ -301,4 +304,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
301
304
  </div>
302
305
  `, styles: ["@charset \"UTF-8\";:host{display:block}.ticket-card{display:flex;flex-direction:column;align-items:center;gap:12px;padding:20px;border:1px solid var(--ion-color-light-shade, #e0e0e0);border-radius:16px;background:var(--ion-card-background, #ffffff);max-width:320px;margin:0 auto}.ticket-card__title{font-size:1rem;font-weight:700;color:var(--ion-color-dark);text-align:center}.ticket-card__qr{display:flex;align-items:center;justify-content:center;min-height:200px}.ticket-card__qr-loading{display:flex;align-items:center;justify-content:center;width:200px;height:200px}.ticket-card__qr-fallback{font-family:monospace;font-size:.75rem;color:var(--ion-color-medium);word-break:break-all;text-align:center;padding:16px}.ticket-card__meta{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center}.ticket-card__folio{font-size:1rem;font-weight:700;color:var(--ion-color-dark)}.ticket-card__buyer{font-size:.875rem;color:var(--ion-color-medium)}.ticket-card__badge{margin-top:4px;font-size:.75rem;font-weight:600;padding:3px 12px;border-radius:999px;background:var(--ion-color-medium);color:var(--ion-color-medium-contrast, #fff);white-space:nowrap}.ticket-card__badge[data-status=sold]{background:var(--ion-color-success, #2dd36f);color:var(--ion-color-success-contrast, #fff)}.ticket-card__badge[data-status=checkedIn]{background:var(--ion-color-medium);color:var(--ion-color-medium-contrast, #fff)}.ticket-card__actions{width:100%;display:flex;flex-direction:column;gap:8px}.ticket-card__actions ion-button{--border-radius: 10px;margin:0}\n"] }]
303
306
  }], ctorParameters: () => [] });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy90aWNrZXQtY2FyZC90aWNrZXQtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQXVESCxNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QjtRQWpCQSx5Q0FBeUM7UUFDaEMsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXNCLENBQUM7UUFFOUMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FB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UUFDN0IsR0FBRyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsT0FBTyxDQUFDLENBQVc7UUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLE9BQU87WUFDTCxFQUFFLEVBQUUsQ0FBQztZQUNMLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7WUFDNUIsWUFBWSxFQUFFLEtBQUs7WUFDbkIsU0FBUyxFQUFFLEtBQUs7WUFDaEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxJQUFJO1lBQzdCLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQ3BELFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQixVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksSUFBSTtTQUNoRCxDQUFDO0lBQ0osQ0FBQzsrR0EzTFUsbUJBQW1CO21HQUFuQixtQkFBbUIsOE1BbERwQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ1Qsa21EQWhEUyxZQUFZLCtCQUFFLFNBQVMsb1BBQUUsT0FBTywySkFBRSxVQUFVLHlHQUFFLGVBQWU7OzRGQW1ENUQsbUJBQW1CO2tCQXREL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDLFlBQzlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStDVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGRvd25sb2FkT3V0bGluZSwgc2hhcmVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuXG5pbXBvcnQgeyBRckNvZGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9xci1jb2RlL3FyLWNvZGUuY29tcG9uZW50JztcbmltcG9ydCB7IFFyQ29kZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXRvbXMvcXItY29kZS90eXBlcyc7XG5pbXBvcnQgeyBRckdlbmVyYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9xci1nZW5lcmF0b3IvcXItZ2VuZXJhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXJSZXN1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9xci1nZW5lcmF0b3IvdHlwZXMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RvYXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGlja2V0Q2FyZEltYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3RpY2tldC1jYXJkLWltYWdlL3RpY2tldC1jYXJkLWltYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGlja2V0Q2FyZE1ldGFkYXRhLCBUaWNrZXRDYXJkU3RhdHVzIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBUSUNLRVRfQ0FSRF9JMThOIH0gZnJvbSAnLi90aWNrZXQtY2FyZC5pMThuJztcblxuLyoqXG4gKiB2YWwtdGlja2V0LWNhcmRcbiAqXG4gKiBUYXJqZXRhIHByZXNlbnRhY2lvbmFsIGRlIHVuYSBlbnRyYWRhIGRlIGJpbmdvOiBtdWVzdHJhIGVsIFFSIGVzY2FuZWFibGVcbiAqIChnZW5lcmFkbyBkZWwgYHFyVG9rZW5gIG9wYWNvIGZpcm1hZG8gdsOtYSBgUXJHZW5lcmF0b3JTZXJ2aWNlYCksIGVsIGZvbGlvLCBlbFxuICogbm9tYnJlIGRlbCBjb21wcmFkb3IgKHNpIGhheSkgeSB1biBiYWRnZSBkZSBlc3RhZG8gKHZlbmRpZGEgLyBjYW5qZWFkYSkuXG4gKlxuICogRXMgbGEgcGllemEgcXVlIGVsIHZlbmRlZG9yIGxlIGVudHJlZ2EgYWwgY29tcHJhZG9yIHRyYXMgbGEgdmVudGEgeSBxdWUgbGFcbiAqIHRhcXVpbGxhIGVzY2FuZWEgcGFyYSBjYW5qZWFyLiBPYmplY3QtZmlyc3QgKGBpbnB1dCgpYCBzaWduYWwpLCBpMThuXG4gKiBhdXRvLXJlZ2lzdHJhZG8gKG5hbWVzcGFjZSBgVGlja2V0Q2FyZGApLiBFc3RhZG9zIG5lZ2F0aXZvcy9uZXV0cm9zIGVuIGdyaXNcbiAqIG11dGVkIChjb252ZW5jacOzbiBkZWwgZmFjdG9yeSDigJQgc2luIHJvam8gZGUgYWxhcm1hKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHZhbC10aWNrZXQtY2FyZCBbcHJvcHNdPVwieyBxclRva2VuOiB0aWNrZXQucXJUb2tlbiwgZm9saW86IHRpY2tldC5mb2xpbyxcbiAqICAgYnV5ZXJOYW1lOiB0aWNrZXQuY29tcHJhZG9yTm9tYnJlLCBzdGF0dXM6ICdzb2xkJywgc2hvd1NoYXJlOiB0cnVlIH1cIiAvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC10aWNrZXQtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU3Bpbm5lciwgUXJDb2RlQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRcIj5cbiAgICAgIEBpZiAocHJvcHMoKS50aXRsZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX3RpdGxlXCI+e3sgcHJvcHMoKS50aXRsZSB9fTwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX3FyXCI+XG4gICAgICAgIEBpZiAocXIoKTsgYXMgcSkge1xuICAgICAgICAgIDx2YWwtcXItY29kZSBbcHJvcHNdPVwicXJQcm9wcyhxKVwiIC8+XG4gICAgICAgIH0gQGVsc2UgaWYgKGZhaWxlZCgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1jYXJkX19xci1mYWxsYmFja1wiPnt7IHRva2VuU2hvcnQoKSB9fTwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX3FyLWxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiBhcmlhLWxhYmVsPVwiR2VuZXJhbmRvIFFSXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY2FyZF9fbWV0YVwiPlxuICAgICAgICBAaWYgKGZvbGlvVGV4dCgpOyBhcyBmKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1jYXJkX19mb2xpb1wiPnt7IGYgfX08L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHByb3BzKCkuYnV5ZXJOYW1lKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1jYXJkX19idXllclwiPnt7IHByb3BzKCkuYnV5ZXJOYW1lIH19PC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzdGF0dXNMYWJlbCgpOyBhcyBzKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aWNrZXQtY2FyZF9fYmFkZ2VcIiBbYXR0ci5kYXRhLXN0YXR1c109XCJzdGF0dXMoKVwiPnt7IHMgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAaWYgKChwcm9wcygpLnNob3dEb3dubG9hZCB8fCBwcm9wcygpLnNob3dTaGFyZSkgJiYgcXIoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX2FjdGlvbnNcIj5cbiAgICAgICAgICBAaWYgKHByb3BzKCkuc2hvd0Rvd25sb2FkKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGV4cGFuZD1cImJsb2NrXCIgW2Rpc2FibGVkXT1cImRvd25sb2FkaW5nKClcIiAoY2xpY2spPVwiZG93bmxvYWRDYXJkKClcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJkb3dubG9hZC1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgLz5cbiAgICAgICAgICAgICAge3sgcHJvcHMoKS5kb3dubG9hZExhYmVsIHx8IHQoJ2Rvd25sb2FkJykgfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChwcm9wcygpLnNob3dTaGFyZSkge1xuICAgICAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cIm91dGxpbmVcIiBleHBhbmQ9XCJibG9ja1wiIFtkaXNhYmxlZF09XCJzaGFyaW5nKClcIiAoY2xpY2spPVwic2hhcmVDYXJkKClcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJzaGFyZS1vdXRsaW5lXCIgc2xvdD1cInN0YXJ0XCIgLz5cbiAgICAgICAgICAgICAge3sgcHJvcHMoKS5zaGFyZUxhYmVsIHx8IHQoJ3NoYXJlJykgfX1cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi90aWNrZXQtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUaWNrZXRDYXJkQ29tcG9uZW50IHtcbiAgLyoqIFByb3BzIG9iamVjdC1maXJzdCBkZWwgY29tcG9uZW50ZS4gKi9cbiAgcmVhZG9ubHkgcHJvcHMgPSBpbnB1dC5yZXF1aXJlZDxUaWNrZXRDYXJkTWV0YWRhdGE+KCk7XG5cbiAgcHJpdmF0ZSBxclNlcnZpY2UgPSBpbmplY3QoUXJHZW5lcmF0b3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0aWNrZXRDYXJkSW1hZ2VTZXJ2aWNlID0gaW5qZWN0KFRpY2tldENhcmRJbWFnZVNlcnZpY2UpO1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIHRvYXN0ID0gaW5qZWN0KFRvYXN0U2VydmljZSk7XG5cbiAgLyoqIFFSIGdlbmVyYWRvIChudWxsIG1pZW50cmFzIGNhcmdhIG8gc2kgZmFsbMOzKS4gKi9cbiAgcmVhZG9ubHkgcXIgPSBzaWduYWw8UXJSZXN1bHQgfCBudWxsPihudWxsKTtcbiAgLyoqIEZhbGzDsyBsYSBnZW5lcmFjacOzbiBkZWwgUVIg4oaSIGZhbGxiYWNrIGFsIHRva2VuIGNvcnRvLiAqL1xuICByZWFkb25seSBmYWlsZWQgPSBzaWduYWwoZmFsc2UpO1xuICAvKiogVHJ1ZSBtaWVudHJhcyBzZSBnZW5lcmEgeSBjb21wYXJ0ZSBsYSB0YXJqZXRhIGJyYW5kZWQuICovXG4gIHJlYWRvbmx5IHNoYXJpbmcgPSBzaWduYWwoZmFsc2UpO1xuICAvKiogVHJ1ZSBtaWVudHJhcyBzZSBnZW5lcmEgeSBkZXNjYXJnYSBsYSB0YXJqZXRhIGJyYW5kZWQuICovXG4gIHJlYWRvbmx5IGRvd25sb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhZGRJY29ucyh7IHNoYXJlT3V0bGluZSwgZG93bmxvYWRPdXRsaW5lIH0pO1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKCdUaWNrZXRDYXJkJywgVElDS0VUX0NBUkRfSTE4Tik7XG5cbiAgICAvLyBSZWdlbmVyYSBlbCBRUiBjdWFuZG8gY2FtYmlhIGVsIHRva2VuIG8gZWwgdGFtYcOxby5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5wcm9wcygpLnFyVG9rZW47XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLnByb3BzKCkucXJTaXplID8/IDIwMDtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgIHRoaXMucXIuc2V0KG51bGwpO1xuICAgICAgICAgIHRoaXMuZmFpbGVkLnNldChmYWxzZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgdGhpcy5nZW5lcmF0ZSh0b2tlbiwgc2l6ZSk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2VuZXJhdGUoZGF0YTogc3RyaW5nLCBzaXplOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmZhaWxlZC5zZXQoZmFsc2UpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnFyU2VydmljZS5nZW5lcmF0ZSh7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIHdpZHRoOiBzaXplLFxuICAgICAgICBoZWlnaHQ6IHNpemUsXG4gICAgICAgIG1hcmdpbjogMSxcbiAgICAgICAgZG90c1N0eWxlOiAnc3F1YXJlJyxcbiAgICAgICAgZG90c0NvbG9yOiAnIzAwMDAwMCcsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgICAgICBlcnJvckNvcnJlY3Rpb25MZXZlbDogJ00nLFxuICAgICAgICBmb3JtYXQ6ICdwbmcnLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnFyLnNldChyZXN1bHQpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2luIHRvYXN0L3Rocm93IOKAlCBlbCBmYWxsYmFjayBtdWVzdHJhIGVsIHRva2VuIGNvcnRvLiBFbCBjb25zdW1lclxuICAgICAgLy8gc2lndWUgcHVkaWVuZG8gY2FuamVhciB0aXBlYW5kby9lc2NhbmVhbmRvIHNpIGhhY2UgZmFsdGEuXG4gICAgICB0aGlzLnFyLnNldChudWxsKTtcbiAgICAgIHRoaXMuZmFpbGVkLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnVGlja2V0Q2FyZCcpO1xuICB9XG5cbiAgcmVhZG9ubHkgc3RhdHVzID0gY29tcHV0ZWQ8VGlja2V0Q2FyZFN0YXR1cz4oKCkgPT4gdGhpcy5wcm9wcygpLnN0YXR1cyA/PyAnbmV1dHJhbCcpO1xuXG4gIHJlYWRvbmx5IHRva2VuU2hvcnQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdGsgPSB0aGlzLnByb3BzKCkucXJUb2tlbiA/PyAnJztcbiAgICByZXR1cm4gdGsubGVuZ3RoID4gMTYgPyBgJHt0ay5zbGljZSgwLCAxNil94oCmYCA6IHRrO1xuICB9KTtcblxuICByZWFkb25seSBmb2xpb1RleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBmb2xpbyA9IHRoaXMucHJvcHMoKS5mb2xpbztcbiAgICBpZiAoZm9saW8gPT09IHVuZGVmaW5lZCB8fCBmb2xpbyA9PT0gbnVsbCB8fCBmb2xpbyA9PT0gJycpIHJldHVybiAnJztcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMucHJvcHMoKS5mb2xpb0xhYmVsID8/IHRoaXMudCgnZm9saW8nKTtcbiAgICByZXR1cm4gYCR7bGFiZWx9ICMke2ZvbGlvfWA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHN0YXR1c0xhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5zdGF0dXMoKTtcbiAgICBpZiAoc3RhdHVzID09PSAnc29sZCcpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzKCkuc3RhdHVzU29sZExhYmVsID8/IHRoaXMudCgnc3RhdHVzU29sZCcpO1xuICAgIH1cbiAgICBpZiAoc3RhdHVzID09PSAnY2hlY2tlZEluJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMoKS5zdGF0dXNDaGVja2VkSW5MYWJlbCA/PyB0aGlzLnQoJ3N0YXR1c0NoZWNrZWRJbicpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH0pO1xuXG4gIGFzeW5jIHNoYXJlQ2FyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBxID0gdGhpcy5xcigpO1xuICAgIGlmICghcSkgcmV0dXJuO1xuICAgIGNvbnN0IHAgPSB0aGlzLnByb3BzKCk7XG4gICAgdGhpcy5zaGFyaW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5idWlsZEltYWdlQ29uZmlnKHEsIHApO1xuICAgICAgY29uc3Qgc2hhcmVkID0gYXdhaXQgdGhpcy50aWNrZXRDYXJkSW1hZ2VTZXJ2aWNlLnNoYXJlKGNvbmZpZywgcC50aXRsZSB8fCBwLnNoYXJlQnJhbmROYW1lKTtcbiAgICAgIGlmICghc2hhcmVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGNvbmZpZywgcCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc2hhcmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkQ2FyZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBxID0gdGhpcy5xcigpO1xuICAgIGlmICghcSkgcmV0dXJuO1xuICAgIGNvbnN0IHAgPSB0aGlzLnByb3BzKCk7XG4gICAgdGhpcy5kb3dubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudHJpZ2dlckRvd25sb2FkKHRoaXMuYnVpbGRJbWFnZUNvbmZpZyhxLCBwKSwgcCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSW1hZ2VDb25maWcocTogUXJSZXN1bHQsIHA6IFRpY2tldENhcmRNZXRhZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICBxckRhdGFVcmw6IHEuZGF0YVVybCxcbiAgICAgIGxvZ29Vcmw6IHAuc2hhcmVMb2dvVXJsLFxuICAgICAgYnJhbmRDb2xvcjogcC5zaGFyZUJyYW5kQ29sb3IsXG4gICAgICBicmFuZENvbG9yVG86IHAuc2hhcmVCcmFuZENvbG9yVG8sXG4gICAgICBicmFuZE5hbWU6IHAuc2hhcmVCcmFuZE5hbWUsXG4gICAgICBmb2xpbzogcC5mb2xpbyxcbiAgICAgIGZvbGlvTGFiZWw6IHAuc2hhcmVGb2xpb0xhYmVsLFxuICAgICAgYnV5ZXJOYW1lOiBwLmJ1eWVyTmFtZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb3B5VG9DbGlwYm9hcmQoXG4gICAgY29uZmlnOiBQYXJhbWV0ZXJzPHR5cGVvZiB0aGlzLnRpY2tldENhcmRJbWFnZVNlcnZpY2UuZ2VuZXJhdGU+WzBdLFxuICAgIHA6IFRpY2tldENhcmRNZXRhZGF0YVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBJbnRlbnRhIGNvcGlhciBsYSBpbWFnZW4gYnJhbmRlZCBhbCBjbGlwYm9hcmQgKENocm9tZS9FZGdlL1NhZmFyaSBkZXNrdG9wKS5cbiAgICBpZiAodHlwZW9mIENsaXBib2FyZEl0ZW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgdGhpcy50aWNrZXRDYXJkSW1hZ2VTZXJ2aWNlLmdlbmVyYXRlKGNvbmZpZyk7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW25ldyBDbGlwYm9hcmRJdGVtKHsgJ2ltYWdlL3BuZyc6IGJsb2IgfSldKTtcbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHsgbWVzc2FnZTogdGhpcy50KCdjb3BpZWQnKSwgZHVyYXRpb246IDIwMDAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBDbGlwYm9hcmRJdGVtIG5vIHNvcG9ydGFkbyBvIHBlcm1pc28gZGVuZWdhZG8g4oaSIGNhZXIgYSB0ZXh0b1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGYWxsYmFjazogY29waWEgVVJMIG8gdGV4dG8gZm9saW9cbiAgICBjb25zdCB0ZXh0ID0gKChwLnNoYXJlVXJsID8/IHRoaXMuZm9saW9UZXh0KCkpIHx8IHAuc2hhcmVCcmFuZE5hbWUpID8/ICcnO1xuICAgIGlmICghdGV4dCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7IG1lc3NhZ2U6IHRoaXMudChwLnNoYXJlVXJsID8gJ2NvcGllZFVybCcgOiAnY29waWVkJyksIGR1cmF0aW9uOiAyMDAwIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gY2xpcGJvYXJkIG5vIGRpc3BvbmlibGUg4oCUIHNpbGVuY2lvc29cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyaWdnZXJEb3dubG9hZChcbiAgICBjb25maWc6IFBhcmFtZXRlcnM8dHlwZW9mIHRoaXMudGlja2V0Q2FyZEltYWdlU2VydmljZS5nZW5lcmF0ZT5bMF0sXG4gICAgcDogVGlja2V0Q2FyZE1ldGFkYXRhXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLnRpY2tldENhcmRJbWFnZVNlcnZpY2UuZ2VuZXJhdGUoY29uZmlnKTtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYS5ocmVmID0gdXJsO1xuICAgIGEuZG93bmxvYWQgPSBgZW50cmFkYS0ke3AuZm9saW8gPz8gJ2JpbmdvJ30ucG5nYDtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xuICAgIGEuY2xpY2soKTtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfVxuXG4gIHFyUHJvcHMocTogUXJSZXN1bHQpOiBRckNvZGVNZXRhZGF0YSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgcXI6IHEsXG4gICAgICBkaXNwbGF5U2l6ZTogcC5xclNpemUgPz8gMjAwLFxuICAgICAgc2hvd0Rvd25sb2FkOiBmYWxzZSxcbiAgICAgIHNob3dTaGFyZTogZmFsc2UsXG4gICAgICBzaG93Qm9yZGVyOiBmYWxzZSxcbiAgICAgIGFsdDogdGhpcy5mb2xpb1RleHQoKSB8fCAnUVInLFxuICAgICAgZG93bmxvYWRMYWJlbDogcC5kb3dubG9hZExhYmVsID8/IHRoaXMudCgnZG93bmxvYWQnKSxcbiAgICAgIHNoYXJlTGFiZWw6IHRoaXMudCgnc2hhcmUnKSxcbiAgICAgIHNoYXJlVGl0bGU6IHAudGl0bGUgfHwgdGhpcy5mb2xpb1RleHQoKSB8fCAnUVInLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy90aWNrZXQtY2FyZC90aWNrZXQtY2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBRXpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFdkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQXVESCxNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QjtRQWpCQSx5Q0FBeUM7UUFDaEMsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXNCLENBQUM7UUFFOUMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FB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O0dBK0NUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJb25CdXR0b24sIElvbkljb24sIElvblNwaW5uZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IGFkZEljb25zIH0gZnJvbSAnaW9uaWNvbnMnO1xuaW1wb3J0IHsgZG93bmxvYWRPdXRsaW5lLCBzaGFyZU91dGxpbmUgfSBmcm9tICdpb25pY29ucy9pY29ucyc7XG5cbmltcG9ydCB7IFFyQ29kZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3FyLWNvZGUvcXItY29kZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUXJDb2RlTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9hdG9tcy9xci1jb2RlL3R5cGVzJztcbmltcG9ydCB7IFFyR2VuZXJhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3FyLWdlbmVyYXRvci9xci1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBRclJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3FyLWdlbmVyYXRvci90eXBlcyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XG5pbXBvcnQgeyBUaWNrZXRDYXJkSW1hZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGlja2V0LWNhcmQtaW1hZ2UvdGlja2V0LWNhcmQtaW1hZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBUaWNrZXRDYXJkTWV0YWRhdGEsIFRpY2tldENhcmRTdGF0dXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRJQ0tFVF9DQVJEX0kxOE4gfSBmcm9tICcuL3RpY2tldC1jYXJkLmkxOG4nO1xuXG4vKipcbiAqIHZhbC10aWNrZXQtY2FyZFxuICpcbiAqIFRhcmpldGEgcHJlc2VudGFjaW9uYWwgZGUgdW5hIGVudHJhZGEgZGUgYmluZ286IG11ZXN0cmEgZWwgUVIgZXNjYW5lYWJsZVxuICogKGdlbmVyYWRvIGRlbCBgcXJUb2tlbmAgb3BhY28gZmlybWFkbyB2w61hIGBRckdlbmVyYXRvclNlcnZpY2VgKSwgZWwgZm9saW8sIGVsXG4gKiBub21icmUgZGVsIGNvbXByYWRvciAoc2kgaGF5KSB5IHVuIGJhZGdlIGRlIGVzdGFkbyAodmVuZGlkYSAvIGNhbmplYWRhKS5cbiAqXG4gKiBFcyBsYSBwaWV6YSBxdWUgZWwgdmVuZGVkb3IgbGUgZW50cmVnYSBhbCBjb21wcmFkb3IgdHJhcyBsYSB2ZW50YSB5IHF1ZSBsYVxuICogdGFxdWlsbGEgZXNjYW5lYSBwYXJhIGNhbmplYXIuIE9iamVjdC1maXJzdCAoYGlucHV0KClgIHNpZ25hbCksIGkxOG5cbiAqIGF1dG8tcmVnaXN0cmFkbyAobmFtZXNwYWNlIGBUaWNrZXRDYXJkYCkuIEVzdGFkb3MgbmVnYXRpdm9zL25ldXRyb3MgZW4gZ3Jpc1xuICogbXV0ZWQgKGNvbnZlbmNpw7NuIGRlbCBmYWN0b3J5IOKAlCBzaW4gcm9qbyBkZSBhbGFybWEpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8dmFsLXRpY2tldC1jYXJkIFtwcm9wc109XCJ7IHFyVG9rZW46IHRpY2tldC5xclRva2VuLCBmb2xpbzogdGlja2V0LmZvbGlvLFxuICogICBidXllck5hbWU6IHRpY2tldC5jb21wcmFkb3JOb21icmUsIHN0YXR1czogJ3NvbGQnLCBzaG93U2hhcmU6IHRydWUgfVwiIC8+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLXRpY2tldC1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TcGlubmVyLCBRckNvZGVDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY2FyZFwiPlxuICAgICAgQGlmIChwcm9wcygpLnRpdGxlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY2FyZF9fdGl0bGVcIj57eyBwcm9wcygpLnRpdGxlIH19PC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY2FyZF9fcXJcIj5cbiAgICAgICAgQGlmIChxcigpOyBhcyBxKSB7XG4gICAgICAgICAgPHZhbC1xci1jb2RlIFtwcm9wc109XCJxclByb3BzKHEpXCIgLz5cbiAgICAgICAgfSBAZWxzZSBpZiAoZmFpbGVkKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX3FyLWZhbGxiYWNrXCI+e3sgdG9rZW5TaG9ydCgpIH19PC9kaXY+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY2FyZF9fcXItbG9hZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIGFyaWEtbGFiZWw9XCJHZW5lcmFuZG8gUVJcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRpY2tldC1jYXJkX19tZXRhXCI+XG4gICAgICAgIEBpZiAoZm9saW9UZXh0KCk7IGFzIGYpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX2ZvbGlvXCI+e3sgZiB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocHJvcHMoKS5idXllck5hbWUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWNhcmRfX2J1eWVyXCI+e3sgcHJvcHMoKS5idXllck5hbWUgfX08L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKHN0YXR1c0xhYmVsKCk7IGFzIHMpIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpY2tldC1jYXJkX19iYWRnZVwiIFthdHRyLmRhdGEtc3RhdHVzXT1cInN0YXR1cygpXCI+e3sgcyB9fTwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAoKHByb3BzKCkuc2hvd0Rvd25sb2FkIHx8IHByb3BzKCkuc2hvd1NoYXJlKSAmJiBxcigpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtY2FyZF9fYWN0aW9uc1wiPlxuICAgICAgICAgIEBpZiAocHJvcHMoKS5zaG93RG93bmxvYWQpIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJvdXRsaW5lXCIgZXhwYW5kPVwiYmxvY2tcIiBbZGlzYWJsZWRdPVwiZG93bmxvYWRpbmcoKVwiIChjbGljayk9XCJkb3dubG9hZENhcmQoKVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImRvd25sb2FkLW91dGxpbmVcIiBzbG90PVwic3RhcnRcIiAvPlxuICAgICAgICAgICAgICB7eyBwcm9wcygpLmRvd25sb2FkTGFiZWwgfHwgdCgnZG93bmxvYWQnKSB9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHByb3BzKCkuc2hvd1NoYXJlKSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBmaWxsPVwib3V0bGluZVwiIGV4cGFuZD1cImJsb2NrXCIgW2Rpc2FibGVkXT1cInNoYXJpbmcoKVwiIChjbGljayk9XCJzaGFyZUNhcmQoKVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInNoYXJlLW91dGxpbmVcIiBzbG90PVwic3RhcnRcIiAvPlxuICAgICAgICAgICAgICB7eyBwcm9wcygpLnNoYXJlTGFiZWwgfHwgdCgnc2hhcmUnKSB9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL3RpY2tldC1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRpY2tldENhcmRDb21wb25lbnQge1xuICAvKiogUHJvcHMgb2JqZWN0LWZpcnN0IGRlbCBjb21wb25lbnRlLiAqL1xuICByZWFkb25seSBwcm9wcyA9IGlucHV0LnJlcXVpcmVkPFRpY2tldENhcmRNZXRhZGF0YT4oKTtcblxuICBwcml2YXRlIHFyU2VydmljZSA9IGluamVjdChRckdlbmVyYXRvclNlcnZpY2UpO1xuICBwcml2YXRlIHRpY2tldENhcmRJbWFnZVNlcnZpY2UgPSBpbmplY3QoVGlja2V0Q2FyZEltYWdlU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcblxuICAvKiogUVIgZ2VuZXJhZG8gKG51bGwgbWllbnRyYXMgY2FyZ2EgbyBzaSBmYWxsw7MpLiAqL1xuICByZWFkb25seSBxciA9IHNpZ25hbDxRclJlc3VsdCB8IG51bGw+KG51bGwpO1xuICAvKiogRmFsbMOzIGxhIGdlbmVyYWNpw7NuIGRlbCBRUiDihpIgZmFsbGJhY2sgYWwgdG9rZW4gY29ydG8uICovXG4gIHJlYWRvbmx5IGZhaWxlZCA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKiBUcnVlIG1pZW50cmFzIHNlIGdlbmVyYSB5IGNvbXBhcnRlIGxhIHRhcmpldGEgYnJhbmRlZC4gKi9cbiAgcmVhZG9ubHkgc2hhcmluZyA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKiBUcnVlIG1pZW50cmFzIHNlIGdlbmVyYSB5IGRlc2NhcmdhIGxhIHRhcmpldGEgYnJhbmRlZC4gKi9cbiAgcmVhZG9ubHkgZG93bmxvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFkZEljb25zKHsgc2hhcmVPdXRsaW5lLCBkb3dubG9hZE91dGxpbmUgfSk7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoJ1RpY2tldENhcmQnLCBUSUNLRVRfQ0FSRF9JMThOKTtcblxuICAgIC8vIFJlZ2VuZXJhIGVsIFFSIGN1YW5kbyBjYW1iaWEgZWwgdG9rZW4gbyBlbCB0YW1hw7FvLlxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLnByb3BzKCkucXJUb2tlbjtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucHJvcHMoKS5xclNpemUgPz8gMjAwO1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgdGhpcy5xci5zZXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5mYWlsZWQuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdm9pZCB0aGlzLmdlbmVyYXRlKHRva2VuLCBzaXplKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZW5lcmF0ZShkYXRhOiBzdHJpbmcsIHNpemU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZmFpbGVkLnNldChmYWxzZSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucXJTZXJ2aWNlLmdlbmVyYXRlKHtcbiAgICAgICAgZGF0YSxcbiAgICAgICAgd2lkdGg6IHNpemUsXG4gICAgICAgIGhlaWdodDogc2l6ZSxcbiAgICAgICAgbWFyZ2luOiAxLFxuICAgICAgICBkb3RzU3R5bGU6ICdzcXVhcmUnLFxuICAgICAgICBkb3RzQ29sb3I6ICcjMDAwMDAwJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgICAgIGVycm9yQ29ycmVjdGlvbkxldmVsOiAnTScsXG4gICAgICAgIGZvcm1hdDogJ3BuZycsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucXIuc2V0KHJlc3VsdCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTaW4gdG9hc3QvdGhyb3cg4oCUIGVsIGZhbGxiYWNrIG11ZXN0cmEgZWwgdG9rZW4gY29ydG8uIEVsIGNvbnN1bWVyXG4gICAgICAvLyBzaWd1ZSBwdWRpZW5kbyBjYW5qZWFyIHRpcGVhbmRvL2VzY2FuZWFuZG8gc2kgaGFjZSBmYWx0YS5cbiAgICAgIHRoaXMucXIuc2V0KG51bGwpO1xuICAgICAgdGhpcy5mYWlsZWQuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdUaWNrZXRDYXJkJyk7XG4gIH1cblxuICByZWFkb25seSBzdGF0dXMgPSBjb21wdXRlZDxUaWNrZXRDYXJkU3RhdHVzPigoKSA9PiB0aGlzLnByb3BzKCkuc3RhdHVzID8/ICduZXV0cmFsJyk7XG5cbiAgcmVhZG9ubHkgdG9rZW5TaG9ydCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0ayA9IHRoaXMucHJvcHMoKS5xclRva2VuID8/ICcnO1xuICAgIHJldHVybiB0ay5sZW5ndGggPiAxNiA/IGAke3RrLnNsaWNlKDAsIDE2KX3igKZgIDogdGs7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGZvbGlvVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGZvbGlvID0gdGhpcy5wcm9wcygpLmZvbGlvO1xuICAgIGlmIChmb2xpbyA9PT0gdW5kZWZpbmVkIHx8IGZvbGlvID09PSBudWxsIHx8IGZvbGlvID09PSAnJykgcmV0dXJuICcnO1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy5wcm9wcygpLmZvbGlvTGFiZWwgPz8gdGhpcy50KCdmb2xpbycpO1xuICAgIHJldHVybiBgJHtsYWJlbH0gIyR7Zm9saW99YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3RhdHVzTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBzdGF0dXMgPSB0aGlzLnN0YXR1cygpO1xuICAgIGlmIChzdGF0dXMgPT09ICdzb2xkJykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMoKS5zdGF0dXNTb2xkTGFiZWwgPz8gdGhpcy50KCdzdGF0dXNTb2xkJyk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgPT09ICdjaGVja2VkSW4nKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcygpLnN0YXR1c0NoZWNrZWRJbkxhYmVsID8/IHRoaXMudCgnc3RhdHVzQ2hlY2tlZEluJyk7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfSk7XG5cbiAgYXN5bmMgc2hhcmVDYXJkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHEgPSB0aGlzLnFyKCk7XG4gICAgaWYgKCFxKSByZXR1cm47XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHMoKTtcbiAgICB0aGlzLnNoYXJpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWcgPSB0aGlzLmJ1aWxkSW1hZ2VDb25maWcocSwgcCk7XG4gICAgICBjb25zdCBzaGFyZWQgPSBhd2FpdCB0aGlzLnRpY2tldENhcmRJbWFnZVNlcnZpY2Uuc2hhcmUoY29uZmlnLCBwLnRpdGxlIHx8IHAuc2hhcmVCcmFuZE5hbWUpO1xuICAgICAgaWYgKCFzaGFyZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb3B5VG9DbGlwYm9hcmQoY29uZmlnLCBwKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zaGFyaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRDYXJkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHEgPSB0aGlzLnFyKCk7XG4gICAgaWYgKCFxKSByZXR1cm47XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHMoKTtcbiAgICB0aGlzLmRvd25sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50cmlnZ2VyRG93bmxvYWQodGhpcy5idWlsZEltYWdlQ29uZmlnKHEsIHApLCBwKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kb3dubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRJbWFnZUNvbmZpZyhxOiBRclJlc3VsdCwgcDogVGlja2V0Q2FyZE1ldGFkYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHFyRGF0YVVybDogcS5kYXRhVXJsLFxuICAgICAgbG9nb1VybDogcC5zaGFyZUxvZ29VcmwsXG4gICAgICBicmFuZENvbG9yOiBwLnNoYXJlQnJhbmRDb2xvcixcbiAgICAgIGJyYW5kQ29sb3JUbzogcC5zaGFyZUJyYW5kQ29sb3JUbyxcbiAgICAgIGJyYW5kTmFtZTogcC5zaGFyZUJyYW5kTmFtZSxcbiAgICAgIGZvbGlvOiBwLmZvbGlvLFxuICAgICAgZm9saW9MYWJlbDogcC5zaGFyZUZvbGlvTGFiZWwsXG4gICAgICBidXllck5hbWU6IHAuYnV5ZXJOYW1lLFxuICAgICAgZXZlbnREYXRlOiBwLnNoYXJlRXZlbnREYXRlLFxuICAgICAgZXZlbnRMb2NhdGlvbjogcC5zaGFyZUV2ZW50TG9jYXRpb24sXG4gICAgICBzY2FuSGludDogcC5zaGFyZVNjYW5IaW50LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvcHlUb0NsaXBib2FyZChcbiAgICBjb25maWc6IFBhcmFtZXRlcnM8dHlwZW9mIHRoaXMudGlja2V0Q2FyZEltYWdlU2VydmljZS5nZW5lcmF0ZT5bMF0sXG4gICAgcDogVGlja2V0Q2FyZE1ldGFkYXRhXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEludGVudGEgY29waWFyIGxhIGltYWdlbiBicmFuZGVkIGFsIGNsaXBib2FyZCAoQ2hyb21lL0VkZ2UvU2FmYXJpIGRlc2t0b3ApLlxuICAgIGlmICh0eXBlb2YgQ2xpcGJvYXJkSXRlbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCB0aGlzLnRpY2tldENhcmRJbWFnZVNlcnZpY2UuZ2VuZXJhdGUoY29uZmlnKTtcbiAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZShbbmV3IENsaXBib2FyZEl0ZW0oeyAnaW1hZ2UvcG5nJzogYmxvYiB9KV0pO1xuICAgICAgICB0aGlzLnRvYXN0LnNob3coeyBtZXNzYWdlOiB0aGlzLnQoJ2NvcGllZCcpLCBkdXJhdGlvbjogMjAwMCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIENsaXBib2FyZEl0ZW0gbm8gc29wb3J0YWRvIG8gcGVybWlzbyBkZW5lZ2FkbyDihpIgY2FlciBhIHRleHRvXG4gICAgICB9XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBjb3BpYSBVUkwgbyB0ZXh0byBmb2xpb1xuICAgIGNvbnN0IHRleHQgPSAoKHAuc2hhcmVVcmwgPz8gdGhpcy5mb2xpb1RleHQoKSkgfHwgcC5zaGFyZUJyYW5kTmFtZSkgPz8gJyc7XG4gICAgaWYgKCF0ZXh0KSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICAgICAgdGhpcy50b2FzdC5zaG93KHsgbWVzc2FnZTogdGhpcy50KHAuc2hhcmVVcmwgPyAnY29waWVkVXJsJyA6ICdjb3BpZWQnKSwgZHVyYXRpb246IDIwMDAgfSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBjbGlwYm9hcmQgbm8gZGlzcG9uaWJsZSDigJQgc2lsZW5jaW9zb1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJpZ2dlckRvd25sb2FkKFxuICAgIGNvbmZpZzogUGFyYW1ldGVyczx0eXBlb2YgdGhpcy50aWNrZXRDYXJkSW1hZ2VTZXJ2aWNlLmdlbmVyYXRlPlswXSxcbiAgICBwOiBUaWNrZXRDYXJkTWV0YWRhdGFcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHRoaXMudGlja2V0Q2FyZEltYWdlU2VydmljZS5nZW5lcmF0ZShjb25maWcpO1xuICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBhLmhyZWYgPSB1cmw7XG4gICAgYS5kb3dubG9hZCA9IGBlbnRyYWRhLSR7cC5mb2xpbyA/PyAnYmluZ28nfS5wbmdgO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgYS5jbGljaygpO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICB9XG5cbiAgcXJQcm9wcyhxOiBRclJlc3VsdCk6IFFyQ29kZU1ldGFkYXRhIHtcbiAgICBjb25zdCBwID0gdGhpcy5wcm9wcygpO1xuICAgIHJldHVybiB7XG4gICAgICBxcjogcSxcbiAgICAgIGRpc3BsYXlTaXplOiBwLnFyU2l6ZSA/PyAyMDAsXG4gICAgICBzaG93RG93bmxvYWQ6IGZhbHNlLFxuICAgICAgc2hvd1NoYXJlOiBmYWxzZSxcbiAgICAgIHNob3dCb3JkZXI6IGZhbHNlLFxuICAgICAgYWx0OiB0aGlzLmZvbGlvVGV4dCgpIHx8ICdRUicsXG4gICAgICBkb3dubG9hZExhYmVsOiBwLmRvd25sb2FkTGFiZWwgPz8gdGhpcy50KCdkb3dubG9hZCcpLFxuICAgICAgc2hhcmVMYWJlbDogdGhpcy50KCdzaGFyZScpLFxuICAgICAgc2hhcmVUaXRsZTogcC50aXRsZSB8fCB0aGlzLmZvbGlvVGV4dCgpIHx8ICdRUicsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3RpY2tldC1jYXJkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVzdGFkbyBkZSBjYW5qZS92ZW50YSBxdWUgZWwgdGlja2V0LWNhcmQgcmVmbGVqYSBlbiBzdSBiYWRnZS5cbiAqXG4gKiAtIGBzb2xkYCDigJQgZW50cmFkYSB2ZW5kaWRhLCB0b2RhdsOtYSBubyBjYW5qZWFkYSAoUVIgdsOhbGlkbyBwYXJhIGNhbmplYXIpLlxuICogLSBgY2hlY2tlZEluYCDigJQgZW50cmFkYSB5YSBjYW5qZWFkYSAoUVIgeWEgdXNhZG8gZW4gcHVlcnRhKS5cbiAqIC0gYG5ldXRyYWxgIOKAlCBzaW4gZXN0YWRvIGRlc3RhY2FkbyAocC5lai4gc29sbyBzZSBtdWVzdHJhIGVsIFFSKS5cbiAqL1xuZXhwb3J0IHR5cGUgVGlja2V0Q2FyZFN0YXR1cyA9ICdzb2xkJyB8ICdjaGVja2VkSW4nIHwgJ25ldXRyYWwnO1xuXG4vKipcbiAqIE1ldGFkYXRhIChvYmplY3QtZmlyc3QpIGRlbCBjb21wb25lbnRlIGB2YWwtdGlja2V0LWNhcmRgLlxuICpcbiAqIFRhcmpldGEgcHJlc2VudGFjaW9uYWwgZGUgdW5hIGVudHJhZGE6IG11ZXN0cmEgZWwgUVIgKGdlbmVyYWRvIGEgcGFydGlyIGRlbFxuICogYHFyVG9rZW5gIG9wYWNvIGZpcm1hZG8pLCBlbCBmb2xpbywgZWwgbm9tYnJlIGRlbCBjb21wcmFkb3IgKHNpIGhheSkgeSB1blxuICogYmFkZ2UgZGUgZXN0YWRvLiBOTyB0cmFlIHRleHRvIHByb3BpbyBmaWpvIOKAlCBlbCBjb25zdW1lciBwYXNhIGxvcyBsYWJlbHMgeWFcbiAqIHJlc3VlbHRvcyAoYHN0YXR1c1NvbGRMYWJlbGAgLyBgc3RhdHVzQ2hlY2tlZEluTGFiZWxgIC8gYGZvbGlvTGFiZWxgKS4gRWxcbiAqIMO6bmljbyB0ZXh0byBhdXRvLWkxOG4gc29uIGxvcyBkZWZhdWx0cyBkZSBlc29zIGxhYmVscyAobmFtZXNwYWNlIGBUaWNrZXRDYXJkYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlja2V0Q2FyZE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRva2VuIG9wYWNvIGZpcm1hZG8gcXVlIHZhIERFTlRSTyBkZWwgUVIgZXNjYW5lYWJsZSAoZm9ybWF0b1xuICAgKiBgYmFzZTY0dXJsLmJhc2U2NHVybGApLiBFcyBleGFjdGFtZW50ZSBlbCBkYXRvIHF1ZSBsYSB0YXF1aWxsYSBtYW5kYSBhbFxuICAgKiBlbmRwb2ludCBkZSBjYW5qZS4gRWwgY29tcG9uZW50ZSBsbyBjb2RpZmljYSBlbiBlbCBRUiB0YWwgY3VhbC5cbiAgICovXG4gIHFyVG9rZW46IHN0cmluZztcblxuICAvKiogRm9saW8gZGUgbGEgZW50cmFkYSAobsO6bWVybyB2aXNpYmxlIGp1bnRvIGFsIFFSKS4gKi9cbiAgZm9saW8/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqIE5vbWJyZSBkZWwgY29tcHJhZG9yLCBzaSBzZSBjYXB0dXLDsyBlbiBsYSB2ZW50YS4gKi9cbiAgYnV5ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBFc3RhZG8gZGUgbGEgZW50cmFkYSAoY29udHJvbGEgZWwgY29sb3IvbGFiZWwgZGVsIGJhZGdlKS4gKi9cbiAgc3RhdHVzPzogVGlja2V0Q2FyZFN0YXR1cztcblxuICAvKiogVMOtdHVsbyBkZSBsYSB0YXJqZXRhIChlai4gbm9tYnJlIGRlbCBldmVudG8pLiBPcGNpb25hbC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqIFRhbWHDsW8gZGVsIFFSIGVuIHB4IChkZWZhdWx0IDIwMCkuICovXG4gIHFyU2l6ZT86IG51bWJlcjtcblxuICAvKiogTW9zdHJhciBib3TDs24gZGUgZGVzY2FyZ2EgZGVsIFFSLiAqL1xuICBzaG93RG93bmxvYWQ/OiBib29sZWFuO1xuICAvKiogTW9zdHJhciBib3TDs24gZGUgY29tcGFydGlyIGVsIFFSLiAqL1xuICBzaG93U2hhcmU/OiBib29sZWFuO1xuXG4gIC8vID09PSBMYWJlbHMgKG92ZXJyaWRlIGRlbCBhdXRvLWkxOG4pID09PVxuICAvKiogTGFiZWwgZGVsIHByZWZpam8gZGUgZm9saW8gKGRlZmF1bHQgaTE4bjogXCJGb2xpb1wiKS4gKi9cbiAgZm9saW9MYWJlbD86IHN0cmluZztcbiAgLyoqIExhYmVsIGRlbCBiYWRnZSBjdWFuZG8gYHN0YXR1cyA9PT0gJ3NvbGQnYCAoZGVmYXVsdDogXCJWZW5kaWRhXCIpLiAqL1xuICBzdGF0dXNTb2xkTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBkZWwgYmFkZ2UgY3VhbmRvIGBzdGF0dXMgPT09ICdjaGVja2VkSW4nYCAoZGVmYXVsdDogXCJDYW5qZWFkYVwiKS4gKi9cbiAgc3RhdHVzQ2hlY2tlZEluTGFiZWw/OiBzdHJpbmc7XG5cbiAgLy8gPT09IFNoYXJlIGNhcmQgYnJhbmRpbmcgPT09XG4gIC8qKiBVUkwgcMO6YmxpY2EgcGFyYSBjb21wYXJ0aXIgKGxpbmspLiBTaSBlbCBuYXRpdmUgc2hhcmUgZmFsbGEsIHNlIGNvcGlhIGFsIGNsaXBib2FyZCBlbiBzdSBsdWdhci4gKi9cbiAgc2hhcmVVcmw/OiBzdHJpbmc7XG4gIC8qKiBVUkwgZGVsIGxvZ28gZGUgbWFyY2EgcGFyYSBsYSB0YXJqZXRhIGNvbXBhcnRpZGEuICovXG4gIHNoYXJlTG9nb1VybD86IHN0cmluZztcbiAgLyoqIENvbG9yIGRlIGZvbmRvIGRlbCBlbmNhYmV6YWRvIGVuIGxhIHRhcmpldGEgY29tcGFydGlkYS4gRGVmYXVsdDogZ3JhZGllbnRlIGJpbmdvLiAqL1xuICBzaGFyZUJyYW5kQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBDb2xvciBzZWN1bmRhcmlvIGRlbCBncmFkaWVudGUgKG9wdGlvbmFsKS4gKi9cbiAgc2hhcmVCcmFuZENvbG9yVG8/OiBzdHJpbmc7XG4gIC8qKiBOb21icmUgZGUgZXZlbnRvIC8gbWFyY2EgZW4gbGEgdGFyamV0YSBjb21wYXJ0aWRhLiAqL1xuICBzaGFyZUJyYW5kTmFtZT86IHN0cmluZztcbiAgLyoqIExhYmVsIGRlbCBmb2xpbyBlbiBsYSB0YXJqZXRhIGNvbXBhcnRpZGEuIERlZmF1bHQgXCJFbnRyYWRhXCIuICovXG4gIHNoYXJlRm9saW9MYWJlbD86IHN0cmluZztcbiAgLyoqIExhYmVsIGRlbCBzaGFyZSBidXR0b24uICovXG4gIHNoYXJlTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBkZWwgZG93bmxvYWQgYnV0dG9uLiAqL1xuICBkb3dubG9hZExhYmVsPzogc3RyaW5nO1xufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3RpY2tldC1jYXJkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEVzdGFkbyBkZSBjYW5qZS92ZW50YSBxdWUgZWwgdGlja2V0LWNhcmQgcmVmbGVqYSBlbiBzdSBiYWRnZS5cbiAqXG4gKiAtIGBzb2xkYCDigJQgZW50cmFkYSB2ZW5kaWRhLCB0b2RhdsOtYSBubyBjYW5qZWFkYSAoUVIgdsOhbGlkbyBwYXJhIGNhbmplYXIpLlxuICogLSBgY2hlY2tlZEluYCDigJQgZW50cmFkYSB5YSBjYW5qZWFkYSAoUVIgeWEgdXNhZG8gZW4gcHVlcnRhKS5cbiAqIC0gYG5ldXRyYWxgIOKAlCBzaW4gZXN0YWRvIGRlc3RhY2FkbyAocC5lai4gc29sbyBzZSBtdWVzdHJhIGVsIFFSKS5cbiAqL1xuZXhwb3J0IHR5cGUgVGlja2V0Q2FyZFN0YXR1cyA9ICdzb2xkJyB8ICdjaGVja2VkSW4nIHwgJ25ldXRyYWwnO1xuXG4vKipcbiAqIE1ldGFkYXRhIChvYmplY3QtZmlyc3QpIGRlbCBjb21wb25lbnRlIGB2YWwtdGlja2V0LWNhcmRgLlxuICpcbiAqIFRhcmpldGEgcHJlc2VudGFjaW9uYWwgZGUgdW5hIGVudHJhZGE6IG11ZXN0cmEgZWwgUVIgKGdlbmVyYWRvIGEgcGFydGlyIGRlbFxuICogYHFyVG9rZW5gIG9wYWNvIGZpcm1hZG8pLCBlbCBmb2xpbywgZWwgbm9tYnJlIGRlbCBjb21wcmFkb3IgKHNpIGhheSkgeSB1blxuICogYmFkZ2UgZGUgZXN0YWRvLiBOTyB0cmFlIHRleHRvIHByb3BpbyBmaWpvIOKAlCBlbCBjb25zdW1lciBwYXNhIGxvcyBsYWJlbHMgeWFcbiAqIHJlc3VlbHRvcyAoYHN0YXR1c1NvbGRMYWJlbGAgLyBgc3RhdHVzQ2hlY2tlZEluTGFiZWxgIC8gYGZvbGlvTGFiZWxgKS4gRWxcbiAqIMO6bmljbyB0ZXh0byBhdXRvLWkxOG4gc29uIGxvcyBkZWZhdWx0cyBkZSBlc29zIGxhYmVscyAobmFtZXNwYWNlIGBUaWNrZXRDYXJkYCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlja2V0Q2FyZE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRva2VuIG9wYWNvIGZpcm1hZG8gcXVlIHZhIERFTlRSTyBkZWwgUVIgZXNjYW5lYWJsZSAoZm9ybWF0b1xuICAgKiBgYmFzZTY0dXJsLmJhc2U2NHVybGApLiBFcyBleGFjdGFtZW50ZSBlbCBkYXRvIHF1ZSBsYSB0YXF1aWxsYSBtYW5kYSBhbFxuICAgKiBlbmRwb2ludCBkZSBjYW5qZS4gRWwgY29tcG9uZW50ZSBsbyBjb2RpZmljYSBlbiBlbCBRUiB0YWwgY3VhbC5cbiAgICovXG4gIHFyVG9rZW46IHN0cmluZztcblxuICAvKiogRm9saW8gZGUgbGEgZW50cmFkYSAobsO6bWVybyB2aXNpYmxlIGp1bnRvIGFsIFFSKS4gKi9cbiAgZm9saW8/OiBudW1iZXIgfCBzdHJpbmc7XG5cbiAgLyoqIE5vbWJyZSBkZWwgY29tcHJhZG9yLCBzaSBzZSBjYXB0dXLDsyBlbiBsYSB2ZW50YS4gKi9cbiAgYnV5ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBFc3RhZG8gZGUgbGEgZW50cmFkYSAoY29udHJvbGEgZWwgY29sb3IvbGFiZWwgZGVsIGJhZGdlKS4gKi9cbiAgc3RhdHVzPzogVGlja2V0Q2FyZFN0YXR1cztcblxuICAvKiogVMOtdHVsbyBkZSBsYSB0YXJqZXRhIChlai4gbm9tYnJlIGRlbCBldmVudG8pLiBPcGNpb25hbC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgLyoqIFRhbWHDsW8gZGVsIFFSIGVuIHB4IChkZWZhdWx0IDIwMCkuICovXG4gIHFyU2l6ZT86IG51bWJlcjtcblxuICAvKiogTW9zdHJhciBib3TDs24gZGUgZGVzY2FyZ2EgZGVsIFFSLiAqL1xuICBzaG93RG93bmxvYWQ/OiBib29sZWFuO1xuICAvKiogTW9zdHJhciBib3TDs24gZGUgY29tcGFydGlyIGVsIFFSLiAqL1xuICBzaG93U2hhcmU/OiBib29sZWFuO1xuXG4gIC8vID09PSBMYWJlbHMgKG92ZXJyaWRlIGRlbCBhdXRvLWkxOG4pID09PVxuICAvKiogTGFiZWwgZGVsIHByZWZpam8gZGUgZm9saW8gKGRlZmF1bHQgaTE4bjogXCJGb2xpb1wiKS4gKi9cbiAgZm9saW9MYWJlbD86IHN0cmluZztcbiAgLyoqIExhYmVsIGRlbCBiYWRnZSBjdWFuZG8gYHN0YXR1cyA9PT0gJ3NvbGQnYCAoZGVmYXVsdDogXCJWZW5kaWRhXCIpLiAqL1xuICBzdGF0dXNTb2xkTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBkZWwgYmFkZ2UgY3VhbmRvIGBzdGF0dXMgPT09ICdjaGVja2VkSW4nYCAoZGVmYXVsdDogXCJDYW5qZWFkYVwiKS4gKi9cbiAgc3RhdHVzQ2hlY2tlZEluTGFiZWw/OiBzdHJpbmc7XG5cbiAgLy8gPT09IFNoYXJlIGNhcmQgYnJhbmRpbmcgPT09XG4gIC8qKiBVUkwgcMO6YmxpY2EgcGFyYSBjb21wYXJ0aXIgKGxpbmspLiBTaSBlbCBuYXRpdmUgc2hhcmUgZmFsbGEsIHNlIGNvcGlhIGFsIGNsaXBib2FyZCBlbiBzdSBsdWdhci4gKi9cbiAgc2hhcmVVcmw/OiBzdHJpbmc7XG4gIC8qKiBVUkwgZGVsIGxvZ28gZGUgbWFyY2EgcGFyYSBsYSB0YXJqZXRhIGNvbXBhcnRpZGEuICovXG4gIHNoYXJlTG9nb1VybD86IHN0cmluZztcbiAgLyoqIENvbG9yIGRlIGZvbmRvIGRlbCBlbmNhYmV6YWRvIGVuIGxhIHRhcmpldGEgY29tcGFydGlkYS4gRGVmYXVsdDogZ3JhZGllbnRlIGJpbmdvLiAqL1xuICBzaGFyZUJyYW5kQ29sb3I/OiBzdHJpbmc7XG4gIC8qKiBDb2xvciBzZWN1bmRhcmlvIGRlbCBncmFkaWVudGUgKG9wdGlvbmFsKS4gKi9cbiAgc2hhcmVCcmFuZENvbG9yVG8/OiBzdHJpbmc7XG4gIC8qKiBOb21icmUgZGUgZXZlbnRvIC8gbWFyY2EgZW4gbGEgdGFyamV0YSBjb21wYXJ0aWRhLiAqL1xuICBzaGFyZUJyYW5kTmFtZT86IHN0cmluZztcbiAgLyoqIExhYmVsIGRlbCBmb2xpbyBlbiBsYSB0YXJqZXRhIGNvbXBhcnRpZGEuIERlZmF1bHQgXCJDYXJ0w7NuXCIuICovXG4gIHNoYXJlRm9saW9MYWJlbD86IHN0cmluZztcbiAgLyoqIEZlY2hhIGRlbCBldmVudG8gcGFyYSBsYSB0YXJqZXRhIGNvbXBhcnRpZGEgKHlhIGZvcm1hdGVhZGEgcGFyYSBtb3N0cmFyKS4gKi9cbiAgc2hhcmVFdmVudERhdGU/OiBzdHJpbmc7XG4gIC8qKiBMdWdhciBkZWwgZXZlbnRvIHBhcmEgbGEgdGFyamV0YSBjb21wYXJ0aWRhLiAqL1xuICBzaGFyZUV2ZW50TG9jYXRpb24/OiBzdHJpbmc7XG4gIC8qKiBUZXh0byBoaW50IGJham8gZWwgUVIgZW4gbGEgdGFyamV0YSBjb21wYXJ0aWRhLiAqL1xuICBzaGFyZVNjYW5IaW50Pzogc3RyaW5nO1xuICAvKiogTGFiZWwgZGVsIHNoYXJlIGJ1dHRvbi4gKi9cbiAgc2hhcmVMYWJlbD86IHN0cmluZztcbiAgLyoqIExhYmVsIGRlbCBkb3dubG9hZCBidXR0b24uICovXG4gIGRvd25sb2FkTGFiZWw/OiBzdHJpbmc7XG59XG4iXX0=
@@ -28,9 +28,16 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
28
28
  import { SwUpdate } from '@angular/service-worker';
29
29
  import { filter, interval } from 'rxjs';
30
30
  import { AppConfigService } from '../app-config/app-config.service';
31
- import { APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, VALTECH_APP_VERSION } from './config';
31
+ import { APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, VALTECH_APP_VERSION, } from './config';
32
32
  import { DEFAULT_APP_VERSION_SERVICE_CONFIG, } from './types';
33
33
  import * as i0 from "@angular/core";
34
+ /**
35
+ * Máximo que `applyUpdate` espera por el `VERSION_READY` del SW antes de recargar
36
+ * igual. Cubre el caso en que el update lo detectó el path HTTP antes de que el
37
+ * SW descargara el bundle nuevo (evita el loop de banner). Si el SW nunca queda
38
+ * listo (Android Chrome), recarga como último recurso al vencer.
39
+ */
40
+ const SW_READY_TIMEOUT_MS = 8000;
34
41
  /**
35
42
  * Compara dos versiones semver. Retorna true si `a` es estrictamente menor
36
43
  * que `b`. Tolerante a longitudes distintas y a partes no numéricas.
@@ -57,9 +64,13 @@ export class AppVersionService {
57
64
  this.appConfig = inject(AppConfigService, { optional: true });
58
65
  this.serviceConfig = inject(VALTECH_APP_VERSION, { optional: true });
59
66
  /** Plugin nativo opcional: provisto por apps Capacitor para Play Store / App Store. */
60
- this.platformPlugin = inject(APP_VERSION_PLATFORM_PLUGIN, { optional: true });
67
+ this.platformPlugin = inject(APP_VERSION_PLATFORM_PLUGIN, {
68
+ optional: true,
69
+ });
61
70
  /** Plugin HTTP opcional: alternativa a AppConfigService para apps sin Firebase. */
62
- this.remotePlugin = inject(APP_VERSION_REMOTE_PLUGIN, { optional: true });
71
+ this.remotePlugin = inject(APP_VERSION_REMOTE_PLUGIN, {
72
+ optional: true,
73
+ });
63
74
  this.document = inject(DOCUMENT);
64
75
  this.destroyRef = inject(DestroyRef);
65
76
  /** True cuando el SW reportó un bundle nuevo listo (`VERSION_READY`). */
@@ -128,7 +139,21 @@ export class AppVersionService {
128
139
  }
129
140
  try {
130
141
  if (this.swUpdate?.isEnabled) {
131
- await this.swUpdate.activateUpdate();
142
+ // Si la actualización se detectó por el path HTTP (/version.json) ANTES
143
+ // de que el SW descargue el bundle nuevo, `swUpdateReady` aún es false:
144
+ // recargar ahora volvería a cargar el MISMO bundle viejo y el banner
145
+ // reaparecería (loop de "actualizar N veces"). Pedimos al SW que chequee
146
+ // y esperamos a que el bundle quede listo (con timeout) para que el
147
+ // reload realmente cambie de versión.
148
+ if (!this.swUpdateReady()) {
149
+ await this.swUpdate.checkForUpdate().catch(() => undefined);
150
+ if (!this.swUpdateReady()) {
151
+ await this.waitForSwReady(SW_READY_TIMEOUT_MS);
152
+ }
153
+ }
154
+ if (this.swUpdateReady()) {
155
+ await this.swUpdate.activateUpdate();
156
+ }
132
157
  }
133
158
  }
134
159
  catch (err) {
@@ -138,6 +163,30 @@ export class AppVersionService {
138
163
  this.document.defaultView?.location.reload();
139
164
  }
140
165
  }
166
+ /**
167
+ * Espera a que el SW reporte un bundle nuevo listo (`VERSION_READY`), o hasta
168
+ * `timeoutMs`. Evita el reload "en seco" cuando el update lo detectó el path
169
+ * HTTP antes de que el SW descargara el bundle. Si el timeout vence (ej.
170
+ * Android Chrome donde VERSION_READY es poco confiable), resuelve igual y el
171
+ * caller recarga como último recurso.
172
+ */
173
+ waitForSwReady(timeoutMs) {
174
+ if (this.swUpdateReady() || !this.swUpdate?.isEnabled)
175
+ return Promise.resolve();
176
+ return new Promise(resolve => {
177
+ let settled = false;
178
+ const finish = () => {
179
+ if (settled)
180
+ return;
181
+ settled = true;
182
+ sub.unsubscribe();
183
+ clearTimeout(timer);
184
+ resolve();
185
+ };
186
+ const sub = this.swUpdate.versionUpdates.pipe(filter(evt => evt.type === 'VERSION_READY')).subscribe(() => finish());
187
+ const timer = setTimeout(finish, timeoutMs);
188
+ });
189
+ }
141
190
  /**
142
191
  * Descarta el banner de actualización opcional.
143
192
  * No tiene efecto sobre el estado `update-required` (hard gate).
@@ -151,7 +200,9 @@ export class AppVersionService {
151
200
  async checkNow() {
152
201
  await Promise.all([
153
202
  this.swUpdate?.isEnabled
154
- ? this.swUpdate.checkForUpdate().catch(err => console.warn('[AppVersionService] checkForUpdate failed:', err))
203
+ ? this.swUpdate
204
+ .checkForUpdate()
205
+ .catch(err => console.warn('[AppVersionService] checkForUpdate failed:', err))
155
206
  : undefined,
156
207
  this.remotePlugin ? this.loadRemoteConfig() : undefined,
157
208
  ]);
@@ -224,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
224
275
  type: Injectable,
225
276
  args: [{ providedIn: 'root' }]
226
277
  }], ctorParameters: () => [] });
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RyxPQUFPLEVBS0wsa0NBQWtDLEdBQ25DLE1BQU0sU0FBUyxDQUFDOztBQUVqQjs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMxQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBR0QsTUFBTSxPQUFPLGlCQUFpQjtJQStFNUI7UUE5RUEsa0VBQWtFO1FBQ2pELGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsOERBQThEO1FBQzdDLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLHVGQUF1RjtRQUN0RSxtQkFBYyxHQUFHLE1BQU0sQ0FDdEMsMkJBQTJCLEVBQzNCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUNuQixDQUFDO1FBQ0YsbUZBQW1GO1FBQ2xFLGlCQUFZLEdBQUcsTUFBTSxDQUNwQyx5QkFBeUIsRUFDekIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQ25CLENBQUM7UUFDZSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakQseUVBQXlFO1FBQ3hELGtCQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9DLHlGQUF5RjtRQUN4RSxpQkFBWSxHQUFHLE1BQU0sQ0FBZ0MsSUFBSSxDQUFDLENBQUM7UUFFNUU7OztXQUdHO1FBQ2MsZUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxjQUFTLEdBQW9CLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbkUsOEVBQThFO1FBQzlFLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFFOUU7OztXQUdHO1FBQ00sbUJBQWMsR0FBbUIsUUFBUSxDQUNoRCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWMsSUFBSSxPQUFPLENBQ3BELENBQUM7UUFFRjs7O1dBR0c7UUFDTSxrQkFBYSxHQUEwQixRQUFRLENBQ3RELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQzlFLENBQUM7UUFFRjs7Ozs7V0FLRztRQUNNLFdBQU0sR0FBNkIsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4RCxtRUFBbUU7WUFDbkUsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFVBQVUsQ0FBQztZQUM3RSxJQUFJLFVBQVUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLE9BQU8saUJBQWlCLENBQUM7WUFDM0IsQ0FBQztZQUVELDRFQUE0RTtZQUM1RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsT0FBTyxDQUFDO1lBQ2xELE1BQU0sZUFBZSxHQUFHLFlBQVk7Z0JBQ2xDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLFlBQVksQ0FBQztnQkFDckQsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVWLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzNFLE9BQU8sa0JBQWtCLENBQUM7WUFDNUIsQ0FBQztZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBR0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLDhFQUE4RTtJQUU5RTs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM3QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRSxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDL0MsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTO2dCQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDekMsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FDaEU7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN4RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFVBQVU7SUFDViw4RUFBOEU7SUFFOUU7OztPQUdHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVM7WUFBRSxPQUFPO1FBRXRDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWM7YUFDekIsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEVBQzNDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVqRCwwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLElBQUksa0NBQWtDLENBQUMsZUFBZSxDQUFDO1FBRTVGLFFBQVEsQ0FBQyxVQUFVLENBQUM7YUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTO2dCQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hFLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRWxHLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxnQkFBZ0I7UUFDdEIsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUU3QixNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsSUFBSSxrQ0FBa0MsQ0FBQyxlQUFlLENBQUM7UUFFNUYsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFakQsTUFBTSxTQUFTLEdBQUcsR0FBUyxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUztnQkFBRSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hGLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7K0dBaE5VLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcFZlcnNpb25TZXJ2aWNlXG4gKlxuICogVmVyaWZpY2FjacOzbiBkZSB2ZXJzacOzbiBkZSBsYSBhcHAgcGFyYSBQV0EgLyB3ZWIgLyBDYXBhY2l0b3IuXG4gKlxuICogVW5pZmljYSB0cmVzIHNlw7FhbGVzIHBhcmEgZGV0ZWN0YXIgYWN0dWFsaXphY2lvbmVzOlxuICpcbiAqIDEuIGBTd1VwZGF0ZWAgKGBAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcmApIOKAlCBlbCBldmVudG8gYFZFUlNJT05fUkVBRFlgIGluZGljYVxuICogICAgcXVlIHVuIGJ1bmRsZSBudWV2byBmdWUgZGVzY2FyZ2FkbyB5IGVzdMOhIGxpc3RvIHBhcmEgYWN0aXZhcnNlLiBTb2xvIGVzdMOhXG4gKiAgICBkaXNwb25pYmxlIGN1YW5kbyBlbCBzZXJ2aWNlIHdvcmtlciBlc3TDoSByZWdpc3RyYWRvIChidWlsZCBkZSBwcm9kdWNjacOzbikuXG4gKiAgICBBZGVtw6FzIHNlIGNoZXF1ZWEgcHJvYWN0aXZhbWVudGUgY2FkYSBgY2hlY2tJbnRlcnZhbE1zYCB5IGNhZGEgdmV6IHF1ZSBsYVxuICogICAgYXBwIHZ1ZWx2ZSBhIGZvcmVncm91bmQgKGB2aXNpYmlsaXR5Y2hhbmdlYCkuXG4gKlxuICogMi4gYEFwcENvbmZpZ1NlcnZpY2VgIChjb25maWcgcmVtb3RvIGVuIEZpcmVzdG9yZSkg4oCUIGV4cG9uZSBgdmVyc2lvbmBcbiAqICAgICjDumx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSkgeSBgbWluVmVyc2lvbmAgKHZlcnNpw7NuIG3DrW5pbWEgc29wb3J0YWRhKS5cbiAqICAgIFNlIHVzYSBwYXJhIGxhIHBvbMOtdGljYSBkZSBhY3R1YWxpemFjacOzbiBvYmxpZ2F0b3JpYSAoaGFyZCBnYXRlKS5cbiAqXG4gKiAzLiBgQXBwVmVyc2lvblJlbW90ZVBsdWdpbmAgKEhUVFApIOKAlCBhbHRlcm5hdGl2YSBhIEFwcENvbmZpZ1NlcnZpY2UgcGFyYSBhcHBzXG4gKiAgICBzaW4gRmlyZWJhc2UuIFByb3Zpc3RvIHZpYSBgcHJvdmlkZVZhbHRlY2hBcHBWZXJzaW9uSHR0cGAuIEV4cG9uZSBlbCBtaXNtb1xuICogICAgY29udHJhdG8gKGB2ZXJzaW9uYCAvIGBtaW5WZXJzaW9uYCkuIFNlIGNoZXF1ZWEgZW4gbG9zIG1pc21vcyBpbnRlcnZhbG9zXG4gKiAgICBxdWUgZWwgU1cuXG4gKlxuICogTGFzIHRyZXMgZGVwZW5kZW5jaWFzIHNlIGlueWVjdGFuIGNvbW8gb3BjaW9uYWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU3dVcGRhdGUgfSBmcm9tICdAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sIEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sIFZBTFRFQ0hfQVBQX1ZFUlNJT04gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBcHBWZXJzaW9uUGxhdGZvcm1QbHVnaW4sXG4gIEFwcFZlcnNpb25SZW1vdGVDb25maWcsXG4gIEFwcFZlcnNpb25SZW1vdGVQbHVnaW4sXG4gIEFwcFZlcnNpb25TdGF0dXMsXG4gIERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqIFBsdWdpbiBuYXRpdm8gb3BjaW9uYWw6IHByb3Zpc3RvIHBvciBhcHBzIENhcGFjaXRvciBwYXJhIFBsYXkgU3RvcmUgLyBBcHAgU3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1QbHVnaW4gPSBpbmplY3Q8QXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luPihcbiAgICBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIC8qKiBQbHVnaW4gSFRUUCBvcGNpb25hbDogYWx0ZXJuYXRpdmEgYSBBcHBDb25maWdTZXJ2aWNlIHBhcmEgYXBwcyBzaW4gRmlyZWJhc2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlUGx1Z2luID0gaW5qZWN0PEFwcFZlcnNpb25SZW1vdGVQbHVnaW4+KFxuICAgIEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqIFRydWUgY3VhbmRvIGVsIFNXIHJlcG9ydMOzIHVuIGJ1bmRsZSBudWV2byBsaXN0byAoYFZFUlNJT05fUkVBRFlgKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzd1VwZGF0ZVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQ29uZmlnIHJlbW90YSBjYXJnYWRhIHBvciBlbCBwbHVnaW4gSFRUUC4gTnVsbCBoYXN0YSBxdWUgY2FyZ2EgbyBzaSBubyBoYXkgcGx1Z2luLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW90ZUNvbmZpZyA9IHNpZ25hbDxBcHBWZXJzaW9uUmVtb3RlQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRydWUgY3VhbmRvIGVsIHVzdWFyaW8gZGVzY2FydMOzIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogRWwgYmFubmVyIG9ibGlnYXRvcmlvIChgdXBkYXRlLXJlcXVpcmVkYCkgaWdub3JhIGVzdGUgZmxhZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc21pc3NlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc21pc3NlZDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZGlzbWlzc2VkLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0lHTkFMUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZlcnNpw7NuIGxvY2FsIGRlbCBidWlsZCBhY3R1YWwgZGUgbGEgYXBwLlxuICAgKiBQcm92aWVuZSBkZWwgcHJvdmlkZXIgYHByb3ZpZGVWYWx0ZWNoQXBwVmVyc2lvbih7IGN1cnJlbnRWZXJzaW9uIH0pYC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VydmljZUNvbmZpZz8uY3VycmVudFZlcnNpb24gPz8gJzAuMC4wJ1xuICApO1xuXG4gIC8qKlxuICAgKiDDmmx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSBzZWfDum4gZWwgY29uZmlnIHJlbW90byAoQXBwQ29uZmlnU2VydmljZSBvIHBsdWdpbiBIVFRQKS5cbiAgICogYG51bGxgIHNpIG5pbmd1bmEgZnVlbnRlIGVzdMOhIGRpc3BvbmlibGUgbyBhw7puIG5vIGNhcmfDsy5cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdFZlcnNpb246IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXBwQ29uZmlnPy5yZW1vdGVWZXJzaW9uKCkgPz8gdGhpcy5yZW1vdGVDb25maWcoKT8udmVyc2lvbiA/PyBudWxsXG4gICk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBsYSB2ZXJzacOzbjpcbiAgICogLSBgdXBkYXRlLXJlcXVpcmVkYCDigJQgbGEgdmVyc2nDs24gbG9jYWwgcXVlZMOzIHBvciBkZWJham8gZGUgYG1pblZlcnNpb25gLiBIYXJkIGdhdGUuXG4gICAqIC0gYHVwZGF0ZS1hdmFpbGFibGVgIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZ1NlcnZpY2UgbyBwbHVnaW4gSFRUUCBkZXRlY3Rhcm9uIHZlcnNpw7NuIG51ZXZhLlxuICAgKiAtIGB1cC10by1kYXRlYCDigJQgZW4gY3VhbHF1aWVyIG90cm8gY2Fzby5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEFwcFZlcnNpb25TdGF0dXM+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIDEuIEhhcmQgZ2F0ZSDigJQgbWluVmVyc2lvbiBkZSBBcHBDb25maWdTZXJ2aWNlIG8gZGVsIHBsdWdpbiBIVFRQLlxuICAgIGNvbnN0IG1pblZlcnNpb24gPVxuICAgICAgdGhpcy5hcHBDb25maWc/LmFwcENvbmZpZygpPy5taW5WZXJzaW9uID8/IHRoaXMucmVtb3RlQ29uZmlnKCk/Lm1pblZlcnNpb247XG4gICAgaWYgKG1pblZlcnNpb24gJiYgaXNWZXJzaW9uTG93ZXIodGhpcy5jdXJyZW50VmVyc2lvbigpLCBtaW5WZXJzaW9uKSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtcmVxdWlyZWQnO1xuICAgIH1cblxuICAgIC8vIDIuIFVwZGF0ZSBvcGNpb25hbCDigJQgU1cgYnVuZGxlIGxpc3RvLCBBcHBDb25maWcsIG8gcGx1Z2luIEhUVFAgbcOhcyBudWV2by5cbiAgICBjb25zdCByZW1vdGVMYXRlc3QgPSB0aGlzLnJlbW90ZUNvbmZpZygpPy52ZXJzaW9uO1xuICAgIGNvbnN0IGhhc1JlbW90ZVVwZGF0ZSA9IHJlbW90ZUxhdGVzdFxuICAgICAgPyBpc1ZlcnNpb25Mb3dlcih0aGlzLmN1cnJlbnRWZXJzaW9uKCksIHJlbW90ZUxhdGVzdClcbiAgICAgIDogZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zd1VwZGF0ZVJlYWR5KCkgfHwgdGhpcy5hcHBDb25maWc/Lmhhc1VwZGF0ZSgpIHx8IGhhc1JlbW90ZVVwZGF0ZSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtYXZhaWxhYmxlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VwLXRvLWRhdGUnO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLndpcmVTZXJ2aWNlV29ya2VyKCk7XG4gICAgaWYgKHRoaXMucmVtb3RlUGx1Z2luKSB7XG4gICAgICB0aGlzLndpcmVSZW1vdGVQbHVnaW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUMOaQkxJQ09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgbGEgYWN0dWFsaXphY2nDs24gcGVuZGllbnRlLlxuICAgKlxuICAgKiBTaSBoYXkgdW4gcGx1Z2luIGRlIHBsYXRhZm9ybWEgKG5hdGl2by9DYXBhY2l0b3IpLCBkZWxlZ2EgZW4gw6lsIChlai4gUGxheSBTdG9yZSkuXG4gICAqIFNpIG5vLCBhY3RpdmEgbGEgdmVyc2nDs24gU1cgc2kgZXN0w6EgZGlzcG9uaWJsZSB5IHJlY2FyZ2EgbGEgcMOhZ2luYS5cbiAgICovXG4gIGFzeW5jIGFwcGx5VXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtUGx1Z2luKSB7XG4gICAgICBhd2FpdCB0aGlzLnBsYXRmb3JtUGx1Z2luLmFwcGx5VXBkYXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zd1VwZGF0ZS5hY3RpdmF0ZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGFjdGl2YXRlVXBkYXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzY2FydGEgZWwgYmFubmVyIGRlIGFjdHVhbGl6YWNpw7NuIG9wY2lvbmFsLlxuICAgKiBObyB0aWVuZSBlZmVjdG8gc29icmUgZWwgZXN0YWRvIGB1cGRhdGUtcmVxdWlyZWRgIChoYXJkIGdhdGUpLlxuICAgKi9cbiAgZGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNtaXNzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1ZXJ6YSB1biBjaGVxdWVvOiBTVyArIHBsdWdpbiBIVFRQIChzaSBleGlzdGUpLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tOb3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkXG4gICAgICAgID8gdGhpcy5zd1VwZGF0ZS5jaGVja0ZvclVwZGF0ZSgpLmNhdGNoKGVyciA9PlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGNoZWNrRm9yVXBkYXRlIGZhaWxlZDonLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVtb3RlUGx1Z2luID8gdGhpcy5sb2FkUmVtb3RlQ29uZmlnKCkgOiB1bmRlZmluZWQsXG4gICAgXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFET1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYHZlcnNpb25VcGRhdGVzYCwgcHJvZ3JhbWEgY2hlcXVlb3MgcGVyacOzZGljb3MgeSByZWFjY2lvbmEgYWxcbiAgICogdm9sdmVyIGxhIGFwcCBhIGZvcmVncm91bmQuIFNvbG8gYWN0w7phIHNpIGVsIFNXIGVzdMOhIGhhYmlsaXRhZG8uXG4gICAqL1xuICBwcml2YXRlIHdpcmVTZXJ2aWNlV29ya2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAvLyBCdW5kbGUgbnVldm8gZGVzY2FyZ2FkbyB5IGxpc3RvLlxuICAgIHRoaXMuc3dVcGRhdGUudmVyc2lvblVwZGF0ZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZ0ID0+IGV2dC50eXBlID09PSAnVkVSU0lPTl9SRUFEWScpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN3VXBkYXRlUmVhZHkuc2V0KHRydWUpKTtcblxuICAgIC8vIFNXIGVuIGVzdGFkbyBpcnJlY3VwZXJhYmxlIOKAlCBsYSBjYWNow6kgZGVsIHNlcnZpY2Ugd29ya2VyIHNlIGNvcnJvbXBpw7Mgb1xuICAgIC8vIGZ1ZSBwYXJjaWFsbWVudGUgZXZpY3RhZGEgKGNvbcO6biBlbiBQV0FzIHN0YW5kYWxvbmUgZGUgaU9TIHRyYXMgZGVwbG95c1xuICAgIC8vIHJlcGV0aWRvcykuIExhIGFwcCBubyBwdWVkZSBjYXJnYXIgc3VzIGFzc2V0cyDihpIgcGFudGFsbGEgZW4gYmxhbmNvLlxuICAgIC8vIFJlY3VwZXJhY2nDs24gcmVjb21lbmRhZGEgcG9yIEFuZ3VsYXI6IHJlY2FyZ2FyIHBhcmEgdHJhZXIgdG9kbyBmcmVzY29cbiAgICAvLyBkZXNkZSBsYSByZWQuXG4gICAgdGhpcy5zd1VwZGF0ZS51bnJlY292ZXJhYmxlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQXBwVmVyc2lvblNlcnZpY2VdIFNXIHVucmVjb3ZlcmFibGUg4oCUIHJlbG9hZGluZzonLCBldmVudC5yZWFzb24pO1xuICAgICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnRlcnZhbE1zID1cbiAgICAgIHRoaXMuc2VydmljZUNvbmZpZz8uY2hlY2tJbnRlcnZhbE1zID8/IERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcuY2hlY2tJbnRlcnZhbE1zO1xuXG4gICAgaW50ZXJ2YWwoaW50ZXJ2YWxNcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB2b2lkIHRoaXMuY2hlY2tOb3coKSk7XG5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgdm9pZCB0aGlzLmNoZWNrTm93KCk7XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKSk7XG5cbiAgICB2b2lkIHRoaXMuY2hlY2tOb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBjb25maWcgcmVtb3RhIHZpYSBwbHVnaW4gSFRUUCBhbCBpbmljaW8sIGVuIGZvcmVncm91bmQgeSBlbiBlbCBpbnRlcnZhbG8gcGVyacOzZGljby5cbiAgICogU29sbyBzZSBsbGFtYSBzaSBgcmVtb3RlUGx1Z2luYCBlc3TDoSBwcm92aXN0by5cbiAgICovXG4gIHByaXZhdGUgd2lyZVJlbW90ZVBsdWdpbigpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9XG4gICAgICB0aGlzLnNlcnZpY2VDb25maWc/LmNoZWNrSW50ZXJ2YWxNcyA/PyBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLmNoZWNrSW50ZXJ2YWxNcztcblxuICAgIGludGVydmFsKGludGVydmFsTXMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdm9pZCB0aGlzLmxvYWRSZW1vdGVDb25maWcoKSk7XG5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgdm9pZCB0aGlzLmxvYWRSZW1vdGVDb25maWcoKTtcbiAgICB9O1xuICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJsZSk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5yZW1vdGVQbHVnaW4hLmdldFJlbW90ZUNvbmZpZygpO1xuICAgICAgdGhpcy5yZW1vdGVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gcmVtb3RlIGNvbmZpZyBmZXRjaCBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLG1CQUFtQixHQUNwQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBS0wsa0NBQWtDLEdBQ25DLE1BQU0sU0FBUyxDQUFDOztBQUVqQjs7Ozs7R0FLRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFHRCxNQUFNLE9BQU8saUJBQWlCO0lBNEU1QjtRQTNFQSxrRUFBa0U7UUFDakQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSw4REFBOEQ7UUFDN0MsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELGtCQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakYsdUZBQXVGO1FBQ3RFLG1CQUFjLEdBQUcsTUFBTSxDQUEyQiwyQkFBMkIsRUFBRTtZQUM5RixRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUNILG1GQUFtRjtRQUNsRSxpQkFBWSxHQUFHLE1BQU0sQ0FBeUIseUJBQXlCLEVBQUU7WUFDeEYsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFDYyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakQseUVBQXlFO1FBQ3hELGtCQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9DLHlGQUF5RjtRQUN4RSxpQkFBWSxHQUFHLE1BQU0sQ0FBZ0MsSUFBSSxDQUFDLENBQUM7UUFFNUU7OztXQUdHO1FBQ2MsZUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxjQUFTLEdBQW9CLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbkUsOEVBQThFO1FBQzlFLG1CQUFtQjtRQUNuQiw4RUFBOEU7UUFFOUU7OztXQUdHO1FBQ00sbUJBQWMsR0FBbUIsUUFBUSxDQUNoRCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGNBQWMsSUFBSSxPQUFPLENBQ3BELENBQUM7UUFFRjs7O1dBR0c7UUFDTSxrQkFBYSxHQUEwQixRQUFRLENBQ3RELEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQzlFLENBQUM7UUFFRjs7Ozs7V0FLRztRQUNNLFdBQU0sR0FBNkIsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4RCxtRUFBbUU7WUFDbkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLFVBQVUsQ0FBQztZQUM5RixJQUFJLFVBQVUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BFLE9BQU8saUJBQWlCLENBQUM7WUFDM0IsQ0FBQztZQUVELDRFQUE0RTtZQUM1RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsT0FBTyxDQUFDO1lBQ2xELE1BQU0sZUFBZSxHQUFHLFlBQVk7Z0JBQ2xDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLFlBQVksQ0FBQztnQkFDckQsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUVWLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQzNFLE9BQU8sa0JBQWtCLENBQUM7WUFDNUIsQ0FBQztZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBR0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsbUJBQW1CO0lBQ25CLDhFQUE4RTtJQUU5RTs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM3Qix3RUFBd0U7Z0JBQ3hFLHdFQUF3RTtnQkFDeEUscUVBQXFFO2dCQUNyRSx5RUFBeUU7Z0JBQ3pFLG9FQUFvRTtnQkFDcEUsc0NBQXNDO2dCQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7b0JBQzFCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQzVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQzt3QkFDMUIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7b0JBQ2pELENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO29CQUN6QixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLGNBQWMsQ0FBQyxTQUFpQjtRQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hGLE9BQU8sSUFBSSxPQUFPLENBQU8sT0FBTyxDQUFDLEVBQUU7WUFDakMsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxPQUFPO29CQUFFLE9BQU87Z0JBQ3BCLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ2YsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNsQixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDO1lBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxDQUM1QyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUztnQkFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO3FCQUNWLGNBQWMsRUFBRTtxQkFDaEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEYsQ0FBQyxDQUFDLFNBQVM7WUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUN4RCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLFVBQVU7SUFDViw4RUFBOEU7SUFFOUU7OztPQUdHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVM7WUFBRSxPQUFPO1FBRXRDLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWM7YUFDekIsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLEVBQzNDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDcEM7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVqRCwwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEYsT0FBTyxDQUFDLEtBQUssQ0FBQyxtREFBbUQsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9DLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLElBQUksa0NBQWtDLENBQUMsZUFBZSxDQUFDO1FBRTVGLFFBQVEsQ0FBQyxVQUFVLENBQUM7YUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDM0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsS0FBSyxTQUFTO2dCQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hFLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQ2pFLENBQUM7UUFFRixLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCO1FBQ3RCLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFN0IsTUFBTSxVQUFVLEdBQ2QsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLElBQUksa0NBQWtDLENBQUMsZUFBZSxDQUFDO1FBRTVGLFFBQVEsQ0FBQyxVQUFVLENBQUM7YUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUN6QyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRWpELE1BQU0sU0FBUyxHQUFHLEdBQVMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVM7Z0JBQUUsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoRixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUNqRSxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxnQkFBZ0I7UUFDNUIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsWUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxpREFBaUQsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RSxDQUFDO0lBQ0gsQ0FBQzsrR0F4UFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwVmVyc2lvblNlcnZpY2VcbiAqXG4gKiBWZXJpZmljYWNpw7NuIGRlIHZlcnNpw7NuIGRlIGxhIGFwcCBwYXJhIFBXQSAvIHdlYiAvIENhcGFjaXRvci5cbiAqXG4gKiBVbmlmaWNhIHRyZXMgc2XDsWFsZXMgcGFyYSBkZXRlY3RhciBhY3R1YWxpemFjaW9uZXM6XG4gKlxuICogMS4gYFN3VXBkYXRlYCAoYEBhbmd1bGFyL3NlcnZpY2Utd29ya2VyYCkg4oCUIGVsIGV2ZW50byBgVkVSU0lPTl9SRUFEWWAgaW5kaWNhXG4gKiAgICBxdWUgdW4gYnVuZGxlIG51ZXZvIGZ1ZSBkZXNjYXJnYWRvIHkgZXN0w6EgbGlzdG8gcGFyYSBhY3RpdmFyc2UuIFNvbG8gZXN0w6FcbiAqICAgIGRpc3BvbmlibGUgY3VhbmRvIGVsIHNlcnZpY2Ugd29ya2VyIGVzdMOhIHJlZ2lzdHJhZG8gKGJ1aWxkIGRlIHByb2R1Y2Npw7NuKS5cbiAqICAgIEFkZW3DoXMgc2UgY2hlcXVlYSBwcm9hY3RpdmFtZW50ZSBjYWRhIGBjaGVja0ludGVydmFsTXNgIHkgY2FkYSB2ZXogcXVlIGxhXG4gKiAgICBhcHAgdnVlbHZlIGEgZm9yZWdyb3VuZCAoYHZpc2liaWxpdHljaGFuZ2VgKS5cbiAqXG4gKiAyLiBgQXBwQ29uZmlnU2VydmljZWAgKGNvbmZpZyByZW1vdG8gZW4gRmlyZXN0b3JlKSDigJQgZXhwb25lIGB2ZXJzaW9uYFxuICogICAgKMO6bHRpbWEgdmVyc2nDs24gcHVibGljYWRhKSB5IGBtaW5WZXJzaW9uYCAodmVyc2nDs24gbcOtbmltYSBzb3BvcnRhZGEpLlxuICogICAgU2UgdXNhIHBhcmEgbGEgcG9sw610aWNhIGRlIGFjdHVhbGl6YWNpw7NuIG9ibGlnYXRvcmlhIChoYXJkIGdhdGUpLlxuICpcbiAqIDMuIGBBcHBWZXJzaW9uUmVtb3RlUGx1Z2luYCAoSFRUUCkg4oCUIGFsdGVybmF0aXZhIGEgQXBwQ29uZmlnU2VydmljZSBwYXJhIGFwcHNcbiAqICAgIHNpbiBGaXJlYmFzZS4gUHJvdmlzdG8gdmlhIGBwcm92aWRlVmFsdGVjaEFwcFZlcnNpb25IdHRwYC4gRXhwb25lIGVsIG1pc21vXG4gKiAgICBjb250cmF0byAoYHZlcnNpb25gIC8gYG1pblZlcnNpb25gKS4gU2UgY2hlcXVlYSBlbiBsb3MgbWlzbW9zIGludGVydmFsb3NcbiAqICAgIHF1ZSBlbCBTVy5cbiAqXG4gKiBMYXMgdHJlcyBkZXBlbmRlbmNpYXMgc2UgaW55ZWN0YW4gY29tbyBvcGNpb25hbGVzLlxuICovXG5cbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUsIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBTd1VwZGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3NlcnZpY2Utd29ya2VyJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFQUF9WRVJTSU9OX1BMQVRGT1JNX1BMVUdJTixcbiAgQVBQX1ZFUlNJT05fUkVNT1RFX1BMVUdJTixcbiAgVkFMVEVDSF9BUFBfVkVSU0lPTixcbn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luLFxuICBBcHBWZXJzaW9uUmVtb3RlQ29uZmlnLFxuICBBcHBWZXJzaW9uUmVtb3RlUGx1Z2luLFxuICBBcHBWZXJzaW9uU3RhdHVzLFxuICBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBNw6F4aW1vIHF1ZSBgYXBwbHlVcGRhdGVgIGVzcGVyYSBwb3IgZWwgYFZFUlNJT05fUkVBRFlgIGRlbCBTVyBhbnRlcyBkZSByZWNhcmdhclxuICogaWd1YWwuIEN1YnJlIGVsIGNhc28gZW4gcXVlIGVsIHVwZGF0ZSBsbyBkZXRlY3TDsyBlbCBwYXRoIEhUVFAgYW50ZXMgZGUgcXVlIGVsXG4gKiBTVyBkZXNjYXJnYXJhIGVsIGJ1bmRsZSBudWV2byAoZXZpdGEgZWwgbG9vcCBkZSBiYW5uZXIpLiBTaSBlbCBTVyBudW5jYSBxdWVkYVxuICogbGlzdG8gKEFuZHJvaWQgQ2hyb21lKSwgcmVjYXJnYSBjb21vIMO6bHRpbW8gcmVjdXJzbyBhbCB2ZW5jZXIuXG4gKi9cbmNvbnN0IFNXX1JFQURZX1RJTUVPVVRfTVMgPSA4MDAwO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqIFBsdWdpbiBuYXRpdm8gb3BjaW9uYWw6IHByb3Zpc3RvIHBvciBhcHBzIENhcGFjaXRvciBwYXJhIFBsYXkgU3RvcmUgLyBBcHAgU3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1QbHVnaW4gPSBpbmplY3Q8QXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luPihBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIC8qKiBQbHVnaW4gSFRUUCBvcGNpb25hbDogYWx0ZXJuYXRpdmEgYSBBcHBDb25maWdTZXJ2aWNlIHBhcmEgYXBwcyBzaW4gRmlyZWJhc2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlUGx1Z2luID0gaW5qZWN0PEFwcFZlcnNpb25SZW1vdGVQbHVnaW4+KEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqIFRydWUgY3VhbmRvIGVsIFNXIHJlcG9ydMOzIHVuIGJ1bmRsZSBudWV2byBsaXN0byAoYFZFUlNJT05fUkVBRFlgKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzd1VwZGF0ZVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQ29uZmlnIHJlbW90YSBjYXJnYWRhIHBvciBlbCBwbHVnaW4gSFRUUC4gTnVsbCBoYXN0YSBxdWUgY2FyZ2EgbyBzaSBubyBoYXkgcGx1Z2luLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW90ZUNvbmZpZyA9IHNpZ25hbDxBcHBWZXJzaW9uUmVtb3RlQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRydWUgY3VhbmRvIGVsIHVzdWFyaW8gZGVzY2FydMOzIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogRWwgYmFubmVyIG9ibGlnYXRvcmlvIChgdXBkYXRlLXJlcXVpcmVkYCkgaWdub3JhIGVzdGUgZmxhZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc21pc3NlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc21pc3NlZDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZGlzbWlzc2VkLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0lHTkFMUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZlcnNpw7NuIGxvY2FsIGRlbCBidWlsZCBhY3R1YWwgZGUgbGEgYXBwLlxuICAgKiBQcm92aWVuZSBkZWwgcHJvdmlkZXIgYHByb3ZpZGVWYWx0ZWNoQXBwVmVyc2lvbih7IGN1cnJlbnRWZXJzaW9uIH0pYC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VydmljZUNvbmZpZz8uY3VycmVudFZlcnNpb24gPz8gJzAuMC4wJ1xuICApO1xuXG4gIC8qKlxuICAgKiDDmmx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSBzZWfDum4gZWwgY29uZmlnIHJlbW90byAoQXBwQ29uZmlnU2VydmljZSBvIHBsdWdpbiBIVFRQKS5cbiAgICogYG51bGxgIHNpIG5pbmd1bmEgZnVlbnRlIGVzdMOhIGRpc3BvbmlibGUgbyBhw7puIG5vIGNhcmfDsy5cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdFZlcnNpb246IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXBwQ29uZmlnPy5yZW1vdGVWZXJzaW9uKCkgPz8gdGhpcy5yZW1vdGVDb25maWcoKT8udmVyc2lvbiA/PyBudWxsXG4gICk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBsYSB2ZXJzacOzbjpcbiAgICogLSBgdXBkYXRlLXJlcXVpcmVkYCDigJQgbGEgdmVyc2nDs24gbG9jYWwgcXVlZMOzIHBvciBkZWJham8gZGUgYG1pblZlcnNpb25gLiBIYXJkIGdhdGUuXG4gICAqIC0gYHVwZGF0ZS1hdmFpbGFibGVgIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZ1NlcnZpY2UgbyBwbHVnaW4gSFRUUCBkZXRlY3Rhcm9uIHZlcnNpw7NuIG51ZXZhLlxuICAgKiAtIGB1cC10by1kYXRlYCDigJQgZW4gY3VhbHF1aWVyIG90cm8gY2Fzby5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEFwcFZlcnNpb25TdGF0dXM+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIDEuIEhhcmQgZ2F0ZSDigJQgbWluVmVyc2lvbiBkZSBBcHBDb25maWdTZXJ2aWNlIG8gZGVsIHBsdWdpbiBIVFRQLlxuICAgIGNvbnN0IG1pblZlcnNpb24gPSB0aGlzLmFwcENvbmZpZz8uYXBwQ29uZmlnKCk/Lm1pblZlcnNpb24gPz8gdGhpcy5yZW1vdGVDb25maWcoKT8ubWluVmVyc2lvbjtcbiAgICBpZiAobWluVmVyc2lvbiAmJiBpc1ZlcnNpb25Mb3dlcih0aGlzLmN1cnJlbnRWZXJzaW9uKCksIG1pblZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gJ3VwZGF0ZS1yZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgLy8gMi4gVXBkYXRlIG9wY2lvbmFsIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZywgbyBwbHVnaW4gSFRUUCBtw6FzIG51ZXZvLlxuICAgIGNvbnN0IHJlbW90ZUxhdGVzdCA9IHRoaXMucmVtb3RlQ29uZmlnKCk/LnZlcnNpb247XG4gICAgY29uc3QgaGFzUmVtb3RlVXBkYXRlID0gcmVtb3RlTGF0ZXN0XG4gICAgICA/IGlzVmVyc2lvbkxvd2VyKHRoaXMuY3VycmVudFZlcnNpb24oKSwgcmVtb3RlTGF0ZXN0KVxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN3VXBkYXRlUmVhZHkoKSB8fCB0aGlzLmFwcENvbmZpZz8uaGFzVXBkYXRlKCkgfHwgaGFzUmVtb3RlVXBkYXRlKSB7XG4gICAgICByZXR1cm4gJ3VwZGF0ZS1hdmFpbGFibGUnO1xuICAgIH1cblxuICAgIHJldHVybiAndXAtdG8tZGF0ZSc7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMud2lyZVNlcnZpY2VXb3JrZXIoKTtcbiAgICBpZiAodGhpcy5yZW1vdGVQbHVnaW4pIHtcbiAgICAgIHRoaXMud2lyZVJlbW90ZVBsdWdpbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNw4lUT0RPUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwbGljYSBsYSBhY3R1YWxpemFjacOzbiBwZW5kaWVudGUuXG4gICAqXG4gICAqIFNpIGhheSB1biBwbHVnaW4gZGUgcGxhdGFmb3JtYSAobmF0aXZvL0NhcGFjaXRvciksIGRlbGVnYSBlbiDDqWwgKGVqLiBQbGF5IFN0b3JlKS5cbiAgICogU2kgbm8sIGFjdGl2YSBsYSB2ZXJzacOzbiBTVyBzaSBlc3TDoSBkaXNwb25pYmxlIHkgcmVjYXJnYSBsYSBww6FnaW5hLlxuICAgKi9cbiAgYXN5bmMgYXBwbHlVcGRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm1QbHVnaW4pIHtcbiAgICAgIGF3YWl0IHRoaXMucGxhdGZvcm1QbHVnaW4uYXBwbHlVcGRhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkge1xuICAgICAgICAvLyBTaSBsYSBhY3R1YWxpemFjacOzbiBzZSBkZXRlY3TDsyBwb3IgZWwgcGF0aCBIVFRQICgvdmVyc2lvbi5qc29uKSBBTlRFU1xuICAgICAgICAvLyBkZSBxdWUgZWwgU1cgZGVzY2FyZ3VlIGVsIGJ1bmRsZSBudWV2bywgYHN3VXBkYXRlUmVhZHlgIGHDum4gZXMgZmFsc2U6XG4gICAgICAgIC8vIHJlY2FyZ2FyIGFob3JhIHZvbHZlcsOtYSBhIGNhcmdhciBlbCBNSVNNTyBidW5kbGUgdmllam8geSBlbCBiYW5uZXJcbiAgICAgICAgLy8gcmVhcGFyZWNlcsOtYSAobG9vcCBkZSBcImFjdHVhbGl6YXIgTiB2ZWNlc1wiKS4gUGVkaW1vcyBhbCBTVyBxdWUgY2hlcXVlZVxuICAgICAgICAvLyB5IGVzcGVyYW1vcyBhIHF1ZSBlbCBidW5kbGUgcXVlZGUgbGlzdG8gKGNvbiB0aW1lb3V0KSBwYXJhIHF1ZSBlbFxuICAgICAgICAvLyByZWxvYWQgcmVhbG1lbnRlIGNhbWJpZSBkZSB2ZXJzacOzbi5cbiAgICAgICAgaWYgKCF0aGlzLnN3VXBkYXRlUmVhZHkoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3dVcGRhdGUuY2hlY2tGb3JVcGRhdGUoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgICAgIGlmICghdGhpcy5zd1VwZGF0ZVJlYWR5KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN3UmVhZHkoU1dfUkVBRFlfVElNRU9VVF9NUyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN3VXBkYXRlUmVhZHkoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3dVcGRhdGUuYWN0aXZhdGVVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGFjdGl2YXRlVXBkYXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXNwZXJhIGEgcXVlIGVsIFNXIHJlcG9ydGUgdW4gYnVuZGxlIG51ZXZvIGxpc3RvIChgVkVSU0lPTl9SRUFEWWApLCBvIGhhc3RhXG4gICAqIGB0aW1lb3V0TXNgLiBFdml0YSBlbCByZWxvYWQgXCJlbiBzZWNvXCIgY3VhbmRvIGVsIHVwZGF0ZSBsbyBkZXRlY3TDsyBlbCBwYXRoXG4gICAqIEhUVFAgYW50ZXMgZGUgcXVlIGVsIFNXIGRlc2NhcmdhcmEgZWwgYnVuZGxlLiBTaSBlbCB0aW1lb3V0IHZlbmNlIChlai5cbiAgICogQW5kcm9pZCBDaHJvbWUgZG9uZGUgVkVSU0lPTl9SRUFEWSBlcyBwb2NvIGNvbmZpYWJsZSksIHJlc3VlbHZlIGlndWFsIHkgZWxcbiAgICogY2FsbGVyIHJlY2FyZ2EgY29tbyDDumx0aW1vIHJlY3Vyc28uXG4gICAqL1xuICBwcml2YXRlIHdhaXRGb3JTd1JlYWR5KHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3dVcGRhdGVSZWFkeSgpIHx8ICF0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgZmluaXNoID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLnN3VXBkYXRlIS52ZXJzaW9uVXBkYXRlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZ0ID0+IGV2dC50eXBlID09PSAnVkVSU0lPTl9SRUFEWScpXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiBmaW5pc2goKSk7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoZmluaXNoLCB0aW1lb3V0TXMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2NhcnRhIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogTm8gdGllbmUgZWZlY3RvIHNvYnJlIGVsIGVzdGFkbyBgdXBkYXRlLXJlcXVpcmVkYCAoaGFyZCBnYXRlKS5cbiAgICovXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzbWlzc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdWVyemEgdW4gY2hlcXVlbzogU1cgKyBwbHVnaW4gSFRUUCAoc2kgZXhpc3RlKS5cbiAgICovXG4gIGFzeW5jIGNoZWNrTm93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZFxuICAgICAgICA/IHRoaXMuc3dVcGRhdGVcbiAgICAgICAgICAgIC5jaGVja0ZvclVwZGF0ZSgpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IGNvbnNvbGUud2FybignW0FwcFZlcnNpb25TZXJ2aWNlXSBjaGVja0ZvclVwZGF0ZSBmYWlsZWQ6JywgZXJyKSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlbW90ZVBsdWdpbiA/IHRoaXMubG9hZFJlbW90ZUNvbmZpZygpIDogdW5kZWZpbmVkLFxuICAgIF0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBRE9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGB2ZXJzaW9uVXBkYXRlc2AsIHByb2dyYW1hIGNoZXF1ZW9zIHBlcmnDs2RpY29zIHkgcmVhY2Npb25hIGFsXG4gICAqIHZvbHZlciBsYSBhcHAgYSBmb3JlZ3JvdW5kLiBTb2xvIGFjdMO6YSBzaSBlbCBTVyBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlU2VydmljZVdvcmtlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgLy8gQnVuZGxlIG51ZXZvIGRlc2NhcmdhZG8geSBsaXN0by5cbiAgICB0aGlzLnN3VXBkYXRlLnZlcnNpb25VcGRhdGVzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2dCA9PiBldnQudHlwZSA9PT0gJ1ZFUlNJT05fUkVBRFknKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zd1VwZGF0ZVJlYWR5LnNldCh0cnVlKSk7XG5cbiAgICAvLyBTVyBlbiBlc3RhZG8gaXJyZWN1cGVyYWJsZSDigJQgbGEgY2FjaMOpIGRlbCBzZXJ2aWNlIHdvcmtlciBzZSBjb3Jyb21wacOzIG9cbiAgICAvLyBmdWUgcGFyY2lhbG1lbnRlIGV2aWN0YWRhIChjb23Dum4gZW4gUFdBcyBzdGFuZGFsb25lIGRlIGlPUyB0cmFzIGRlcGxveXNcbiAgICAvLyByZXBldGlkb3MpLiBMYSBhcHAgbm8gcHVlZGUgY2FyZ2FyIHN1cyBhc3NldHMg4oaSIHBhbnRhbGxhIGVuIGJsYW5jby5cbiAgICAvLyBSZWN1cGVyYWNpw7NuIHJlY29tZW5kYWRhIHBvciBBbmd1bGFyOiByZWNhcmdhciBwYXJhIHRyYWVyIHRvZG8gZnJlc2NvXG4gICAgLy8gZGVzZGUgbGEgcmVkLlxuICAgIHRoaXMuc3dVcGRhdGUudW5yZWNvdmVyYWJsZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwcFZlcnNpb25TZXJ2aWNlXSBTVyB1bnJlY292ZXJhYmxlIOKAlCByZWxvYWRpbmc6JywgZXZlbnQucmVhc29uKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9XG4gICAgICB0aGlzLnNlcnZpY2VDb25maWc/LmNoZWNrSW50ZXJ2YWxNcyA/PyBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLmNoZWNrSW50ZXJ2YWxNcztcblxuICAgIGludGVydmFsKGludGVydmFsTXMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdm9pZCB0aGlzLmNoZWNrTm93KCkpO1xuXG4gICAgY29uc3Qgb25WaXNpYmxlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHZvaWQgdGhpcy5jaGVja05vdygpO1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpXG4gICAgKTtcblxuICAgIHZvaWQgdGhpcy5jaGVja05vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcmdhIGNvbmZpZyByZW1vdGEgdmlhIHBsdWdpbiBIVFRQIGFsIGluaWNpbywgZW4gZm9yZWdyb3VuZCB5IGVuIGVsIGludGVydmFsbyBwZXJpw7NkaWNvLlxuICAgKiBTb2xvIHNlIGxsYW1hIHNpIGByZW1vdGVQbHVnaW5gIGVzdMOhIHByb3Zpc3RvLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlUmVtb3RlUGx1Z2luKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5sb2FkUmVtb3RlQ29uZmlnKCk7XG5cbiAgICBjb25zdCBpbnRlcnZhbE1zID1cbiAgICAgIHRoaXMuc2VydmljZUNvbmZpZz8uY2hlY2tJbnRlcnZhbE1zID8/IERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcuY2hlY2tJbnRlcnZhbE1zO1xuXG4gICAgaW50ZXJ2YWwoaW50ZXJ2YWxNcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpKTtcblxuICAgIGNvbnN0IG9uVmlzaWJsZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpO1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5yZW1vdGVQbHVnaW4hLmdldFJlbW90ZUNvbmZpZygpO1xuICAgICAgdGhpcy5yZW1vdGVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gcmVtb3RlIGNvbmZpZyBmZXRjaCBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==