@coolon/angular-ui-powerups 0.0.107 → 0.0.108

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.
@@ -699,10 +699,14 @@ if (false) {
699
699
  */
700
700
  onRouterCancelled(event) {
701
701
  // Depending on the state of the router and what was done we get a different
702
- // sequence of events. I.e. If they just clicked a link we'll get a cancel
703
- // with the locationChangeTriggerUrl as the final event. However the user
704
- // started the initial navigation with a pop state then we'll get one of
705
- // those with the locationChangeTriggerUrl but no cancel event with it.
702
+ // sequence of events.
703
+ // If the navigation change was triggered by clicking a link we'll get a cancel with the locationChangeTriggerUrl as the final event.
704
+ // If the navigation change was triggered with a pop state then we'll get an onPopState with the locationChangeTriggerUrl but no cancel event with it.
705
+ if (this.gotPopStateWithLeavingUrl && this.interactionService.isActive()) {
706
+ /** @type {?} */
707
+ const interactionIds = this.interactionService.activeInteractionContextIds.value;
708
+ this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);
709
+ }
706
710
  return this.gotPopStateWithLeavingUrl || this.locationChangeTriggerUrl === event.url ? this.createIdleState() : this.ignore(event);
707
711
  }
708
712
  /**
@@ -779,4 +783,4 @@ if (false) {
779
783
  CancelledDuringNavigationInteraction.prototype.locationChangeTriggerUrl;
780
784
  }
781
785
  })(NavigationState || (NavigationState = {}));
782
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE1RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUUzRixNQUFNLE9BQWdCLGVBQWdCLFNBQVEsZ0JBQWdCOzs7O0lBUTVELFlBQStCLE9BQWdDO1FBQzdELEtBQUssRUFBRSxDQUFDO1FBRHFCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBTnZELFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQVFwRCxDQUFDOzs7O0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDOzs7O0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDOUIsQ0FBQzs7OztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbEMsQ0FBQzs7OztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUN6QyxDQUFDOzs7O0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFZO1FBQ3JCLElBQUksQ0FBQyxPQUFP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QjtnREFBRyxlQUFlO2lGQU8xRDtJQTVCVSxvREFBb0MsdUNBMERoRCxDQUFBOzs7UUF4REMsMERBQTRCOzs7OztRQUM1Qix5RUFBMEM7O1FBRzlCLDJEQUE0Qjs7UUFDNUIseUVBQTJDOztRQUMzQyx3RUFBeUM7O0FBbUR6RCxDQUFDLEVBMVRnQixlQUFlLEtBQWYsZUFBZSxRQTBUL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyRXZlbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNsLCBHYXJiYWdlQ29sbGVjdG9yLCBsYW5nLCBMb2dnZXIsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgUGxhY2VSb3V0ZXIgfSBmcm9tICcuLi9wbGFjZS1yb3V0ZXInO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuLi92aXNpdCc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIgfSBmcm9tICcuL3BsYWNlLWNvbXBvbmVudC1kZWFjdGl2YXRpb24taGFuZGxlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIF92aXNpdHMgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXQ+KCk7XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWw6IGJvb2xlYW47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmc7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzUG9wU3RhdGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIGdldCBpZGxlKCkge1xuICAgIHJldHVybiAhdGhpcy5pc1RyYW5zaXRpb25hbDtcbiAgfVxuXG4gIGdldCBwbGFjZVJvdXRlcigpOiBQbGFjZVJvdXRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5wbGFjZVJvdXRlcjtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvblNlcnZpY2UoKTogSW50ZXJhY3Rpb25TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZTtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0b3JlVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5fdmlzaXRzLnNldCh2aXNpdC5wbGFjZURlZmluaXRpb24sIHZpc2l0KTtcbiAgfVxuXG4gIGdldFZpc2l0Rm9yKHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaXRzLmdldChwbGFjZURlZik7XG4gIH1cblxuICBvblBsYWNlTmF2aWdhdGlvblN0YXJ0KHZpc2l0OiBWaXNpdCwgaW5pdGlhbFVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignb25QbGFjZU5hdmlnYXRpb25TdGFydCcpO1xuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24obmV3VXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKCdvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignY2FuRGVhY3RpdmF0ZVBsYWNlJyk7XG4gIH1cblxuICBnZXRWaXNpdHMoKTogVmlzaXRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdmlzaXRzLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbGxlZ2FsVHJhbnNpdGlvbjxSPihtZXNzYWdlOiBzdHJpbmcgfCBSb3V0ZXJFdmVudCk6IFIge1xuICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgJHttZXNzYWdlLnRvU3RyaW5nKCl9IG5vdCBzdXBwb3J0ZWQgYnkgJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBsYWNlUm91dGVyLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2l0aW9uU3RhdGVGb3IoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGNvbnN0IHBvcHN0YXRlID0gZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZSc7XG4gICAgcmV0dXJuIHBvcHN0YXRlID9cbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5Qb3BTdGF0ZVRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgIDpcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKSA6XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuTmF2aWdhdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSWRsZVN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpID9cbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZSh0aGlzLmNvbnRleHQpO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsKSB7XG4gICAgdGhpcy5wbGFjZVJvdXRlci5yZXNldEJyb3dzZXJMb2NhdGlvbih1cmwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTmF2aWdhdGlvblN0YXRlIHtcblxuICBleHBvcnQgY2xhc3MgQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBwbGFjZVJvdXRlcjogUGxhY2VSb3V0ZXIsXG4gICAgICByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSxcbiAgICAgIHJlYWRvbmx5IG5vdGlmeVN1Y2Nlc3M6IChzdWNjZXNzOiBOYXZpZ2F0aW9uU3RhdGUpID0+IHZvaWQpIHtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZSBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSBmYWxzZTtcbiAgICByZWFkb25seSBzdGFydGluZ1VybCA9IG51bGw7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdDogVmlzaXQsIGluaXRpYWxVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uVHJhbnNpdGlvbiA9IG5ldyBOYXZpZ2F0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGluaXRpYWxVcmwpO1xuICAgICAgbmF2aWdhdGlvblRyYW5zaXRpb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgICAvLyBjYWxsaW5nIGFuZ3VsYXJMb2NhdGlvbi5nbygpIHRvIGNsZWFyIGJhY2sgc3RhdGUgY2FuIHRyaWdnZXIgcm91dGVyIGN5Y2xlcyB0byB0aGUgY3VycmVudCB1cmwgaWYgd2UgZG9uJ3QgaWdub3JlIHRoZW1cbiAgICAgIGlmIChldmVudC51cmwgPT09IHRoaXMuY3VycmVudFJvdXRlclVybCgpKSB7XG4gICAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgbmF2aWdhdGlvbiBzdGFydGVkIHRvIHNhbWUgdXJsIC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGxhY2VSb3V0ZXIuaGFzQWN0aXZlSW50ZXJhY3Rpb25JZHMoZXZlbnQudXJsKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG5hdmlnYXRpb24gc3RhcnRlZCB3aXRoIGludGVyYWN0aW9uIG91dGxldCAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBldmVudC51cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSB0cnVlO1xuICAgIHByaXZhdGUgY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFBsYWNlQ29tcG9uZW50LCBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXI+KCk7XG4gICAgcHJpdmF0ZSBfaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLl9jcmVhdGVFeGNsdXNpdmVNb2RhbEludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAvLyB0aGUgaW50ZXJhY3Rpb24gY29udGV4dCBjYW4gYmUgZGV0YWNoZWQgZHVyaW5nIHRoZSBiYWNrIGJ1dHRvbiBjYW5jZWxsYXRpb24gc3RhdGUgdHJhbnNpdGlvblxuICAgICAgICAvLyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgYWN0aXZpdHlDYW5jZWxsYXRpb24gaXNuJ3QuICBPdGhlcndpc2UgZGlzcG9zZSB3aWxsIGJlXG4gICAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBjYW5jZWwgaWYgdGhlIGNvbnRleHQgaXMgZGlzcG9zZWQgc28gd2UgZG9uJ3QgaGF2ZSB3b3JyeSBhYm91dCBkZXRhY2hpbmcgZXRjLlxuICAgICAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBhY3RpdmUgc2Vzc2lvbnMgY2FuIGhhdmUgbWFueSBjYW5jZWwgc3RhcnQgY3ljbGVzIGR1ZVxuICAgICAgLy8gdG8gcGxhY2UgZ3VhcmQgcmVkaXJlY3RzXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHN1Y2NlZWRlZFxuICAgICAgdGhpcy5jb250ZXh0Lm5vdGlmeVN1Y2Nlc3ModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKGxvY2F0aW9uVHJpZ2dlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2VgKTtcbiAgICAgIC8vIGRldGFjaCB0aGUgaW50ZXJhY3Rpb24gZnJvbSB0aGUgc2Vzc2lvbiBzbyBpdCBkb2Vzbid0IGdldCBkaXNwb3NlZCB1bnRpbCB0aGUgYWN0aXZpdHkgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnRlcmFjdGlvbiA9IHRoaXMuZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aChuYXZpZ2F0aW9uSW50ZXJhY3Rpb24pO1xuICAgICAgLy8gVE9ETzogSSBuZWVkIHRvIG1ha2UgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBjb250ZXh0IGRpc2FsbG93IG5lc3RlZCBhY3Rpdml0aWVzIG9yXG4gICAgICAvLyAgICAgICB0aGF0IHdvdWxkIG1lc3MgdGhpbmdzIHVwIGVudGlyZWx5LiBPciwgY2FuIEkgZG8gYSBjb250ZXh0LmFib3J0QWxsKCkudGhlbiguLilcbiAgICAgIG5hdmlnYXRpb25JbnRlcmFjdGlvbi5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uZGlzcG9zZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IENhbmNlbGxlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsXG4gICAgICAgIHRoaXMuc3RhcnRpbmdVcmwsXG4gICAgICAgIHRoaXMuaXNQb3BTdGF0ZSxcbiAgICAgICAgbG9jYXRpb25UcmlnZ2VyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgLy8gbG9va3VwIHRoZSBoYW5kbGVyIGFuZCBjcmVhdGUgaXQgaWYgd2UndmUgbm90IHNlZW4gaXQgeWV0XG4gICAgICBsZXQgaGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuZ2V0KGNvbXBvbmVudCk7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgaXNQcmltYXJ5SGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2l6ZSA9PT0gMDsgLy8gb25seSBwcmltYXJ5IGhhbmRsZXIgY2FuY2VscyB0aGUgYXBwIG1vZGVsIGludGVyYXRpb25zXG4gICAgICAgIGhhbmRsZXIgPSBuZXcgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyKGNvbXBvbmVudCwgdGhpcywgaXNQcmltYXJ5SGFuZGxlcik7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlci5jYW5EZWFjdGl2YXRlKGN1cnJlbnRVcmwsIG5leHRVcmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHdhcyBhYm9ydGVkLlxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9KWA7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIFBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSB0cnVlO1xuXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTg2I2lzc3VlY29tbWVudC00MzI3OTU3MjBcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbygnV09SSy1BUk9VTkQ6IFVwZGF0aW5nIGJyb3dzZXIgbG9jYXRpb24gYWZ0ZXIgcG9wIHN0YXRlIC0gc2VlIGFuZ3VsYXIgaXNzdWUgIzEzNTg2Jyk7XG4gICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICBpZiAodGhpcy5jdXJyZW50Um91dGVyVXJsKCkgIT09IHRoaXMuc3RhcnRpbmdVcmwpIHtcbiAgICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oJ1dPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NicpO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZUR1cmluZ0ludGVyYWN0aW9uIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQ6IFZpc2l0LCBpbml0aWFsVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblRyYW5zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgaW5pdGlhbFVybCk7XG4gICAgICBuYXZpZ2F0aW9uVHJhbnNpdGlvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBuYXZpZ2F0aW9uVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbnRlcmFjdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0LCBzdGFydGluZ1VybCk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzdGF0ZSBleGlzdHMgdG8gaGFuZGxlIGFsbCBldmVudHMgd2hpbGUgYW55IGtpbmQgb2YgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcy4gIFRoYXQgd2F5IGFsbCBvdGhlciBzdGF0ZXMgY2FuXG4gICAqIGhhcHBpbHkgaWdub3JlIGludGVyYWN0aW9uIGNvbnRleHRzLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc3RhdGUgZXhpc3RzIHRvIGhhbmRsZSBhbGwgZXZlbnRzIHdoaWxlIGFueSBraW5kIG9mIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICBUaGF0IHdheSBhbGwgb3RoZXIgc3RhdGVzIGNhblxuICAgKiBoYXBwaWx5IGlnbm9yZSBpbnRlcmFjdGlvbiBjb250ZXh0cy5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gdHJ1ZTtcblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuXG4gIGV4cG9ydCBjbGFzcyBDYW5jZWxsZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24gZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHN0YXJ0aW5nRXZlbnRXYXNBUG9wU3RhdGU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIGdldCBpc1RyYW5zaXRpb25hbCgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSByb3V0ZXIgYW5kIHdoYXQgd2FzIGRvbmUgd2UgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAvLyBzZXF1ZW5jZSBvZiBldmVudHMuICBJLmUuICBJZiB0aGV5IGp1c3QgY2xpY2tlZCBhIGxpbmsgd2UnbGwgZ2V0IGEgY2FuY2VsXG4gICAgICAvLyB3aXRoIHRoZSBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmwgYXMgdGhlIGZpbmFsIGV2ZW50LiBIb3dldmVyIHRoZSB1c2VyXG4gICAgICAvLyBzdGFydGVkIHRoZSBpbml0aWFsIG5hdmlnYXRpb24gd2l0aCBhIHBvcCBzdGF0ZSB0aGVuIHdlJ2xsIGdldCBvbmUgb2ZcbiAgICAgIC8vIHRob3NlIHdpdGggdGhlIGxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCBidXQgbm8gY2FuY2VsIGV2ZW50IHdpdGggaXQuXG4gICAgICByZXR1cm4gdGhpcy5nb3RQb3BTdGF0ZVdpdGhMZWF2aW5nVXJsIHx8IHRoaXMubG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsID09PSBldmVudC51cmwgPyB0aGlzLmNyZWF0ZUlkbGVTdGF0ZSgpIDogdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCB8fCBldmVudC51cmwgPT09IHRoaXMubG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsO1xuICAgICAgcmV0dXJuIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlnbm9yZShldmVudDogUm91dGVyRXZlbnQsIHJlYXNvbj86IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZWFzb24gPSByZWFzb24gPyBgIC0+ICR7cmVhc29ufWAgOiAnJztcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgaWdub3Jpbmcgcm91dGVyIGV2ZW50JHtyZWFzb259OiAke2V2ZW50LmNvbnN0cnVjdG9yLm5hbWV9IC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KGlzSWRsOiAke3RoaXMuaWRsZX0sIHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9LCBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmw6JHt0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybH0pYDtcbiAgICB9XG5cbiAgfVxufVxuIl19
786
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE1RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUUzRixNQUFNLE9BQWdCLGVBQWdCLFNBQVEsZ0JBQWdCOzs7O0lBUTVELFlBQStCLE9BQWdDO1FBQzdELEtBQUssRUFBRSxDQUFDO1FBRHFCLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBTnZELFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBMEIsQ0FBQztJQVFwRCxDQUFDOzs7O0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDOzs7O0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDOUIsQ0FBQzs7OztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDbEMsQ0FBQzs7OztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUN6QyxDQUFDOzs7O0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOzs7OztJQUVELFVBQVUsQ0FBQyxLQUFZO1FBQ3JCLElBQUksQ0FBQyxPQUFP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T0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNuRyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7Ozs7UUFFRCxRQUFRO1lBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQyxJQUFJLGtCQUFrQixJQUFJLENBQUMsV0FBVyw4QkFBOEIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLENBQUM7UUFDdEosQ0FBQztLQUVGO0lBeENDO1FBREMsS0FBSyxFQUFFOztpREFDaUIsZ0JBQWdCO2dEQUFHLGVBQWU7aUZBVTFEO0lBL0JVLG9EQUFvQyx1Q0E2RGhELENBQUE7OztRQTNEQywwREFBNEI7Ozs7O1FBQzVCLHlFQUEwQzs7UUFHOUIsMkRBQTRCOztRQUM1Qix5RUFBMkM7O1FBQzNDLHdFQUF5Qzs7QUFzRHpELENBQUMsRUE3VGdCLGVBQWUsS0FBZixlQUFlLFFBNlQvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hdmlnYXRpb25DYW5jZWwsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25FcnJvciwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXJFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEc2wsIEdhcmJhZ2VDb2xsZWN0b3IsIGxhbmcsIExvZ2dlciwgVHJhY2UgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1jb250ZXh0JztcbmltcG9ydCB7IEludGVyYWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2ludGVyYWN0aW9uL3NlcnZpY2VzL2ludGVyYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhY2VDb21wb25lbnQgfSBmcm9tICcuLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhY2VEZWZpbml0aW9uIH0gZnJvbSAnLi4vcGxhY2UtZGVmaW5pdGlvbic7XG5pbXBvcnQgeyBQbGFjZVJvdXRlciB9IGZyb20gJy4uL3BsYWNlLXJvdXRlcic7XG5pbXBvcnQgeyBVcmxTbmFwc2hvdCB9IGZyb20gJy4uL3VybC1zbmFwc2hvdCc7XG5pbXBvcnQgeyBWaXNpdCB9IGZyb20gJy4uL3Zpc2l0JztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlciB9IGZyb20gJy4vcGxhY2UtY29tcG9uZW50LWRlYWN0aXZhdGlvbi1oYW5kbGVyJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5hdmlnYXRpb25TdGF0ZSBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHByaXZhdGUgX3Zpc2l0cyA9IG5ldyBNYXA8UGxhY2VEZWZpbml0aW9uLCBWaXNpdD4oKTtcblxuICBhYnN0cmFjdCByZWFkb25seSBpc1RyYW5zaXRpb25hbDogYm9vbGVhbjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNQb3BTdGF0ZTogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogTmF2aWdhdGlvblN0YXRlLkNvbnRleHQpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgZ2V0IGlkbGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzVHJhbnNpdGlvbmFsO1xuICB9XG5cbiAgZ2V0IHBsYWNlUm91dGVyKCk6IFBsYWNlUm91dGVyIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LnBsYWNlUm91dGVyO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aW9uU2VydmljZSgpOiBJbnRlcmFjdGlvblNlcnZpY2Uge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RvcmVWaXNpdCh2aXNpdDogVmlzaXQpIHtcbiAgICB0aGlzLl92aXNpdHMuc2V0KHZpc2l0LnBsYWNlRGVmaW5pdGlvbiwgdmlzaXQpO1xuICB9XG5cbiAgZ2V0VmlzaXRGb3IocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbikge1xuICAgIHJldHVybiB0aGlzLl92aXNpdHMuZ2V0KHBsYWNlRGVmKTtcbiAgfVxuXG4gIG9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQ6IFZpc2l0LCBpbml0aWFsVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKCdvblBsYWNlTmF2aWdhdGlvblN0YXJ0Jyk7XG4gIH1cblxuICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25CYWNrQ2xpY2tlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbihuZXdVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oJ29uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24nKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKCdjYW5EZWFjdGl2YXRlUGxhY2UnKTtcbiAgfVxuXG4gIGdldFZpc2l0cygpOiBWaXNpdFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl92aXNpdHMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlsbGVnYWxUcmFuc2l0aW9uPFI+KG1lc3NhZ2U6IHN0cmluZyB8IFJvdXRlckV2ZW50KTogUiB7XG4gICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGAke21lc3NhZ2UudG9TdHJpbmcoKX0gbm90IHN1cHBvcnRlZCBieSAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjdXJyZW50Um91dGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGxhY2VSb3V0ZXIuZ2V0Q3VycmVudFJvdXRlclVybCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVRyYW5zaXRpb25TdGF0ZUZvcihldmVudDogTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgY29uc3QgcG9wc3RhdGUgPSBldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJztcbiAgICByZXR1cm4gcG9wc3RhdGUgP1xuICAgICAgdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSA/XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSW50ZXJhY3Rpb25Qb3BTdGF0ZVRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSkgOlxuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLlBvcFN0YXRlVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKVxuICAgICAgOlxuICAgICAgdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSA/XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5OYXZpZ2F0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVJZGxlU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5JZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSkgOlxuICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5JZGxlKHRoaXMuY29udGV4dCk7XG4gIH1cblxuICByZXNldEJyb3dzZXJMb2NhdGlvbih1cmwpIHtcbiAgICB0aGlzLnBsYWNlUm91dGVyLnJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCk7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gIGV4cG9ydCBjbGFzcyBDb250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHJlYWRvbmx5IHBsYWNlUm91dGVyOiBQbGFjZVJvdXRlcixcbiAgICAgIHJlYWRvbmx5IGludGVyYWN0aW9uU2VydmljZTogSW50ZXJhY3Rpb25TZXJ2aWNlLFxuICAgICAgcmVhZG9ubHkgbm90aWZ5U3VjY2VzczogKHN1Y2Nlc3M6IE5hdmlnYXRpb25TdGF0ZSkgPT4gdm9pZCkge1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBJZGxlIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IHN0YXJ0aW5nVXJsID0gbnVsbDtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBvblBsYWNlTmF2aWdhdGlvblN0YXJ0KHZpc2l0OiBWaXNpdCwgaW5pdGlhbFVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25UcmFuc2l0aW9uID0gbmV3IE5hdmlnYXRpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgaW5pdGlhbFVybCk7XG4gICAgICBuYXZpZ2F0aW9uVHJhbnNpdGlvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBuYXZpZ2F0aW9uVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG5cbiAgICAgIC8vIGNhbGxpbmcgYW5ndWxhckxvY2F0aW9uLmdvKCkgdG8gY2xlYXIgYmFjayBzdGF0ZSBjYW4gdHJpZ2dlciByb3V0ZXIgY3ljbGVzIHRvIHRoZSBjdXJyZW50IHVybCBpZiB3ZSBkb24ndCBpZ25vcmUgdGhlbVxuICAgICAgaWYgKGV2ZW50LnVybCA9PT0gdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIHtcbiAgICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBuYXZpZ2F0aW9uIHN0YXJ0ZWQgdG8gc2FtZSB1cmwgLT4gJHtldmVudC51cmx9YCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wbGFjZVJvdXRlci5oYXNBY3RpdmVJbnRlcmFjdGlvbklkcyhldmVudC51cmwpKSB7XG4gICAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgbmF2aWdhdGlvbiBzdGFydGVkIHdpdGggaW50ZXJhY3Rpb24gb3V0bGV0IC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGV2ZW50LnVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVUcmFuc2l0aW9uU3RhdGVGb3IoZXZlbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVUcmFuc2l0aW9uU3RhdGVGb3IoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IHRydWU7XG4gICAgcHJpdmF0ZSBjb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycyA9IG5ldyBNYXA8UGxhY2VDb21wb25lbnQsIFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcj4oKTtcbiAgICBwcml2YXRlIF9pbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dDtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0ID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuX2NyZWF0ZUV4Y2x1c2l2ZU1vZGFsSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgICB0aGlzLm9uRGlzcG9zZSgoKSA9PiB7XG4gICAgICAgIC8vIHRoZSBpbnRlcmFjdGlvbiBjb250ZXh0IGNhbiBiZSBkZXRhY2hlZCBkdXJpbmcgdGhlIGJhY2sgYnV0dG9uIGNhbmNlbGxhdGlvbiBzdGF0ZSB0cmFuc2l0aW9uXG4gICAgICAgIC8vIGFzIHRoZSB0cmFuc2l0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCBhY3Rpdml0eUNhbmNlbGxhdGlvbiBpc24ndC4gIE90aGVyd2lzZSBkaXNwb3NlIHdpbGwgYmVcbiAgICAgICAgLy8gY2FsbGVkIGJlZm9yZSB0aGUgY29udGV4dCBoYXMgYmVlbiBjYW5jZWxsZWQuICBJdCBtaWdodCBiZSB3b3JrIGhhdmluZyB0aGUgaW50ZXJhY3Rpb24gY29udGV4dFxuICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGNhbmNlbCBpZiB0aGUgY29udGV4dCBpcyBkaXNwb3NlZCBzbyB3ZSBkb24ndCBoYXZlIHdvcnJ5IGFib3V0IGRldGFjaGluZyBldGMuXG4gICAgICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQuZGlzcG9zZSgpOyAvLyBvciBkbyBzb21ldGhpbmcgbGlrZSBjYW5jZWxBbmREaXNwb3NlP1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgaW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgIH1cblxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIGFjdGl2ZSBzZXNzaW9ucyBjYW4gaGF2ZSBtYW55IGNhbmNlbCBzdGFydCBjeWNsZXMgZHVlXG4gICAgICAvLyB0byBwbGFjZSBndWFyZCByZWRpcmVjdHNcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gc3VjY2VlZGVkXG4gICAgICB0aGlzLmNvbnRleHQubm90aWZ5U3VjY2Vzcyh0aGlzKTtcbiAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24obG9jYXRpb25UcmlnZ2VyVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBiYWNrIGJ1dHRvbiBwcmVzc2VkIGR1cmluZyBuYXZpZ2F0aW9uIHNlc3Npb24gaW50ZXJhY3Rpb24gcHJvbWlzZWApO1xuICAgICAgLy8gZGV0YWNoIHRoZSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBzZXNzaW9uIHNvIGl0IGRvZXNuJ3QgZ2V0IGRpc3Bvc2VkIHVudGlsIHRoZSBhY3Rpdml0eSBoYXMgY29tcGxldGVkLlxuICAgICAgY29uc3QgbmF2aWdhdGlvbkludGVyYWN0aW9uID0gdGhpcy5kZXRhY2hJbnRlcmFjdGlvbkNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHsgd2hlbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKG5hdmlnYXRpb25JbnRlcmFjdGlvbik7XG4gICAgICAvLyBUT0RPOiBJIG5lZWQgdG8gbWFrZSB0aGUgZXhjbHVzaXZlIGludGVyYWN0aW9uIGNvbnRleHQgZGlzYWxsb3cgbmVzdGVkIGFjdGl2aXRpZXMgb3JcbiAgICAgIC8vICAgICAgIHRoYXQgd291bGQgbWVzcyB0aGluZ3MgdXAgZW50aXJlbHkuIE9yLCBjYW4gSSBkbyBhIGNvbnRleHQuYWJvcnRBbGwoKS50aGVuKC4uKVxuICAgICAgbmF2aWdhdGlvbkludGVyYWN0aW9uLmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCkudGhlbigoKSA9PiB7XG4gICAgICAgIG5hdmlnYXRpb25JbnRlcmFjdGlvbi5kaXNwb3NlKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgQ2FuY2VsbGVkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKHRoaXMuY29udGV4dCxcbiAgICAgICAgdGhpcy5zdGFydGluZ1VybCxcbiAgICAgICAgdGhpcy5pc1BvcFN0YXRlLFxuICAgICAgICBsb2NhdGlvblRyaWdnZXJVcmwpO1xuICAgIH1cblxuICAgIC8vIEBUcmFjZSgpXG4gICAgYXN5bmMgY2FuRGVhY3RpdmF0ZVBsYWNlKGNvbXBvbmVudDogUGxhY2VDb21wb25lbnQsIGN1cnJlbnRVcmw6IFVybFNuYXBzaG90LCBuZXh0VXJsOiBVcmxTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFNuYXBzaG90PiB7XG4gICAgICAvLyBsb29rdXAgdGhlIGhhbmRsZXIgYW5kIGNyZWF0ZSBpdCBpZiB3ZSd2ZSBub3Qgc2VlbiBpdCB5ZXRcbiAgICAgIGxldCBoYW5kbGVyID0gdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5nZXQoY29tcG9uZW50KTtcbiAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICBjb25zdCBpc1ByaW1hcnlIYW5kbGVyID0gdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5zaXplID09PSAwOyAvLyBvbmx5IHByaW1hcnkgaGFuZGxlciBjYW5jZWxzIHRoZSBhcHAgbW9kZWwgaW50ZXJhdGlvbnNcbiAgICAgICAgaGFuZGxlciA9IG5ldyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIoY29tcG9uZW50LCB0aGlzLCBpc1ByaW1hcnlIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5zZXQoY29tcG9uZW50LCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYW5kbGVyLmNhbkRlYWN0aXZhdGUoY3VycmVudFVybCwgbmV4dFVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRhY2hJbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQ7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSBudWxsO1xuICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIE5hdmlnYXRpb25UcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiB7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0oc3RhcnRpbmdVcmw6ICR7dGhpcy5zdGFydGluZ1VybH0pYDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgUG9wU3RhdGVUcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiB7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IHRydWU7XG5cbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcHJlc2VydmUgdGhlIHVybCB3aGVuIGEgZ3VhcmQgY2FuY2VscyB0aGUgYmFjayBidXR0b24uXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKCdXT1JLLUFST1VORDogVXBkYXRpbmcgYnJvd3NlciBsb2NhdGlvbiBhZnRlciBwb3Agc3RhdGUgLSBzZWUgYW5ndWxhciBpc3N1ZSAjMTM1ODYnKTtcbiAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5zdGFydGluZ1VybCk7XG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gbmF2aWdhdGlvbiB3YXMgYWJvcnRlZC5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSAhPT0gdGhpcy5zdGFydGluZ1VybCkge1xuICAgICAgICAvLyBBbmd1bGFyIGRvZXNuJ3QgcHJlc2VydmUgdGhlIHVybCB3aGVuIGEgZ3VhcmQgY2FuY2VscyB0aGUgYmFjayBidXR0b24uXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzU4NiNpc3N1ZWNvbW1lbnQtNDMyNzk1NzIwXG4gICAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbygnV09SSy1BUk9VTkQ6IFVwZGF0aW5nIGJyb3dzZXIgbG9jYXRpb24gYWZ0ZXIgcG9wIHN0YXRlIC0gc2VlIGFuZ3VsYXIgaXNzdWUgIzEzNTg2Jyk7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5zdGFydGluZ1VybCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24gZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJlYWRvbmx5IGlzVHJhbnNpdGlvbmFsID0gZmFsc2U7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZykge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdDogVmlzaXQsIGluaXRpYWxVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uVHJhbnNpdGlvbiA9IG5ldyBJbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBpbml0aWFsVXJsKTtcbiAgICAgIG5hdmlnYXRpb25UcmFuc2l0aW9uLnN0b3JlVmlzaXQodmlzaXQpO1xuICAgICAgcmV0dXJuIG5hdmlnYXRpb25UcmFuc2l0aW9uO1xuICAgIH1cblxuICAgIC8vIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBldmVudC51cmwpO1xuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJhY3Rpb25Qb3BTdGF0ZVRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBldmVudC51cmwpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEludGVyYWN0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzVHJhbnNpdGlvbmFsID0gdHJ1ZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQsIHN0YXJ0aW5nVXJsKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHN0YXRlIGV4aXN0cyB0byBoYW5kbGUgYWxsIGV2ZW50cyB3aGlsZSBhbnkga2luZCBvZiBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzLiAgVGhhdCB3YXkgYWxsIG90aGVyIHN0YXRlcyBjYW5cbiAgICogaGFwcGlseSBpZ25vcmUgaW50ZXJhY3Rpb24gY29udGV4dHMuXG4gICAqL1xuICBleHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25UcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3RJbnRlcmFjdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbklkcyA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcy52YWx1ZTtcbiAgICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnBsYWNlUm91dGVyLnBhcnNlVXJsKHRoaXMuc3RhcnRpbmdVcmwpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGludGVyYWN0aW9uSWRzKS51cmwpO1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gbmF2aWdhdGlvbiB3YXMgYWJvcnRlZC5cbiAgICAgIHJldHVybiBuZXcgSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCk7XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzdGF0ZSBleGlzdHMgdG8gaGFuZGxlIGFsbCBldmVudHMgd2hpbGUgYW55IGtpbmQgb2YgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcy4gIFRoYXQgd2F5IGFsbCBvdGhlciBzdGF0ZXMgY2FuXG4gICAqIGhhcHBpbHkgaWdub3JlIGludGVyYWN0aW9uIGNvbnRleHRzLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3RJbnRlcmFjdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSB0cnVlO1xuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBpZiAodGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbklkcyA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcy52YWx1ZTtcbiAgICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnBsYWNlUm91dGVyLnBhcnNlVXJsKHRoaXMuc3RhcnRpbmdVcmwpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGludGVyYWN0aW9uSWRzKS51cmwpO1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG5cbiAgZXhwb3J0IGNsYXNzIENhbmNlbGxlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbiBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG5cbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBnb3RQb3BTdGF0ZVdpdGhMZWF2aW5nVXJsID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgc3RhcnRpbmdFdmVudFdhc0FQb3BTdGF0ZTogYm9vbGVhbixcbiAgICAgICAgICAgICAgICByZWFkb25seSBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmw6IHN0cmluZykge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgfVxuXG4gICAgZ2V0IGlzVHJhbnNpdGlvbmFsKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIERlcGVuZGluZyBvbiB0aGUgc3RhdGUgb2YgdGhlIHJvdXRlciBhbmQgd2hhdCB3YXMgZG9uZSB3ZSBnZXQgYSBkaWZmZXJlbnRcbiAgICAgIC8vIHNlcXVlbmNlIG9mIGV2ZW50cy5cbiAgICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIGNoYW5nZSB3YXMgdHJpZ2dlcmVkIGJ5IGNsaWNraW5nIGEgbGluayB3ZSdsbCBnZXQgYSBjYW5jZWwgd2l0aCB0aGUgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsIGFzIHRoZSBmaW5hbCBldmVudC5cbiAgICAgIC8vIElmIHRoZSBuYXZpZ2F0aW9uIGNoYW5nZSB3YXMgdHJpZ2dlcmVkIHdpdGggYSBwb3Agc3RhdGUgdGhlbiB3ZSdsbCBnZXQgYW4gb25Qb3BTdGF0ZSB3aXRoIHRoZSBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmwgYnV0IG5vIGNhbmNlbCBldmVudCB3aXRoIGl0LlxuICAgICAgaWYgKHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCAmJiB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uSWRzID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuYWN0aXZlSW50ZXJhY3Rpb25Db250ZXh0SWRzLnZhbHVlO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMucGxhY2VSb3V0ZXIucGFyc2VVcmwodGhpcy5zdGFydGluZ1VybCkudXBkYXRlSW50ZXJhY3Rpb25JZHMoaW50ZXJhY3Rpb25JZHMpLnVybCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nb3RQb3BTdGF0ZVdpdGhMZWF2aW5nVXJsIHx8IHRoaXMubG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsID09PSBldmVudC51cmwgPyB0aGlzLmNyZWF0ZUlkbGVTdGF0ZSgpIDogdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCB8fCBldmVudC51cmwgPT09IHRoaXMubG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsO1xuICAgICAgcmV0dXJuIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlnbm9yZShldmVudDogUm91dGVyRXZlbnQsIHJlYXNvbj86IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZWFzb24gPSByZWFzb24gPyBgIC0+ICR7cmVhc29ufWAgOiAnJztcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgaWdub3Jpbmcgcm91dGVyIGV2ZW50JHtyZWFzb259OiAke2V2ZW50LmNvbnN0cnVjdG9yLm5hbWV9IC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KGlzSWRsOiAke3RoaXMuaWRsZX0sIHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9LCBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmw6JHt0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybH0pYDtcbiAgICB9XG5cbiAgfVxufVxuIl19
@@ -917,10 +917,14 @@ if (false) {
917
917
  */
918
918
  function (event) {
919
919
  // Depending on the state of the router and what was done we get a different
920
- // sequence of events. I.e. If they just clicked a link we'll get a cancel
921
- // with the locationChangeTriggerUrl as the final event. However the user
922
- // started the initial navigation with a pop state then we'll get one of
923
- // those with the locationChangeTriggerUrl but no cancel event with it.
920
+ // sequence of events.
921
+ // If the navigation change was triggered by clicking a link we'll get a cancel with the locationChangeTriggerUrl as the final event.
922
+ // If the navigation change was triggered with a pop state then we'll get an onPopState with the locationChangeTriggerUrl but no cancel event with it.
923
+ if (this.gotPopStateWithLeavingUrl && this.interactionService.isActive()) {
924
+ /** @type {?} */
925
+ var interactionIds = this.interactionService.activeInteractionContextIds.value;
926
+ this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);
927
+ }
924
928
  return this.gotPopStateWithLeavingUrl || this.locationChangeTriggerUrl === event.url ? this.createIdleState() : this.ignore(event);
925
929
  };
926
930
  /**
@@ -1029,4 +1033,4 @@ if (false) {
1029
1033
  CancelledDuringNavigationInteraction.prototype.locationChangeTriggerUrl;
1030
1034
  }
1031
1035
  })(NavigationState || (NavigationState = {}));
1032
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE1RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUUzRjs7OztJQUE4QywyQ0FBZ0I7SUFRNUQseUJBQStCLE9BQWdDO1FBQS9ELFlBQ0UsaUJBQU8sU0FDUjtRQUY4QixhQUFPLEdBQVAsT0FBTyxDQUF5QjtRQU52RCxhQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7O0lBUXBELENBQUM7SUFFRCxzQkFBSSxpQ0FBSTs7OztRQUFSO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLGlDQUFJOzs7O1FBQVI7WUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLHdDQUFXOzs7O1FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksK0NBQWtCOzs7O1FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksK0NBQWtCOzs7O1FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUM7UUFDZCxD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O1FBQzVCLHlFQUEyQzs7UUFDM0Msd0VBQXlDOztBQW1EekQsQ0FBQyxFQTFUZ0IsZUFBZSxLQUFmLGVBQWUsUUEwVC9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlckV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERzbCwgR2FyYmFnZUNvbGxlY3RvciwgbGFuZywgTG9nZ2VyLCBUcmFjZSB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IEludGVyYWN0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudCB9IGZyb20gJy4uL3BsYWNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQbGFjZURlZmluaXRpb24gfSBmcm9tICcuLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7IFBsYWNlUm91dGVyIH0gZnJvbSAnLi4vcGxhY2Utcm91dGVyJztcbmltcG9ydCB7IFVybFNuYXBzaG90IH0gZnJvbSAnLi4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7IFZpc2l0IH0gZnJvbSAnLi4vdmlzaXQnO1xuaW1wb3J0IHsgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyIH0gZnJvbSAnLi9wbGFjZS1jb21wb25lbnQtZGVhY3RpdmF0aW9uLWhhbmRsZXInO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF2aWdhdGlvblN0YXRlIGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJpdmF0ZSBfdmlzaXRzID0gbmV3IE1hcDxQbGFjZURlZmluaXRpb24sIFZpc2l0PigpO1xuXG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzVHJhbnNpdGlvbmFsOiBib29sZWFuO1xuICBhYnN0cmFjdCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nO1xuICBhYnN0cmFjdCByZWFkb25seSBpc1BvcFN0YXRlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSBjb250ZXh0OiBOYXZpZ2F0aW9uU3RhdGUuQ29udGV4dCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBnZXQgaWRsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNUcmFuc2l0aW9uYWw7XG4gIH1cblxuICBnZXQgcGxhY2VSb3V0ZXIoKTogUGxhY2VSb3V0ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQucGxhY2VSb3V0ZXI7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpb25TZXJ2aWNlKCk6IEludGVyYWN0aW9uU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2U7XG4gIH1cblxuICBnZXQgaW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdG9yZVZpc2l0KHZpc2l0OiBWaXNpdCkge1xuICAgIHRoaXMuX3Zpc2l0cy5zZXQodmlzaXQucGxhY2VEZWZpbml0aW9uLCB2aXNpdCk7XG4gIH1cblxuICBnZXRWaXNpdEZvcihwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2l0cy5nZXQocGxhY2VEZWYpO1xuICB9XG5cbiAgb25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdDogVmlzaXQsIGluaXRpYWxVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oJ29uUGxhY2VOYXZpZ2F0aW9uU3RhcnQnKTtcbiAgfVxuXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKG5ld1VybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignb25CYWNrQ2xpY2tlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbicpO1xuICB9XG5cbiAgYXN5bmMgY2FuRGVhY3RpdmF0ZVBsYWNlKGNvbXBvbmVudDogUGxhY2VDb21wb25lbnQsIGN1cnJlbnRVcmw6IFVybFNuYXBzaG90LCBuZXh0VXJsOiBVcmxTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbiB8IFVybFNuYXBzaG90PiB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oJ2NhbkRlYWN0aXZhdGVQbGFjZScpO1xuICB9XG5cbiAgZ2V0VmlzaXRzKCk6IFZpc2l0W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3Zpc2l0cy52YWx1ZXMoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaWxsZWdhbFRyYW5zaXRpb248Uj4obWVzc2FnZTogc3RyaW5nIHwgUm91dGVyRXZlbnQpOiBSIHtcbiAgICByZXR1cm4gbGFuZy5pbGxlZ2FsU3RhdGUoYCR7bWVzc2FnZS50b1N0cmluZygpfSBub3Qgc3VwcG9ydGVkIGJ5ICR7dGhpcy50b1N0cmluZygpfWApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGN1cnJlbnRSb3V0ZXJVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wbGFjZVJvdXRlci5nZXRDdXJyZW50Um91dGVyVXJsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBjb25zdCBwb3BzdGF0ZSA9IGV2ZW50Lm5hdmlnYXRpb25UcmlnZ2VyID09PSAncG9wc3RhdGUnO1xuICAgIHJldHVybiBwb3BzdGF0ZSA/XG4gICAgICB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpID9cbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5JbnRlcmFjdGlvblBvcFN0YXRlVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKSA6XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpXG4gICAgICA6XG4gICAgICB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpID9cbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5JbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSkgOlxuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLk5hdmlnYXRpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZUlkbGVTdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSA/XG4gICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLklkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKSA6XG4gICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLklkbGUodGhpcy5jb250ZXh0KTtcbiAgfVxuXG4gIHJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCkge1xuICAgIHRoaXMucGxhY2VSb3V0ZXIucmVzZXRCcm93c2VyTG9jYXRpb24odXJsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIE5hdmlnYXRpb25TdGF0ZSB7XG5cbiAgZXhwb3J0IGNsYXNzIENvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcmVhZG9ubHkgcGxhY2VSb3V0ZXI6IFBsYWNlUm91dGVyLFxuICAgICAgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UsXG4gICAgICByZWFkb25seSBub3RpZnlTdWNjZXNzOiAoc3VjY2VzczogTmF2aWdhdGlvblN0YXRlKSA9PiB2b2lkKSB7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIElkbGUgZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJlYWRvbmx5IGlzVHJhbnNpdGlvbmFsID0gZmFsc2U7XG4gICAgcmVhZG9ubHkgc3RhcnRpbmdVcmwgPSBudWxsO1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQ6IFZpc2l0LCBpbml0aWFsVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblRyYW5zaXRpb24gPSBuZXcgTmF2aWdhdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBpbml0aWFsVXJsKTtcbiAgICAgIG5hdmlnYXRpb25UcmFuc2l0aW9uLnN0b3JlVmlzaXQodmlzaXQpO1xuICAgICAgcmV0dXJuIG5hdmlnYXRpb25UcmFuc2l0aW9uO1xuICAgIH1cblxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcblxuICAgICAgLy8gY2FsbGluZyBhbmd1bGFyTG9jYXRpb24uZ28oKSB0byBjbGVhciBiYWNrIHN0YXRlIGNhbiB0cmlnZ2VyIHJvdXRlciBjeWNsZXMgdG8gdGhlIGN1cnJlbnQgdXJsIGlmIHdlIGRvbid0IGlnbm9yZSB0aGVtXG4gICAgICBpZiAoZXZlbnQudXJsID09PSB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG5hdmlnYXRpb24gc3RhcnRlZCB0byBzYW1lIHVybCAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnBsYWNlUm91dGVyLmhhc0FjdGl2ZUludGVyYWN0aW9uSWRzKGV2ZW50LnVybCkpIHtcbiAgICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGBuYXZpZ2F0aW9uIHN0YXJ0ZWQgd2l0aCBpbnRlcmFjdGlvbiBvdXRsZXQgLT4gJHtldmVudC51cmx9YCk7XG4gICAgICAgIHJldHVybiBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRyYW5zaXRpb25TdGF0ZUZvcihldmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVRyYW5zaXRpb25TdGF0ZUZvcihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJlYWRvbmx5IGlzVHJhbnNpdGlvbmFsID0gdHJ1ZTtcbiAgICBwcml2YXRlIGNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzID0gbmV3IE1hcDxQbGFjZUNvbXBvbmVudCwgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyPigpO1xuICAgIHByaXZhdGUgX2ludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0O1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZykge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5fY3JlYXRlRXhjbHVzaXZlTW9kYWxJbnRlcmFjdGlvbkNvbnRleHQoKTtcbiAgICAgIHRoaXMub25EaXNwb3NlKCgpID0+IHtcbiAgICAgICAgLy8gdGhlIGludGVyYWN0aW9uIGNvbnRleHQgY2FuIGJlIGRldGFjaGVkIGR1cmluZyB0aGUgYmFjayBidXR0b24gY2FuY2VsbGF0aW9uIHN0YXRlIHRyYW5zaXRpb25cbiAgICAgICAgLy8gYXMgdGhlIHRyYW5zaXRpb24gaXMgc3luY2hyb25vdXMgYW5kIGFjdGl2aXR5Q2FuY2VsbGF0aW9uIGlzbid0LiAgT3RoZXJ3aXNlIGRpc3Bvc2Ugd2lsbCBiZVxuICAgICAgICAvLyBjYWxsZWQgYmVmb3JlIHRoZSBjb250ZXh0IGhhcyBiZWVuIGNhbmNlbGxlZC4gIEl0IG1pZ2h0IGJlIHdvcmsgaGF2aW5nIHRoZSBpbnRlcmFjdGlvbiBjb250ZXh0XG4gICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgY2FuY2VsIGlmIHRoZSBjb250ZXh0IGlzIGRpc3Bvc2VkIHNvIHdlIGRvbid0IGhhdmUgd29ycnkgYWJvdXQgZGV0YWNoaW5nIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCkge1xuICAgICAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dC5kaXNwb3NlKCk7IC8vIG9yIGRvIHNvbWV0aGluZyBsaWtlIGNhbmNlbEFuZERpc3Bvc2U/XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBpbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQ7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gYWN0aXZlIHNlc3Npb25zIGNhbiBoYXZlIG1hbnkgY2FuY2VsIHN0YXJ0IGN5Y2xlcyBkdWVcbiAgICAgIC8vIHRvIHBsYWNlIGd1YXJkIHJlZGlyZWN0c1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gbmF2aWdhdGlvbiBzdWNjZWVkZWRcbiAgICAgIHRoaXMuY29udGV4dC5ub3RpZnlTdWNjZXNzKHRoaXMpO1xuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25CYWNrQ2xpY2tlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbihsb2NhdGlvblRyaWdnZXJVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGJhY2sgYnV0dG9uIHByZXNzZWQgZHVyaW5nIG5hdmlnYXRpb24gc2Vzc2lvbiBpbnRlcmFjdGlvbiBwcm9taXNlYCk7XG4gICAgICAvLyBkZXRhY2ggdGhlIGludGVyYWN0aW9uIGZyb20gdGhlIHNlc3Npb24gc28gaXQgZG9lc24ndCBnZXQgZGlzcG9zZWQgdW50aWwgdGhlIGFjdGl2aXR5IGhhcyBjb21wbGV0ZWQuXG4gICAgICBjb25zdCBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24gPSB0aGlzLmRldGFjaEludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgICAgY29uc3QgeyB3aGVuIH0gPSBEc2wuZGlzcG9zZVdpdGgobmF2aWdhdGlvbkludGVyYWN0aW9uKTtcbiAgICAgIC8vIFRPRE86IEkgbmVlZCB0byBtYWtlIHRoZSBleGNsdXNpdmUgaW50ZXJhY3Rpb24gY29udGV4dCBkaXNhbGxvdyBuZXN0ZWQgYWN0aXZpdGllcyBvclxuICAgICAgLy8gICAgICAgdGhhdCB3b3VsZCBtZXNzIHRoaW5ncyB1cCBlbnRpcmVseS4gT3IsIGNhbiBJIGRvIGEgY29udGV4dC5hYm9ydEFsbCgpLnRoZW4oLi4pXG4gICAgICBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uY2FuY2VsQWN0aXZlQWN0aXZpdHkoKS50aGVuKCgpID0+IHtcbiAgICAgICAgbmF2aWdhdGlvbkludGVyYWN0aW9uLmRpc3Bvc2UoKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBDYW5jZWxsZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LFxuICAgICAgICB0aGlzLnN0YXJ0aW5nVXJsLFxuICAgICAgICB0aGlzLmlzUG9wU3RhdGUsXG4gICAgICAgIGxvY2F0aW9uVHJpZ2dlclVybCk7XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICAgIC8vIGxvb2t1cCB0aGUgaGFuZGxlciBhbmQgY3JlYXRlIGl0IGlmIHdlJ3ZlIG5vdCBzZWVuIGl0IHlldFxuICAgICAgbGV0IGhhbmRsZXIgPSB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLmdldChjb21wb25lbnQpO1xuICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IGlzUHJpbWFyeUhhbmRsZXIgPSB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLnNpemUgPT09IDA7IC8vIG9ubHkgcHJpbWFyeSBoYW5kbGVyIGNhbmNlbHMgdGhlIGFwcCBtb2RlbCBpbnRlcmF0aW9uc1xuICAgICAgICBoYW5kbGVyID0gbmV3IFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcihjb21wb25lbnQsIHRoaXMsIGlzUHJpbWFyeUhhbmRsZXIpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLnNldChjb21wb25lbnQsIGhhbmRsZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhbmRsZXIuY2FuRGVhY3RpdmF0ZShjdXJyZW50VXJsLCBuZXh0VXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRldGFjaEludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IG51bGw7XG4gICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgTmF2aWdhdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gbmF2aWdhdGlvbiB3YXMgYWJvcnRlZC5cbiAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfShzdGFydGluZ1VybDogJHt0aGlzLnN0YXJ0aW5nVXJsfSlgO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBQb3BTdGF0ZVRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gdHJ1ZTtcblxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBwcmVzZXJ2ZSB0aGUgdXJsIHdoZW4gYSBndWFyZCBjYW5jZWxzIHRoZSBiYWNrIGJ1dHRvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMzU4NiNpc3N1ZWNvbW1lbnQtNDMyNzk1NzIwXG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oJ1dPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NicpO1xuICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHdhcyBhYm9ydGVkLlxuICAgICAgaWYgKHRoaXMuY3VycmVudFJvdXRlclVybCgpICE9PSB0aGlzLnN0YXJ0aW5nVXJsKSB7XG4gICAgICAgIC8vIEFuZ3VsYXIgZG9lc24ndCBwcmVzZXJ2ZSB0aGUgdXJsIHdoZW4gYSBndWFyZCBjYW5jZWxzIHRoZSBiYWNrIGJ1dHRvbi5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTg2I2lzc3VlY29tbWVudC00MzI3OTU3MjBcbiAgICAgICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKCdXT1JLLUFST1VORDogVXBkYXRpbmcgYnJvd3NlciBsb2NhdGlvbiBhZnRlciBwb3Agc3RhdGUgLSBzZWUgYW5ndWxhciBpc3N1ZSAjMTM1ODYnKTtcbiAgICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgIH1cblxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIElkbGVEdXJpbmdJbnRlcmFjdGlvbiBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSBmYWxzZTtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBvblBsYWNlTmF2aWdhdGlvblN0YXJ0KHZpc2l0OiBWaXNpdCwgaW5pdGlhbFVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25UcmFuc2l0aW9uID0gbmV3IEludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGluaXRpYWxVcmwpO1xuICAgICAgbmF2aWdhdGlvblRyYW5zaXRpb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGV2ZW50LnVybCk7XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblBvcFN0YXRlVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGV2ZW50LnVybCk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIGV4dGVuZHMgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCwgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZykge1xuICAgICAgc3VwZXIoY29udGV4dCwgc3RhcnRpbmdVcmwpO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc3RhdGUgZXhpc3RzIHRvIGhhbmRsZSBhbGwgZXZlbnRzIHdoaWxlIGFueSBraW5kIG9mIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICBUaGF0IHdheSBhbGwgb3RoZXIgc3RhdGVzIGNhblxuICAgKiBoYXBwaWx5IGlnbm9yZSBpbnRlcmFjdGlvbiBjb250ZXh0cy5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdEludGVyYWN0aW9uVHJhbnNpdGlvbiB7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBpZiAodGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uSWRzID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuYWN0aXZlSW50ZXJhY3Rpb25Db250ZXh0SWRzLnZhbHVlO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMucGxhY2VSb3V0ZXIucGFyc2VVcmwodGhpcy5zdGFydGluZ1VybCkudXBkYXRlSW50ZXJhY3Rpb25JZHMoaW50ZXJhY3Rpb25JZHMpLnVybCk7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHdhcyBhYm9ydGVkLlxuICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHN0YXRlIGV4aXN0cyB0byBoYW5kbGUgYWxsIGV2ZW50cyB3aGlsZSBhbnkga2luZCBvZiBuYXZpZ2F0aW9uIGlzIGluIHByb2dyZXNzLiAgVGhhdCB3YXkgYWxsIG90aGVyIHN0YXRlcyBjYW5cbiAgICogaGFwcGlseSBpZ25vcmUgaW50ZXJhY3Rpb24gY29udGV4dHMuXG4gICAqL1xuICBleHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25Qb3BTdGF0ZVRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdEludGVyYWN0aW9uVHJhbnNpdGlvbiB7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IHRydWU7XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpKSB7XG4gICAgICAgIGNvbnN0IGludGVyYWN0aW9uSWRzID0gdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuYWN0aXZlSW50ZXJhY3Rpb25Db250ZXh0SWRzLnZhbHVlO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMucGxhY2VSb3V0ZXIucGFyc2VVcmwodGhpcy5zdGFydGluZ1VybCkudXBkYXRlSW50ZXJhY3Rpb25JZHMoaW50ZXJhY3Rpb25JZHMpLnVybCk7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5zdGFydGluZ1VybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyRW5kKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cblxuICBleHBvcnQgY2xhc3MgQ2FuY2VsbGVkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcblxuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcbiAgICBwcml2YXRlIGdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgc3RhcnRpbmdVcmw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICByZWFkb25seSBzdGFydGluZ0V2ZW50V2FzQVBvcFN0YXRlOiBib29sZWFuLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICB9XG5cbiAgICBnZXQgaXNUcmFuc2l0aW9uYWwoKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcm91dGVyIGFuZCB3aGF0IHdhcyBkb25lIHdlIGdldCBhIGRpZmZlcmVudFxuICAgICAgLy8gc2VxdWVuY2Ugb2YgZXZlbnRzLiAgSS5lLiAgSWYgdGhleSBqdXN0IGNsaWNrZWQgYSBsaW5rIHdlJ2xsIGdldCBhIGNhbmNlbFxuICAgICAgLy8gd2l0aCB0aGUgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsIGFzIHRoZSBmaW5hbCBldmVudC4gSG93ZXZlciB0aGUgdXNlclxuICAgICAgLy8gc3RhcnRlZCB0aGUgaW5pdGlhbCBuYXZpZ2F0aW9uIHdpdGggYSBwb3Agc3RhdGUgdGhlbiB3ZSdsbCBnZXQgb25lIG9mXG4gICAgICAvLyB0aG9zZSB3aXRoIHRoZSBsb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmwgYnV0IG5vIGNhbmNlbCBldmVudCB3aXRoIGl0LlxuICAgICAgcmV0dXJuIHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCB8fCB0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCA9PT0gZXZlbnQudXJsID8gdGhpcy5jcmVhdGVJZGxlU3RhdGUoKSA6IHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICB0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgPSB0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgfHwgZXZlbnQudXJsID09PSB0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybDtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZ25vcmUoZXZlbnQ6IFJvdXRlckV2ZW50LCByZWFzb24/OiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmVhc29uID0gcmVhc29uID8gYCAtPiAke3JlYXNvbn1gIDogJyc7XG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGlnbm9yaW5nIHJvdXRlciBldmVudCR7cmVhc29ufTogJHtldmVudC5jb25zdHJ1Y3Rvci5uYW1lfSAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfShpc0lkbDogJHt0aGlzLmlkbGV9LCBzdGFydGluZ1VybDogJHt0aGlzLnN0YXJ0aW5nVXJsfSwgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiR7dGhpcy5sb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmx9KWA7XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==
1036
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9wbGFjZS9ndWFyZHMvbmF2aWdhdGlvbi1zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBZSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVE1RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUUzRjs7OztJQUE4QywyQ0FBZ0I7SUFRNUQseUJBQStCLE9BQWdDO1FBQS9ELFlBQ0UsaUJBQU8sU0FDUjtRQUY4QixhQUFPLEdBQVAsT0FBTyxDQUF5QjtRQU52RCxhQUFPLEdBQUcsSUFBSSxHQUFHLEVBQTBCLENBQUM7O0lBUXBELENBQUM7SUFFRCxzQkFBSSxpQ0FBSTs7OztRQUFSO1lBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUMvQixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLGlDQUFJOzs7O1FBQVI7WUFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUM5QixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLHdDQUFXOzs7O1FBQWY7WUFDRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ2xDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksK0NBQWtCOzs7O1FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1FBQ3pDLENBQUM7OztPQUFBO0lBRUQsc0JBQUksK0NBQWtCOzs7O1FBQXRCO1lBQ0UsT0FBTyxJQUFJLENBQUM7UUFDZCxD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LENBQUMsSUFBSSx1QkFBa0IsSUFBSSxDQUFDLFdBQVcsbUNBQThCLElBQUksQ0FBQyx3QkFBd0IsTUFBRyxDQUFDO1FBQ3RKLENBQUM7UUF0Q0Q7WUFEQyxLQUFLLEVBQUU7O3FEQUNpQixnQkFBZ0I7b0RBQUcsZUFBZTtxRkFVMUQ7UUE4QkgsMkNBQUM7S0FBQSxBQTdERCxDQUEwRCxlQUFlLEdBNkR4RTtJQTdEWSxvREFBb0MsdUNBNkRoRCxDQUFBOzs7UUEzREMsMERBQTRCOzs7OztRQUM1Qix5RUFBMEM7O1FBRzlCLDJEQUE0Qjs7UUFDNUIseUVBQTJDOztRQUMzQyx3RUFBeUM7O0FBc0R6RCxDQUFDLEVBN1RnQixlQUFlLEtBQWYsZUFBZSxRQTZUL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUm91dGVyRXZlbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRHNsLCBHYXJiYWdlQ29sbGVjdG9yLCBsYW5nLCBMb2dnZXIsIFRyYWNlIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBsYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4uL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHsgUGxhY2VSb3V0ZXIgfSBmcm9tICcuLi9wbGFjZS1yb3V0ZXInO1xuaW1wb3J0IHsgVXJsU25hcHNob3QgfSBmcm9tICcuLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHsgVmlzaXQgfSBmcm9tICcuLi92aXNpdCc7XG5pbXBvcnQgeyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIgfSBmcm9tICcuL3BsYWNlLWNvbXBvbmVudC1kZWFjdGl2YXRpb24taGFuZGxlcic7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIF92aXNpdHMgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXQ+KCk7XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWw6IGJvb2xlYW47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmc7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlzUG9wU3RhdGU6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25TdGF0ZS5Db250ZXh0KSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIGdldCBpZGxlKCkge1xuICAgIHJldHVybiAhdGhpcy5pc1RyYW5zaXRpb25hbDtcbiAgfVxuXG4gIGdldCBwbGFjZVJvdXRlcigpOiBQbGFjZVJvdXRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5wbGFjZVJvdXRlcjtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvblNlcnZpY2UoKTogSW50ZXJhY3Rpb25TZXJ2aWNlIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmludGVyYWN0aW9uU2VydmljZTtcbiAgfVxuXG4gIGdldCBpbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0b3JlVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5fdmlzaXRzLnNldCh2aXNpdC5wbGFjZURlZmluaXRpb24sIHZpc2l0KTtcbiAgfVxuXG4gIGdldFZpc2l0Rm9yKHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaXRzLmdldChwbGFjZURlZik7XG4gIH1cblxuICBvblBsYWNlTmF2aWdhdGlvblN0YXJ0KHZpc2l0OiBWaXNpdCwgaW5pdGlhbFVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignb25QbGFjZU5hdmlnYXRpb25TdGFydCcpO1xuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uQmFja0NsaWNrZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24obmV3VXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKCdvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbignY2FuRGVhY3RpdmF0ZVBsYWNlJyk7XG4gIH1cblxuICBnZXRWaXNpdHMoKTogVmlzaXRbXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5fdmlzaXRzLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbGxlZ2FsVHJhbnNpdGlvbjxSPihtZXNzYWdlOiBzdHJpbmcgfCBSb3V0ZXJFdmVudCk6IFIge1xuICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgJHttZXNzYWdlLnRvU3RyaW5nKCl9IG5vdCBzdXBwb3J0ZWQgYnkgJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnBsYWNlUm91dGVyLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVUcmFuc2l0aW9uU3RhdGVGb3IoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGNvbnN0IHBvcHN0YXRlID0gZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZSc7XG4gICAgcmV0dXJuIHBvcHN0YXRlID9cbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgICAgbmV3IE5hdmlnYXRpb25TdGF0ZS5Qb3BTdGF0ZVRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgIDpcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkgP1xuICAgICAgICBuZXcgTmF2aWdhdGlvblN0YXRlLkludGVyYWN0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuY3VycmVudFJvdXRlclVybCgpKSA6XG4gICAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuTmF2aWdhdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSb3V0ZXJVcmwoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSWRsZVN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpID9cbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZUR1cmluZ0ludGVyYWN0aW9uKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50Um91dGVyVXJsKCkpIDpcbiAgICAgIG5ldyBOYXZpZ2F0aW9uU3RhdGUuSWRsZSh0aGlzLmNvbnRleHQpO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsKSB7XG4gICAgdGhpcy5wbGFjZVJvdXRlci5yZXNldEJyb3dzZXJMb2NhdGlvbih1cmwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTmF2aWdhdGlvblN0YXRlIHtcblxuICBleHBvcnQgY2xhc3MgQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICByZWFkb25seSBwbGFjZVJvdXRlcjogUGxhY2VSb3V0ZXIsXG4gICAgICByZWFkb25seSBpbnRlcmFjdGlvblNlcnZpY2U6IEludGVyYWN0aW9uU2VydmljZSxcbiAgICAgIHJlYWRvbmx5IG5vdGlmeVN1Y2Nlc3M6IChzdWNjZXNzOiBOYXZpZ2F0aW9uU3RhdGUpID0+IHZvaWQpIHtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZSBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSBmYWxzZTtcbiAgICByZWFkb25seSBzdGFydGluZ1VybCA9IG51bGw7XG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuICAgICAgc3VwZXIoY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25QbGFjZU5hdmlnYXRpb25TdGFydCh2aXNpdDogVmlzaXQsIGluaXRpYWxVcmw6IHN0cmluZyk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICBjb25zdCBuYXZpZ2F0aW9uVHJhbnNpdGlvbiA9IG5ldyBOYXZpZ2F0aW9uVHJhbnNpdGlvbih0aGlzLmNvbnRleHQsIGluaXRpYWxVcmwpO1xuICAgICAgbmF2aWdhdGlvblRyYW5zaXRpb24uc3RvcmVWaXNpdCh2aXNpdCk7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgICAvLyBjYWxsaW5nIGFuZ3VsYXJMb2NhdGlvbi5nbygpIHRvIGNsZWFyIGJhY2sgc3RhdGUgY2FuIHRyaWdnZXIgcm91dGVyIGN5Y2xlcyB0byB0aGUgY3VycmVudCB1cmwgaWYgd2UgZG9uJ3QgaWdub3JlIHRoZW1cbiAgICAgIGlmIChldmVudC51cmwgPT09IHRoaXMuY3VycmVudFJvdXRlclVybCgpKSB7XG4gICAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgbmF2aWdhdGlvbiBzdGFydGVkIHRvIHNhbWUgdXJsIC0+ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucGxhY2VSb3V0ZXIuaGFzQWN0aXZlSW50ZXJhY3Rpb25JZHMoZXZlbnQudXJsKSkge1xuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG5hdmlnYXRpb24gc3RhcnRlZCB3aXRoIGludGVyYWN0aW9uIG91dGxldCAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmFjdGlvblRyYW5zaXRpb24odGhpcy5jb250ZXh0LCBldmVudC51cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblBvcFN0YXRlKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVHJhbnNpdGlvblN0YXRlRm9yKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgcmVhZG9ubHkgaXNUcmFuc2l0aW9uYWwgPSB0cnVlO1xuICAgIHByaXZhdGUgY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMgPSBuZXcgTWFwPFBsYWNlQ29tcG9uZW50LCBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXI+KCk7XG4gICAgcHJpdmF0ZSBfaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0KTtcbiAgICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLl9jcmVhdGVFeGNsdXNpdmVNb2RhbEludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAvLyB0aGUgaW50ZXJhY3Rpb24gY29udGV4dCBjYW4gYmUgZGV0YWNoZWQgZHVyaW5nIHRoZSBiYWNrIGJ1dHRvbiBjYW5jZWxsYXRpb24gc3RhdGUgdHJhbnNpdGlvblxuICAgICAgICAvLyBhcyB0aGUgdHJhbnNpdGlvbiBpcyBzeW5jaHJvbm91cyBhbmQgYWN0aXZpdHlDYW5jZWxsYXRpb24gaXNuJ3QuICBPdGhlcndpc2UgZGlzcG9zZSB3aWxsIGJlXG4gICAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBjYW5jZWwgaWYgdGhlIGNvbnRleHQgaXMgZGlzcG9zZWQgc28gd2UgZG9uJ3QgaGF2ZSB3b3JyeSBhYm91dCBkZXRhY2hpbmcgZXRjLlxuICAgICAgICBpZiAodGhpcy5faW50ZXJhY3Rpb25Db250ZXh0KSB7XG4gICAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICB9XG5cbiAgICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBhY3RpdmUgc2Vzc2lvbnMgY2FuIGhhdmUgbWFueSBjYW5jZWwgc3RhcnQgY3ljbGVzIGR1ZVxuICAgICAgLy8gdG8gcGxhY2UgZ3VhcmQgcmVkaXJlY3RzXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHN1Y2NlZWRlZFxuICAgICAgdGhpcy5jb250ZXh0Lm5vdGlmeVN1Y2Nlc3ModGhpcyk7XG4gICAgICByZXR1cm4gbmV3IElkbGUodGhpcy5jb250ZXh0KTtcbiAgICB9XG5cbiAgICBvbkJhY2tDbGlja2VkRHVyaW5nTmF2aWdhdGlvbkludGVyYWN0aW9uKGxvY2F0aW9uVHJpZ2dlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2VgKTtcbiAgICAgIC8vIGRldGFjaCB0aGUgaW50ZXJhY3Rpb24gZnJvbSB0aGUgc2Vzc2lvbiBzbyBpdCBkb2Vzbid0IGdldCBkaXNwb3NlZCB1bnRpbCB0aGUgYWN0aXZpdHkgaGFzIGNvbXBsZXRlZC5cbiAgICAgIGNvbnN0IG5hdmlnYXRpb25JbnRlcmFjdGlvbiA9IHRoaXMuZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgICBjb25zdCB7IHdoZW4gfSA9IERzbC5kaXNwb3NlV2l0aChuYXZpZ2F0aW9uSW50ZXJhY3Rpb24pO1xuICAgICAgLy8gVE9ETzogSSBuZWVkIHRvIG1ha2UgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBjb250ZXh0IGRpc2FsbG93IG5lc3RlZCBhY3Rpdml0aWVzIG9yXG4gICAgICAvLyAgICAgICB0aGF0IHdvdWxkIG1lc3MgdGhpbmdzIHVwIGVudGlyZWx5LiBPciwgY2FuIEkgZG8gYSBjb250ZXh0LmFib3J0QWxsKCkudGhlbiguLilcbiAgICAgIG5hdmlnYXRpb25JbnRlcmFjdGlvbi5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBuYXZpZ2F0aW9uSW50ZXJhY3Rpb24uZGlzcG9zZSgpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IENhbmNlbGxlZER1cmluZ05hdmlnYXRpb25JbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsXG4gICAgICAgIHRoaXMuc3RhcnRpbmdVcmwsXG4gICAgICAgIHRoaXMuaXNQb3BTdGF0ZSxcbiAgICAgICAgbG9jYXRpb25UcmlnZ2VyVXJsKTtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgICAgLy8gbG9va3VwIHRoZSBoYW5kbGVyIGFuZCBjcmVhdGUgaXQgaWYgd2UndmUgbm90IHNlZW4gaXQgeWV0XG4gICAgICBsZXQgaGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuZ2V0KGNvbXBvbmVudCk7XG4gICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgaXNQcmltYXJ5SGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2l6ZSA9PT0gMDsgLy8gb25seSBwcmltYXJ5IGhhbmRsZXIgY2FuY2VscyB0aGUgYXBwIG1vZGVsIGludGVyYXRpb25zXG4gICAgICAgIGhhbmRsZXIgPSBuZXcgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyKGNvbXBvbmVudCwgdGhpcywgaXNQcmltYXJ5SGFuZGxlcik7XG4gICAgICAgIHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZGxlci5jYW5EZWFjdGl2YXRlKGN1cnJlbnRVcmwsIG5leHRVcmwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGV0YWNoSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0ID0gbnVsbDtcbiAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjbGFzcyBOYXZpZ2F0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBuYXZpZ2F0aW9uIHdhcyBhYm9ydGVkLlxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KHN0YXJ0aW5nVXJsOiAke3RoaXMuc3RhcnRpbmdVcmx9KWA7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGNsYXNzIFBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0TmF2aWdhdGlvblRyYW5zaXRpb24ge1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSB0cnVlO1xuXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzNTg2I2lzc3VlY29tbWVudC00MzI3OTU3MjBcbiAgICAgIExvZ2dlci5nZXQodGhpcykuaW5mbygnV09SSy1BUk9VTkQ6IFVwZGF0aW5nIGJyb3dzZXIgbG9jYXRpb24gYWZ0ZXIgcG9wIHN0YXRlIC0gc2VlIGFuZ3VsYXIgaXNzdWUgIzEzNTg2Jyk7XG4gICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICBpZiAodGhpcy5jdXJyZW50Um91dGVyVXJsKCkgIT09IHRoaXMuc3RhcnRpbmdVcmwpIHtcbiAgICAgICAgLy8gQW5ndWxhciBkb2Vzbid0IHByZXNlcnZlIHRoZSB1cmwgd2hlbiBhIGd1YXJkIGNhbmNlbHMgdGhlIGJhY2sgYnV0dG9uLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTM1ODYjaXNzdWVjb21tZW50LTQzMjc5NTcyMFxuICAgICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oJ1dPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NicpO1xuICAgICAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgfVxuXG4gIH1cblxuICBleHBvcnQgY2xhc3MgSWRsZUR1cmluZ0ludGVyYWN0aW9uIGV4dGVuZHMgTmF2aWdhdGlvblN0YXRlIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IGZhbHNlO1xuICAgIHJlYWRvbmx5IGlzUG9wU3RhdGUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQsIHJlYWRvbmx5IHN0YXJ0aW5nVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIG9uUGxhY2VOYXZpZ2F0aW9uU3RhcnQodmlzaXQ6IFZpc2l0LCBpbml0aWFsVXJsOiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgY29uc3QgbmF2aWdhdGlvblRyYW5zaXRpb24gPSBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgaW5pdGlhbFVybCk7XG4gICAgICBuYXZpZ2F0aW9uVHJhbnNpdGlvbi5zdG9yZVZpc2l0KHZpc2l0KTtcbiAgICAgIHJldHVybiBuYXZpZ2F0aW9uVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICAvLyBAVHJhY2UoKVxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiBuZXcgSW50ZXJhY3Rpb25UcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVyYWN0aW9uUG9wU3RhdGVUcmFuc2l0aW9uKHRoaXMuY29udGV4dCwgZXZlbnQudXJsKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RJbnRlcmFjdGlvblRyYW5zaXRpb24gZXh0ZW5kcyBBYnN0cmFjdE5hdmlnYXRpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1RyYW5zaXRpb25hbCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgICBzdXBlcihjb250ZXh0LCBzdGFydGluZ1VybCk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzdGF0ZSBleGlzdHMgdG8gaGFuZGxlIGFsbCBldmVudHMgd2hpbGUgYW55IGtpbmQgb2YgbmF2aWdhdGlvbiBpcyBpbiBwcm9ncmVzcy4gIFRoYXQgd2F5IGFsbCBvdGhlciBzdGF0ZXMgY2FuXG4gICAqIGhhcHBpbHkgaWdub3JlIGludGVyYWN0aW9uIGNvbnRleHRzLlxuICAgKi9cbiAgZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gZmFsc2U7XG5cbiAgICBAVHJhY2UoKVxuICAgIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIC8vIG5hdmlnYXRpb24gd2FzIGFib3J0ZWQuXG4gICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgc3RhdGUgZXhpc3RzIHRvIGhhbmRsZSBhbGwgZXZlbnRzIHdoaWxlIGFueSBraW5kIG9mIG5hdmlnYXRpb24gaXMgaW4gcHJvZ3Jlc3MuICBUaGF0IHdheSBhbGwgb3RoZXIgc3RhdGVzIGNhblxuICAgKiBoYXBwaWx5IGlnbm9yZSBpbnRlcmFjdGlvbiBjb250ZXh0cy5cbiAgICovXG4gIGV4cG9ydCBjbGFzcyBJbnRlcmFjdGlvblBvcFN0YXRlVHJhbnNpdGlvbiBleHRlbmRzIEFic3RyYWN0SW50ZXJhY3Rpb25UcmFuc2l0aW9uIHtcbiAgICByZWFkb25seSBpc1BvcFN0YXRlID0gdHJ1ZTtcblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJhY3Rpb25JZHMgPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRJZHMudmFsdWU7XG4gICAgICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odGhpcy5wbGFjZVJvdXRlci5wYXJzZVVybCh0aGlzLnN0YXJ0aW5nVXJsKS51cGRhdGVJbnRlcmFjdGlvbklkcyhpbnRlcmFjdGlvbklkcykudXJsKTtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlRHVyaW5nSW50ZXJhY3Rpb24odGhpcy5jb250ZXh0LCB0aGlzLnN0YXJ0aW5nVXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgSWRsZSh0aGlzLmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBUcmFjZSgpXG4gICAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgaWYgKHRoaXMuY29udGV4dC5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IElkbGVEdXJpbmdJbnRlcmFjdGlvbih0aGlzLmNvbnRleHQsIHRoaXMuc3RhcnRpbmdVcmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJZGxlKHRoaXMuY29udGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuXG4gIGV4cG9ydCBjbGFzcyBDYW5jZWxsZWREdXJpbmdOYXZpZ2F0aW9uSW50ZXJhY3Rpb24gZXh0ZW5kcyBOYXZpZ2F0aW9uU3RhdGUge1xuXG4gICAgcmVhZG9ubHkgaXNQb3BTdGF0ZSA9IGZhbHNlO1xuICAgIHByaXZhdGUgZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCxcbiAgICAgICAgICAgICAgICByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHN0YXJ0aW5nRXZlbnRXYXNBUG9wU3RhdGU6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiBzdHJpbmcpIHtcbiAgICAgIHN1cGVyKGNvbnRleHQpO1xuICAgIH1cblxuICAgIGdldCBpc1RyYW5zaXRpb25hbCgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogTmF2aWdhdGlvblN0YXRlIHtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgQFRyYWNlKClcbiAgICBvblJvdXRlckNhbmNlbGxlZChldmVudDogTmF2aWdhdGlvbkNhbmNlbCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIHN0YXRlIG9mIHRoZSByb3V0ZXIgYW5kIHdoYXQgd2FzIGRvbmUgd2UgZ2V0IGEgZGlmZmVyZW50XG4gICAgICAvLyBzZXF1ZW5jZSBvZiBldmVudHMuXG4gICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBjaGFuZ2Ugd2FzIHRyaWdnZXJlZCBieSBjbGlja2luZyBhIGxpbmsgd2UnbGwgZ2V0IGEgY2FuY2VsIHdpdGggdGhlIGxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCBhcyB0aGUgZmluYWwgZXZlbnQuXG4gICAgICAvLyBJZiB0aGUgbmF2aWdhdGlvbiBjaGFuZ2Ugd2FzIHRyaWdnZXJlZCB3aXRoIGEgcG9wIHN0YXRlIHRoZW4gd2UnbGwgZ2V0IGFuIG9uUG9wU3RhdGUgd2l0aCB0aGUgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsIGJ1dCBubyBjYW5jZWwgZXZlbnQgd2l0aCBpdC5cbiAgICAgIGlmICh0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgJiYgdGhpcy5pbnRlcmFjdGlvblNlcnZpY2UuaXNBY3RpdmUoKSkge1xuICAgICAgICBjb25zdCBpbnRlcmFjdGlvbklkcyA9IHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZUludGVyYWN0aW9uQ29udGV4dElkcy52YWx1ZTtcbiAgICAgICAgdGhpcy5yZXNldEJyb3dzZXJMb2NhdGlvbih0aGlzLnBsYWNlUm91dGVyLnBhcnNlVXJsKHRoaXMuc3RhcnRpbmdVcmwpLnVwZGF0ZUludGVyYWN0aW9uSWRzKGludGVyYWN0aW9uSWRzKS51cmwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ290UG9wU3RhdGVXaXRoTGVhdmluZ1VybCB8fCB0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybCA9PT0gZXZlbnQudXJsID8gdGhpcy5jcmVhdGVJZGxlU3RhdGUoKSA6IHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUm91dGVyRXJyb3IoZXZlbnQ6IE5hdmlnYXRpb25FcnJvcik6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICByZXR1cm4gdGhpcy5pZ25vcmUoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IE5hdmlnYXRpb25TdGF0ZSB7XG4gICAgICB0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgPSB0aGlzLmdvdFBvcFN0YXRlV2l0aExlYXZpbmdVcmwgfHwgZXZlbnQudXJsID09PSB0aGlzLmxvY2F0aW9uQ2hhbmdlVHJpZ2dlclVybDtcbiAgICAgIHJldHVybiB0aGlzLmlnbm9yZShldmVudCk7XG4gICAgfVxuXG4gICAgLy8gQFRyYWNlKClcbiAgICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZ25vcmUoZXZlbnQ6IFJvdXRlckV2ZW50LCByZWFzb24/OiBzdHJpbmcpOiBOYXZpZ2F0aW9uU3RhdGUge1xuICAgICAgcmVhc29uID0gcmVhc29uID8gYCAtPiAke3JlYXNvbn1gIDogJyc7XG4gICAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGlnbm9yaW5nIHJvdXRlciBldmVudCR7cmVhc29ufTogJHtldmVudC5jb25zdHJ1Y3Rvci5uYW1lfSAtPiAke2V2ZW50LnVybH1gKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfShpc0lkbDogJHt0aGlzLmlkbGV9LCBzdGFydGluZ1VybDogJHt0aGlzLnN0YXJ0aW5nVXJsfSwgbG9jYXRpb25DaGFuZ2VUcmlnZ2VyVXJsOiR7dGhpcy5sb2NhdGlvbkNoYW5nZVRyaWdnZXJVcmx9KWA7XG4gICAgfVxuXG4gIH1cbn1cbiJdfQ==
@@ -3742,10 +3742,14 @@ if (false) {
3742
3742
  */
3743
3743
  onRouterCancelled(event) {
3744
3744
  // Depending on the state of the router and what was done we get a different
3745
- // sequence of events. I.e. If they just clicked a link we'll get a cancel
3746
- // with the locationChangeTriggerUrl as the final event. However the user
3747
- // started the initial navigation with a pop state then we'll get one of
3748
- // those with the locationChangeTriggerUrl but no cancel event with it.
3745
+ // sequence of events.
3746
+ // If the navigation change was triggered by clicking a link we'll get a cancel with the locationChangeTriggerUrl as the final event.
3747
+ // If the navigation change was triggered with a pop state then we'll get an onPopState with the locationChangeTriggerUrl but no cancel event with it.
3748
+ if (this.gotPopStateWithLeavingUrl && this.interactionService.isActive()) {
3749
+ /** @type {?} */
3750
+ const interactionIds = this.interactionService.activeInteractionContextIds.value;
3751
+ this.resetBrowserLocation(this.placeRouter.parseUrl(this.startingUrl).updateInteractionIds(interactionIds).url);
3752
+ }
3749
3753
  return this.gotPopStateWithLeavingUrl || this.locationChangeTriggerUrl === event.url ? this.createIdleState() : this.ignore(event);
3750
3754
  }
3751
3755
  /**