mobicloud-core 1.17.21 → 1.17.22

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.
@@ -181,13 +181,12 @@ export class MobicloudCoreService {
181
181
  let orgid_override;
182
182
  if (this.mobiUserProfile()?.isEmployeeUser) {
183
183
  if (this.mobiUserProfile()?.isEmployeeMasterUser) {
184
- let app_orgId = this.applicationDetails()?.OrganizationId?.toLowerCase();
185
184
  let user_org_id = this.mobiUserProfile()?.user_partyid?.toLowerCase();
186
- if ((user_org_id != undefined && app_orgId != undefined) && app_orgId != user_org_id) {
185
+ if (user_org_id != undefined) {
187
186
  orgid_override = user_org_id;
188
187
  }
189
188
  if (this.configService.oidc_log) {
190
- console.log("getProfileDetails", "isEmployeeMasterUser", app_orgId, user_org_id, orgid_override);
189
+ console.log("getProfileDetails", "isEmployeeMasterUser", user_org_id, orgid_override);
191
190
  }
192
191
  }
193
192
  url = `${this.configService.getMobiManagementDataUrl()}employee(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;
@@ -610,4 +609,4 @@ export function evaluateForMasterOrganizationClearance(errorMessage) {
610
609
  }
611
610
  return anyRemoved;
612
611
  }
613
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWNsb3VkLWNvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9iaWNsb3VkLWNvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFjLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFRLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBc0IsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7QUFPNUcsTUFBTSxPQUFPLG9CQUFvQjtJQW9CL0IsWUFBc0IsVUFBc0IsRUFBUyxhQUFxQztRQUFwRSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBbEJuRixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQVcsSUFBSSxDQUFDO1FBQ3BDLHFCQUFnQixHQUFXLEtBQUssQ0FBQztRQUNqQyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUl0QyxTQUFJLEdBQUcsTUFBTSxDQUFjLElBQUksQ0FBQyxDQUFDO1FBQ2pDLG9CQUFlLEdBQUUsTUFBTSxDQUE4QixTQUFTLENBQUMsQ0FBQztRQUNoRSx1QkFBa0IsR0FBRyxNQUFNLENBQWlDLFNB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LEdBQUcsSUFBSSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyLCBVc2VyLCBMb2cgfSBmcm9tICdvaWRjLWNsaWVudCc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgcmV0cnkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRpbWVvdXQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2JpY2xvdWRDb25maWdTZXJ2aWNlIH0gZnJvbSBcIi4vbW9iaWNsb3VkLWNvbmZpZy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBNb2JpVXNlclByb2ZpbGUgfSBmcm9tIFwiLi4vdHlwZXMvbW9iaS11c2VyLXByb2ZpbGVcIjtcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGV0YWlscywgUHJvZmlsZURldGFpbHMsIEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZSB9IGZyb20gXCIuLi90eXBlcy9hcHBsaWNhdGlvbi1kZXRhaWxzXCI7XG5pbXBvcnQgeyBDb3VudHJ5IH0gZnJvbSBcIi4uL3R5cGVzL2NvdW50cnlcIjtcbmltcG9ydCB7IElPRGF0YVJlc3VsdCB9IGZyb20gXCIuLi90eXBlcy9vZGF0YS1yZXN1bHRcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTW9iaWNsb3VkQ29yZVNlcnZpY2Uge1xuXG4gIHB1YmxpYyBfYXBwVmVyc2lvbjogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfYXBwTmFtZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBfYXBwVGl0bGU6IHN0cmluZyA9ICcnO1xuXG4gIHB1YmxpYyByZXF1aXJlX09yZ2FuaXphdGlvbjpib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHJlcXVpcmVfQ3VzdG9tZXI6Ym9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcmVxdWlyZV9WZW5kb3I6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgbWFuYWdlcjogVXNlck1hbmFnZXIgfCB1bmRlZmluZWQ7XG5cbiAgdXNlciA9IHNpZ25hbDxVc2VyIHwgbnVsbD4obnVsbCk7XG4gIG1vYmlVc2VyUHJvZmlsZT0gc2lnbmFsPE1vYmlVc2VyUHJvZmlsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgYXBwbGljYXRpb25EZXRhaWxzID0gc2lnbmFsPEFwcGxpY2F0aW9uRGV0YWlscyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvZmlsZURldGFpbHMgPSBzaWduYWw8UHJvZmlsZURldGFpbHMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvdW50cmllcyA9IHNpZ25hbDxNYXA8c3RyaW5nLCBDb3VudHJ5PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgXG5cbiAgcHVibGljIFVzZXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8e3VzZXI6IFVzZXJ8dW5kZWZpbmVkfG51bGwsIHByb2ZpbGU6IE1vYmlVc2VyUHJvZmlsZXx1bmRlZmluZWQsIHByb2ZpbGVEZXRhaWxzOlByb2ZpbGVEZXRhaWxzfHVuZGVmaW5lZH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7dXNlcjogVXNlcnx1bmRlZmluZWR8bnVsbCwgcHJvZmlsZTogTW9iaVVzZXJQcm9maWxlfHVuZGVmaW5lZCwgcHJvZmlsZURldGFpbHM6UHJvZmlsZURldGFpbHN8dW5kZWZpbmVkfT4oKTsgXG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBNb2JpY2xvdWRDb25maWdTZXJ2aWNlKSB7IFxuICAgIHRoaXMudXNlcm1hbmFnZXJfVXNlckxvYWRlZCA9IHRoaXMudXNlcm1hbmFnZXJfVXNlckxvYWRlZC5iaW5kKHRoaXMpOyBcbiAgICB0aGlzLnVzZXJtYW5hZ2VyX1VzZXJVbmxvYWRlZCA9IHRoaXMudXNlcm1hbmFnZXJfVXNlclVubG9hZGVkLmJpbmQodGhpcyk7IFxuXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIExvZy5sb2dnZXIgPSBjb25zb2xlO1xuICAgICAgTG9nLmxldmVsID0gTG9nLkRFQlVHOyAgXG4gICAgfVxuICAgIHRoaXMubWFuYWdlciA9IG5ldyBVc2VyTWFuYWdlcihcbiAgICAgIHtcbiAgICAgICAgYXV0aG9yaXR5OiBjb25maWdTZXJ2aWNlLm9pZGNfYXV0aG9yaXR5LFxuICAgICAgICBjbGllbnRfaWQ6IGNvbmZpZ1NlcnZpY2Uub2lkY19jbGllbnRfaWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IGNvbmZpZ1NlcnZpY2Uub2lkY19jbGllbnRfc2VjcmV0LFxuICAgICAgICByZWRpcmVjdF91cmk6IGNvbmZpZ1NlcnZpY2Uub2lkY19yZWRpcmVjdF91cmksXG4gICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTogY29uZmlnU2VydmljZS5vaWRjX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogY29uZmlnU2VydmljZS5vaWRjX3Jlc3BvbnNlX3R5cGUsXG4gICAgICAgIHNjb3BlOiBjb25maWdTZXJ2aWNlLm9pZGNfc2NvcGVzLFxuICAgICAgICBmaWx0ZXJQcm90b2NvbENsYWltczogdHJ1ZSxcbiAgICAgICAgbG9hZFVzZXJJbmZvOiB0cnVlLFxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpOiBjb25maWdTZXJ2aWNlLm9pZGNfcmVkaXJlY3Rfc2lsZW50X3VyaVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFVzZXJMb2FkZWQodGhpcy51c2VybWFuYWdlcl9Vc2VyTG9hZGVkKTsgICAgXG4gICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy51c2VybWFuYWdlcl9Vc2VyVW5sb2FkZWQpO1xuXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIHRoaXMuZW5hYmxlT2lkY0xvZ0V2ZW50cygpOyAgXG4gICAgfVxuXG4gICAgdGhpcy5tYW5hZ2VyLmNsZWFyU3RhbGVTdGF0ZSgpO1xuXG4gICAgdGhpcy5tYW5hZ2VyLmdldFVzZXIoKS50aGVuKChfdXNlcjpVc2VyfG51bGwpID0+IHtcbiAgICAgIHRoaXMudXNlci5zZXQoX3VzZXIpO1xuICAgICAgaWYoX3VzZXIpXG4gICAgICAgIHRoaXMubW9iaVVzZXJQcm9maWxlLnNldChuZXcgTW9iaVVzZXJQcm9maWxlKF91c2VyKSk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMubW9iaVVzZXJQcm9maWxlLnNldCh1bmRlZmluZWQpO1xuXG4gICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uc3RydWN0b3I6Om1hbmFnZXIuZ2V0VXNlcigpXCIsIFwiZ2V0VXNlciBjb21wbGV0ZVwiLCBfdXNlciwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpO1xuXG4gICAgICB0aGlzLm9uVXNlckNoYW5nZWQoKS50aGVuKCgpID0+IFxuICAgICAge1xuICAgICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpXG4gICAgICAgICAgY29uc29sZS5sb2coXCJjb25zdHJ1Y3Rvcjo6bWFuYWdlci5nZXRVc2VyKClcIiwgXCJvblVzZXJDaGFuZ2VkIGNvbXBsZXRlXCIsIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpKTsgXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVzZXJtYW5hZ2VyX1VzZXJMb2FkZWQoX3VzZXI6VXNlcil7XG4gICAgdGhpcy51c2VyLnNldChfdXNlcik7XG4gICAgaWYoX3VzZXIpXG4gICAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZS5zZXQobmV3IE1vYmlVc2VyUHJvZmlsZShfdXNlcikpO1xuICAgIGVsc2VcbiAgICAgIHRoaXMubW9iaVVzZXJQcm9maWxlLnNldCh1bmRlZmluZWQpO1xuXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKCdVc2VyIGxvYWRlZCcsIF91c2VyLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSwgdGhpcy5wcm9maWxlRGV0YWlscygpKTtcbiAgICB9XG4gICAgdGhpcy5vblVzZXJDaGFuZ2VkKCk7ICAgIFxuICB9XG5cbiAgdXNlcm1hbmFnZXJfVXNlclVubG9hZGVkKCl7XG4gICAgdGhpcy51c2VyLnNldChudWxsKTtcbiAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZS5zZXQodW5kZWZpbmVkKTtcbiAgICB0aGlzLm9uVXNlckNoYW5nZWQoKTsgXG5cbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coJ1VzZXIgdW5sb2FkZWQnLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSwgdGhpcy5wcm9maWxlRGV0YWlscygpKTtcbiAgICB9IFxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uVXNlckNoYW5nZWQoKSA6IFByb21pc2U8dm9pZD5cbiAge1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcIm9uVXNlckNoYW5nZWRcIiwgXCJ1c2VyXCIsIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpLCB0aGlzLnByb2ZpbGVEZXRhaWxzKCkpOyBcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMudXNlcigpKSB7XG4gICAgICAvL0xvYWQgYXBwbGljYXRpb24gZGV0YWlscyAocmVsYXRlZCB0byBsb2dnZWQgaW4gb3JnYW5pemF0aW9uIHVzZXIpXG4gICAgICBsZXQgYXBwUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbkRldGFpbHMoKTtcbiAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZylcbiAgICAgICAgY29uc29sZS5sb2coXCJvblVzZXJDaGFuZ2VkXCIsIFwiYXBwUmVzdWx0XCIsYXBwUmVzdWx0KTtcblxuICAgICAgLy9Mb2FkIFByb2ZpbGUgRGV0YWlscyAoVGhlIGFjdHVhbCBlbXBsb3llZSlcbiAgICAgIGxldCBwcm9maWxlRGV0YWlsc1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0UHJvZmlsZURldGFpbHMoKTtcbiAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwib25Vc2VyQ2hhbmdlZFwiLCBcImdldFByb2ZpbGVEZXRhaWxzIHJlc3VsdFwiLHByb2ZpbGVEZXRhaWxzUmVzdWx0KTsgXG4gICAgICAgIGNvbnNvbGUubG9nKFwib25Vc2VyQ2hhbmdlZFwiLCBcImdldFByb2ZpbGVEZXRhaWxzXCIsIHRoaXMucHJvZmlsZURldGFpbHMoKSk7XG4gICAgICB9IFxuICAgICAgXG4gICAgICAvL0xvYWQgY291bnRyaWVzIChpZiBub3QgbG9hZGVkKVxuICAgICAgaWYoIXRoaXMuY291bnRyaWVzKCkpe1xuICAgICAgICBsZXQgY291bnRyaWVzUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRDb3VudHJpZXMoKTtcbiAgICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm9uVXNlckNoYW5nZWRcIiwgXCJnZXRDb3VudHJpZXMgcmVzdWx0XCIsY291bnRyaWVzUmVzdWx0KTsgXG4gICAgICAgICAgY29uc29sZS5sb2coXCJvblVzZXJDaGFuZ2VkXCIsIFwiZ2V0Q291bnRyaWVzXCIsIHRoaXMuY291bnRyaWVzKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5tb2JpVXNlclByb2ZpbGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzLnNldCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2V0KHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgdGhpcy5Vc2VyQ2hhbmdlZC5lbWl0KHt1c2VyOiB0aGlzLnVzZXIoKSwgcHJvZmlsZTogdGhpcy5tb2JpVXNlclByb2ZpbGUoKSwgcHJvZmlsZURldGFpbHM6IHRoaXMucHJvZmlsZURldGFpbHMoKX0pO1xuICB9XG5cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbkRldGFpbHMocmVxdWVzdFRpbWVvdXQ6bnVtYmVyPTMwMDAwKTogUHJvbWlzZTxBcHBsaWNhdGlvbkRldGFpbHMgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNBdXRoZW50aWNhdGVkKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkFwcGxpY2F0aW9uRGV0YWlscyBpcyBudWxsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2V0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCkgJiYgIXRoaXMuaGFzTWFzdGVyT3JnYW5pemF0aW9uKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkFwcGxpY2F0aW9uRGV0YWlscyBpcyBudWxsLCBNYXN0ZXJPcmdhbml6YXRpb24gaXMgbm90IHNlbGVjdGVkXCIpO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2V0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldEFwaUJhc2VVcmwoKX1BcHBsaWNhdGlvbkRldGFpbHNgO1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKVxuICAgICAgICAuc2V0KCdrZXknLCB0aGlzLmNvbmZpZ1NlcnZpY2UuYXBwX25hbWUpXG4gICAgICAgIC5zZXQoJ2VudicsIHRoaXMuY29uZmlnU2VydmljZS5lbnZpcm9ubWVudCk7XG4gICAgICBcbiAgICAgIGNvbnN0IGFwcERldGFpbHMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldDxBcHBsaWNhdGlvbkRldGFpbHM+KHVybCwgeyBwYXJhbXMgfSkucGlwZShcbiAgICAgICAgICB0aW1lb3V0KHJlcXVlc3RUaW1lb3V0KSxyZXRyeSh7XG4gICAgICAgICAgICBjb3VudDogMixcbiAgICAgICAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgICAgICAgcmVzZXRPblN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5zZXQoYXBwRGV0YWlscyk7XG4gICAgICByZXR1cm4gYXBwRGV0YWlscztcbiAgICAgIFxuICAgIH0gXG4gICAgY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJnZXRBcHBsaWNhdGlvbkRldGFpbHMgZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNldCh1bmRlZmluZWQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0Q291bnRyaWVzKCk6IFByb21pc2U8TWFwPHN0cmluZywgQ291bnRyeT4+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0TW9iaU1hbmFnZW1lbnREYXRhVXJsKCl9Q291bnRyeWA7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdDpJT0RhdGFSZXN1bHQ8Q291bnRyeT4gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50LmdldDxJT0RhdGFSZXN1bHQ8Q291bnRyeT4+KHVybCwge1xuICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgJyRmaWx0ZXInOiAnZW5hYmxlZCBlcSB0cnVlJyxcbiAgICAgICAgICAgICckb3JkZXJieSc6ICdOYW1lJyxcbiAgICAgICAgICAgICckc2VsZWN0JzogJ2NvZGUyLE5hbWUsTG9jYWxOYW1lLFRyYWRlQXJlYSxTaGlwcGluZ19SZXF1aXJlX1N0YXRlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZSh0aW1lb3V0KDE1MDAwKSxyZXRyeSh7XG4gICAgICAgICAgY291bnQ6IDIsXG4gICAgICAgICAgZGVsYXk6IDEwMDAsXG4gICAgICAgICAgcmVzZXRPblN1Y2Nlc3M6IHRydWVcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgICAgXG4gICAgICBjb25zdCBjb3VudHJpZXNfbWFwID0gbmV3IE1hcChyZXN1bHQudmFsdWUubWFwKChjb3VudHJ5OkNvdW50cnkpID0+IFtjb3VudHJ5LkNvZGUyID8/ICcnLCBjb3VudHJ5XSkpO1xuICAgICAgXG4gICAgICB0aGlzLmNvdW50cmllcy5zZXQoY291bnRyaWVzX21hcCk7XG4gICAgICBcbiAgICAgIHJldHVybiBjb3VudHJpZXNfbWFwO1xuICAgICAgXG4gICAgfSBcbiAgICBjYXRjaCAoZXJyb3I6YW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgIC8vIHJldHVybiBuZXcgTWFwPHN0cmluZywgQ291bnRyeT4oKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuIFxuICBhc3luYyBnZXRQcm9maWxlRGV0YWlscyhyZXF1ZXN0VGltZW91dDpudW1iZXI9MzAwMDApOiBQcm9taXNlPFByb2ZpbGVEZXRhaWxzIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpIHx8ICF0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy51c2VyX2lkKSB7XG4gICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgICBsZXQgcHJvZmlsZSA9IHRoaXMubW9iaVVzZXJQcm9maWxlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJvZmlsZURldGFpbHNcIiwgXCJubyB1c2VyXCIscHJvZmlsZSk7IFxuICAgICAgfSAgICAgIFxuICAgICAgdGhpcy5wcm9maWxlRGV0YWlscy5zZXQodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIGxldCB1cmw6c3RyaW5nfHVuZGVmaW5lZDtcbiAgICBsZXQgb3JnaWRfb3ZlcnJpZGU6c3RyaW5nfHVuZGVmaW5lZDtcbiAgICBpZih0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0VtcGxveWVlVXNlcil7ICAgICAgICBcbiAgICAgIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzRW1wbG95ZWVNYXN0ZXJVc2VyKXtcbiAgICAgICAgbGV0IGFwcF9vcmdJZCA9IHRoaXMuYXBwbGljYXRpb25EZXRhaWxzKCk/Lk9yZ2FuaXphdGlvbklkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdXNlcl9vcmdfaWQgPSB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy51c2VyX3BhcnR5aWQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmKCh1c2VyX29yZ19pZCAhPSB1bmRlZmluZWQgJiYgYXBwX29yZ0lkICE9IHVuZGVmaW5lZCkgJiYgYXBwX29yZ0lkICE9IHVzZXJfb3JnX2lkKXtcbiAgICAgICAgICBvcmdpZF9vdmVycmlkZSA9IHVzZXJfb3JnX2lkO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcm9maWxlRGV0YWlsc1wiLCBcImlzRW1wbG95ZWVNYXN0ZXJVc2VyXCIsYXBwX29yZ0lkLCB1c2VyX29yZ19pZCwgb3JnaWRfb3ZlcnJpZGUpOyBcbiAgICAgICAgfSAgXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaXNFbXBsb3llZU1hc3RlclVzZXJcIiwgYXBwX29yZ0lkLCB1c2VyX29yZ19pZCwgb3JnaWRfb3ZlcnJpZGUpO1xuICAgICAgfVxuICAgICAgdXJsID0gYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldE1vYmlNYW5hZ2VtZW50RGF0YVVybCgpfWVtcGxveWVlKCR7dGhpcy5tb2JpVXNlclByb2ZpbGUoKT8udXNlcl9pZH0pPyRleHBhbmQ9SW1hZ2UoJHNlbGVjdD1TdG9yYWdlQWNjb3VudE5hbWUsQmxvYkNvbnRhaW5lck5hbWUsQmxvYk5hbWUpYDtcbiAgICB9XG4gICAgZWxzZSBpZih0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0N1c3RvbWVyVXNlcil7XG4gICAgICB1cmwgPSBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0TW9iaU1hbmFnZW1lbnREYXRhVXJsKCl9Y3VzdG9tZXJ1c2VyKCR7dGhpcy5tb2JpVXNlclByb2ZpbGUoKT8udXNlcl9pZH0pPyRleHBhbmQ9SW1hZ2UoJHNlbGVjdD1TdG9yYWdlQWNjb3VudE5hbWUsQmxvYkNvbnRhaW5lck5hbWUsQmxvYk5hbWUpYDtcbiAgICB9XG4gICAgZWxzZSBpZih0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc1ZlbmRvclVzZXIpe1xuICAgICAgdXJsID0gYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldE1vYmlNYW5hZ2VtZW50RGF0YVVybCgpfXZlbmRvcnVzZXIoJHt0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy51c2VyX2lkfSk/JGV4cGFuZD1JbWFnZSgkc2VsZWN0PVN0b3JhZ2VBY2NvdW50TmFtZSxCbG9iQ29udGFpbmVyTmFtZSxCbG9iTmFtZSlgO1xuICAgIH1cbiAgICBpZiAoIXVybCkge1xuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgbGV0IHByb2ZpbGUgPSB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImdldFByb2ZpbGVEZXRhaWxzXCIsIFwibm8gdXJsXCIsIHByb2ZpbGUpOyBcbiAgICAgIH0gXG4gICAgICB0aGlzLnByb2ZpbGVEZXRhaWxzLnNldCh1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHVybCk7XG4gICAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xuICAgICAgaWYob3JnaWRfb3ZlcnJpZGUpe1xuICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoXCJPcmdhbml6YXRpb25JZFwiLCBvcmdpZF9vdmVycmlkZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJvZmlsZURldGFpbHNcIiwgXCJ1cmxcIiwgdXJsKTsgXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJvZmlsZURldGFpbHNcIiwgXCJoZWFkZXJzXCIsIGhlYWRlcnMpOyBcbiAgICAgIH0gXG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0PElPRGF0YVJlc3VsdDxhbnk+Pih1cmwsIHsgaGVhZGVyczogaGVhZGVycyB9KS5waXBlKFxuICAgICAgICAgIHRpbWVvdXQocmVxdWVzdFRpbWVvdXQpXG4gICAgICAgIClcbiAgICAgICk7XG5cbiAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJvZmlsZURldGFpbHNcIiwgXCJyZXN1bHRcIiwgcmVzdWx0KTsgXG4gICAgICB9IFxuICAgICAgXG4gICAgICBpZiAoIXJlc3VsdC52YWx1ZSB8fCAhcmVzdWx0LnZhbHVlWzBdKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBfdXNlciA9IHJlc3VsdC52YWx1ZVswXTtcbiAgICAgIGNvbnN0IF9wcm9maWxlRGV0YWlscyA9ICBPYmplY3QuYXNzaWduKG5ldyBQcm9maWxlRGV0YWlscygpLCB7XG4gICAgICAgIElkOiBfdXNlci5JZD8udG9TdHJpbmcoKSxcbiAgICAgICAgTmFtZTogX3VzZXIuTmFtZSxcbiAgICAgICAgSW1hZ2U6IF91c2VyLkltYWdlLFxuICAgICAgICBVc2VyOiBfdXNlclxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMucHJvZmlsZURldGFpbHMuc2V0KF9wcm9maWxlRGV0YWlscyk7XG5cbiAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJvZmlsZURldGFpbHNcIiwgXCJwcm9maWxlRGV0YWlsc1wiLCBfcHJvZmlsZURldGFpbHMpOyBcbiAgICAgIH0gXG5cbiAgICAgIHJldHVybiBfcHJvZmlsZURldGFpbHM7XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiZ2V0UHJvZmlsZURldGFpbHMgZXJyb3I6XCIsIGVycm9yKTtcbiAgICAgIHRoaXMucHJvZmlsZURldGFpbHMuc2V0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSAgXG5cblxuICAvLyAtLS0gU2lnbkluIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW4ocmVkaXJlY3RVcmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2lnbkluXCIsIHJlZGlyZWN0VXJsKTsgIFxuICAgIH1cbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWduaW5SZWRpcmVjdCh7IGRhdGE6IHsgcmVkaXJlY3RVcmw6IHJlZGlyZWN0VXJsIH0gfSkuY2F0Y2goIChyZWFzb246IGFueSkgPT5cbiAgICB7XG4gICAgICBjb25zb2xlLmVycm9yKFwic2lnbkluIGZhaWxlZDpcIiwgcmVhc29uLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKHJlYXNvbik7XG4gICAgfSk7XG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2lnbkluXCIsIFwicmVzdWx0XCIsIHJlc3VsdCwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTaWduSW4oKTogUHJvbWlzZTxVc2VyfG51bGw+IHsgICAgXG4gICAgbGV0IF91c2VyID0gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWduaW5SZWRpcmVjdENhbGxiYWNrKCkgPz8gbnVsbDtcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJjb21wbGV0ZVNpZ25JblwiLCBfdXNlciwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfVxuICAgIHJldHVybiBfdXNlcjtcbiAgfVxuXG4gIC8vIC0tLSBTaWxlbnQgU2lnbkluIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIGFzeW5jIHNpZ25JblNpbGVudCgpOiBQcm9taXNlPGFueT4geyAgXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2lnbkluU2lsZW50XCIpOyAgXG4gICAgfSAgXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHRoaXMubWFuYWdlcj8uc2lnbmluU2lsZW50KCkudGhlbigoX3VzZXI6VXNlcikgPT5cbiAgICAgIHtcbiAgICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInNpZ25JblNpbGVudFwiLCBcInJlc3VsdFwiLCBfdXNlciwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgICAgIH0gIFxuICAgICAgICB0aGlzLm9uU2lnbmVkSW5TaWxlbnQoX3VzZXIpO1xuICAgICAgfSkuY2F0Y2goIChyZWFzb246IGFueSkgPT5cbiAgICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcInNpZ25JblNpbGVudCBmYWlsZWQ6XCIsIHJlYXNvbiwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpO1xuICAgICAgICByZXR1cm4gbmV3IEVycm9yKHJlYXNvbik7XG4gICAgICB9KTtcblxuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcInNpZ25JblNpbGVudFwiLCBcInJlc3VsdFwiLCByZXN1bHQsIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpKTsgIFxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIG9uU2lnbmVkSW5TaWxlbnQoX3VzZXI6IFVzZXIpe1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcIm9uU2lnbmVkSW5TaWxlbnRcIiwgX3VzZXIsIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpKTsgIFxuICAgIH0gIFxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlU2lsZW50U2lnbkluKCkgIDogUHJvbWlzZTxhbnk+eyAgXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwiY29tcGxldGVTaWxlbnRTaWduSW5cIiwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfSAgICAgICBcbiAgICBsZXQgcmVzdWx0ID0gIGF3YWl0IHRoaXMubWFuYWdlcj8uc2lnbmluU2lsZW50Q2FsbGJhY2soKTtcblxuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcInNpZ25JblNpbGVudFwiLCBcInJlc3VsdFwiLCByZXN1bHQsIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpKTsgIFxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gLS0tIFNpZ25PdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYXN5bmMgc2lnbm91dCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcInNpZ25vdXRcIiwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfSAgIFxuICAgIHJldHVybiBhd2FpdCB0aGlzLm1hbmFnZXI/LnNpZ25vdXRSZWRpcmVjdCgpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNvbXBsZXRlU2lnbm91dCgpIHtcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJjb21wbGV0ZVNpZ25vdXRcIiwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfVxuICB9XG5cbiAgZW5hYmxlT2lkY0xvZ0V2ZW50cygpe1xuICAgIGlmKHRoaXMubWFuYWdlcil7XG4gICAgICAvLyB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFVzZXJMb2FkZWQoKF91c2VyOlVzZXIpID0+IHtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ1VzZXIgbG9hZGVkOicsIF91c2VyKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICAvLyB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFVzZXJVbmxvYWRlZCgoKSA9PiB7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKCdVc2VyIHVubG9hZGVkJyk7XG4gICAgICAvLyB9KTtcblxuICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyU2lnbmVkSW4oKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnVXNlciBzaWduZWQgaW4uLi4nKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWNjZXNzIHRva2VuIGV4cGlyaW5nLi4uJyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRBY2Nlc3NUb2tlbkV4cGlyZWQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWNjZXNzIHRva2VuIGV4cGlyZWQnKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFNpbGVudFJlbmV3RXJyb3IoKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTaWxlbnQgcmVuZXcgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkVXNlclNpZ25lZE91dCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdVc2VyIHNpZ25lZCBvdXQgZnJvbSBpZGVudGl0eSBzZXJ2ZXInKTtcbiAgICAgICAgY29uc29sZS50cmFjZSgnVXNlciBzaWduZWQgb3V0IHN0YWNrIHRyYWNlJyk7XG4gICAgICAgIC8vIFRoaXMgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCB0byBjaGVjayAtIGlmIHRoaXMgaXMgZmlyaW5nLFxuICAgICAgICAvLyBpdCBjb3VsZCB0cmlnZ2VyIGFwcCByZWxvYWRzXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5yZW1vdmVVc2VyU2lnbmVkT3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbW92ZVVzZXJTaWduZWRPdXQgY2FsbGVkJyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyU2Vzc2lvbkNoYW5nZWQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnYWRkVXNlclNlc3Npb25DaGFuZ2VkIGNhbGxlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubWFuYWdlci5ldmVudHMucmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCBjYWxsZWQnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIC0tLSBIZWxwZXIgbWV0aG9kcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcigpICE9IG51bGwgJiYgIXRoaXMudXNlcigpPy5leHBpcmVkO1xuICB9XG5cbiAgcHVibGljIGlzT3JnYW5pemF0aW9uQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25BZG1pbiB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0VtcGxveWVlVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25BZG1pbiB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0VtcGxveWVlVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9XG5cbiAgcHVibGljIGlzT3JnYW5pemF0aW9uVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25Vc2VyIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uQWRtaW4pO1xuICB9XG5cbiAgcHVibGljIGlzTWFzdGVyT3JnYW5pemF0aW9uVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvbkFkbWluKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25BZG1pbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uQWRtaW4pKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VtcGxveWVlQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25BZG1pbiB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0VtcGxveWVlVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNFbXBsb3llZU1hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzRW1wbG95ZWVNYXN0ZXJVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckVtcGxveWVlQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25Vc2VyIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uQWRtaW4gfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNFbXBsb3llZVVzZXIpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfSAgXG5cbiAgcHVibGljIGlzQ3VzdG9tZXJVc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0N1c3RvbWVyVXNlcik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJDdXN0b21lclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0N1c3RvbWVyVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9XG5cbiAgcHVibGljIGlzVmVuZG9yVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNWZW5kb3JVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlclZlbmRvclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc1ZlbmRvclVzZXIpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfSAgXG5cbiAgcHVibGljIGlzQjJCQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMuaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCkgfHwgdGhpcy5pc0N1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKXx8IHRoaXMuaXNWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckIyQkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLmlzT3JnYW5pemF0aW9uQXV0aGVudGljYXRlZCgpIHx8IHRoaXMuaXNDdXN0b21lclVzZXJBdXRoZW50aWNhdGVkKCl8fCB0aGlzLmlzVmVuZG9yVXNlckF1dGhlbnRpY2F0ZWQoKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc01hc3RlclVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNNYXN0ZXJBZG1pbik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJBZG1pbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNNYXN0ZXJBZG1pbik7XG4gIH1cblxuICBwdWJsaWMgc2VjdXJpdHlSb2xlKCk6IEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZXx1bmRlZmluZWQge1xuICAgIGlmKHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmIHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LnNlY3VyaXR5Um9sZSl7XG4gICAgICByZXR1cm4gRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlW3RoaXMubW9iaVVzZXJQcm9maWxlKCk/LnNlY3VyaXR5Um9sZSBhcyBrZXlvZiB0eXBlb2YgRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlXTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBoYXNNYXN0ZXJPcmdhbml6YXRpb24oKTogYm9vbGVhbiB7XG4gICAgdmFyIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICBpZihzdHJNYXN0ZXJPcmdhbml6YXRpb25JZCAmJiBzdHJNYXN0ZXJPcmdhbml6YXRpb25JZC5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXN0ZXJPcmdhbml6YXRpb24oKTogc3RyaW5nfG51bGwge1xuICAgIHZhciBzdHJNYXN0ZXJPcmdhbml6YXRpb25JZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIik7XG4gICAgcmV0dXJuIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldE1hc3Rlck9yZ2FuaXphdGlvbihzdHJNYXN0ZXJPcmdhbml6YXRpb25JZDogc3RyaW5nfG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZihzdHJNYXN0ZXJPcmdhbml6YXRpb25JZCl7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIsIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkKTtcbiAgICAgIGxldCBhcHBkZXRhaWxzID0gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbkRldGFpbHMoKTtcbiAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZylcbiAgICAgICAgY29uc29sZS5sb2coXCJzZXRNYXN0ZXJPcmdhbml6YXRpb25cIiwgXCJhcHBSZXN1bHRcIiwgYXBwZGV0YWlscyk7ICAgIFxuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy5yZW1vdmVNYXN0ZXJPcmdhbml6YXRpb24oKTtcbiAgICAgIC8vIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHsgIHJlc29sdmUodW5kZWZpbmVkKTsgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU1hc3Rlck9yZ2FuaXphdGlvbigpOiB2b2lkIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICB9XG5cbiAgcHVibGljIGhhc01hc3RlckN1c3RvbWVyKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdHJNYXN0ZXJDdXN0b21lcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIpO1xuICAgIGlmKHN0ck1hc3RlckN1c3RvbWVySWQgJiYgc3RyTWFzdGVyQ3VzdG9tZXJJZC5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRNYXN0ZXJDdXN0b21lcigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3RlckN1c3RvbWVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlckN1c3RvbWVySWRcIik7XG4gICAgcmV0dXJuIHN0ck1hc3RlckN1c3RvbWVySWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyQ3VzdG9tZXIoc3RyTWFzdGVyQ3VzdG9tZXJJZDogc3RyaW5nfG51bGwpOiB2b2lkIHtcbiAgICBpZihzdHJNYXN0ZXJDdXN0b21lcklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiLCBzdHJNYXN0ZXJDdXN0b21lcklkKTsgXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnJlbW92ZU1hc3RlckN1c3RvbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlbW92ZU1hc3RlckN1c3RvbWVyKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiKTtcbiAgfSAgXG5cbiAgcHVibGljIGhhc01hc3RlclZlbmRvcigpOiBib29sZWFuIHtcbiAgICB2YXIgc3RyTWFzdGVyVmVuZG9ySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlclZlbmRvcklkXCIpO1xuICAgIGlmKHN0ck1hc3RlclZlbmRvcklkICYmIHN0ck1hc3RlclZlbmRvcklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3RlclZlbmRvcigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3RlclZlbmRvcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyVmVuZG9ySWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0TWFzdGVyVmVuZG9yKHN0ck1hc3RlclZlbmRvcklkOiBzdHJpbmd8bnVsbCk6IHZvaWQge1xuICAgIGlmKHN0ck1hc3RlclZlbmRvcklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyVmVuZG9ySWRcIiwgc3RyTWFzdGVyVmVuZG9ySWQpOyAgIFxuICAgIH1cbiAgICBlbHNle1xuICAgICAgdGhpcy5yZW1vdmVNYXN0ZXJWZW5kb3IoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlTWFzdGVyVmVuZG9yKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiTWFzdGVyVmVuZG9ySWRcIik7XG4gIH0gIFxuXG4gIHB1YmxpYyByZWRpcmVjdFVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVzZXIoKT8uc3RhdGU/LnJlZGlyZWN0VXJsO1xuICB9XG5cbiAgcHVibGljIGdldCBhY2Nlc3NUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVzZXIoKT8uYWNjZXNzX3Rva2VuID8/ICcnO1xuICB9XG5cbiAgcHVibGljIGdldCBhdXRob3JpemF0aW9uSGVhZGVyKCk6IHN0cmluZ3x1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnVzZXIoKT8udG9rZW5fdHlwZT8uY29uY2F0KFwiIFwiLCAodGhpcy51c2VyKCk/LmFjY2Vzc190b2tlbiA/PyAnJykpO1xuICB9XG5cbiAgcHVibGljIGdldCB0b2tlbkV4cGlyZXNBdCgpOiBEYXRlfHVuZGVmaW5lZCB7XG4gICAgaWYodGhpcy51c2VyKCkpe1xuICAgICAgbGV0IGV4cGlyZXNfYXQgPSB0aGlzLnVzZXIoKT8uZXhwaXJlc19hdDtcbiAgICAgIGlmKGV4cGlyZXNfYXQpXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShleHBpcmVzX2F0ICogMTAwMCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRva2VuVmFsaWRVbnRpbCgpOiBEYXRlfHVuZGVmaW5lZCB7XG4gICAgaWYodGhpcy51c2VyKCkpe1xuICAgICAgbGV0IGV4cGlyZXNfYXQgPSB0aGlzLnVzZXIoKT8uZXhwaXJlc19hdDtcbiAgICAgIGlmKGV4cGlyZXNfYXQpXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSgoZXhwaXJlc19hdCAtMTIwKSAqIDEwMDApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Rva2VuRXhwaXJlZCgpOiBib29sZWFuIHtcbiAgICBpZih0aGlzLnVzZXIoKSl7XG4gICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMudXNlcigpPy5leHBpcmVzX2luO1xuICAgICAgaWYoZXhwaXJlc19pbilcbiAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMTIwO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYW5kbGVFcnJvcihlcnJvcjphbnkpIHtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgaWYgKGVycm9yICYmIGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLmVycm9yKXtcbiAgICAgIC8vR2V0IEpzb24gZXJyb3JcbiAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yLmVycm9yO1xuICAgIH1cbiAgICBlbHNlIGlmKGVycm9yICYmIGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xuICAgICAgLy8gR2V0IGNsaWVudC1zaWRlIGVycm9yXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yLm1lc3NhZ2U7XG4gICAgfSBcbiAgICBlbHNlIHtcbiAgICAgIC8vIEdldCBzZXJ2ZXItc2lkZSBlcnJvclxuICAgICAgZXJyb3JNZXNzYWdlID0gYEVycm9yIENvZGU6ICR7ZXJyb3Iuc3RhdHVzfVxcbk1lc3NhZ2U6ICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgIH1cbiAgICAvLyB3aW5kb3cuYWxlcnQoZXJyb3JNZXNzYWdlKTtcbiAgICBsZXQgYW55UmVtb3ZlZDpib29sZWFuID0gZXZhbHVhdGVGb3JNYXN0ZXJPcmdhbml6YXRpb25DbGVhcmFuY2UoZXJyb3JNZXNzYWdlKTtcbiAgICBpZihhbnlSZW1vdmVkKXtcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gIH1cblxuICAvLy0tIFBlcm1pc3Npb25zXG4gIFNlY3VyaXR5Um9sZVByaW9yaXR5TWFwOiBSZWNvcmQ8RW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlLCBudW1iZXI+ID0ge1xuICAgIFtFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUuTm9uZV06IDAsXG4gICAgW0VtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5TdXBlclVzZXJdOiAxLFxuICAgIFtFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUuQWNjb3VudGFudF06IDIsXG4gICAgW0VtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5BZG1pbl06IDNcbiAgfTtcblxuICByZXF1aXJlRW1wbG95ZWVQZXJtaXNzaW9uKG1vYmlVc2VyUHJvZmlsZTpNb2JpVXNlclByb2ZpbGUsIGNhbGxiYWNrOiAoKHZhbGlkOmJvb2xlYW4pID0+IHZvaWQpfHVuZGVmaW5lZCA9IHVuZGVmaW5lZCwgc2VjdXJpdHlSb2xlOkVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZSA9IEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5Ob25lKSA6IGJvb2xlYW57XG4gICAgbGV0IHZhbGlkID0gKG1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvblVzZXIgfHwgXG4gICAgICAgICAgICAgICAgICBtb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25BZG1pbiB8fFxuICAgICAgICAgICAgICAgICAgKG1vYmlVc2VyUHJvZmlsZS5pc01hc3RlclVzZXIgfHwgbW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyQWRtaW4pKTtcbiAgICBpZighdmFsaWQpe1xuICAgICAgdmFsaWQgPSBtb2JpVXNlclByb2ZpbGUuaXNFbXBsb3llZVVzZXIgPz8gZmFsc2U7XG4gICAgICBpZih2YWxpZCl7XG4gICAgICAgIGxldCBlbXBsU2VjdXJpdHlSb2xlID0gRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlLk5vbmU7XG4gICAgICAgIGlmKG1vYmlVc2VyUHJvZmlsZS5zZWN1cml0eVJvbGUpe1xuICAgICAgICAgIGVtcGxTZWN1cml0eVJvbGUgPSBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGVbbW9iaVVzZXJQcm9maWxlLnNlY3VyaXR5Um9sZSBhcyBrZXlvZiB0eXBlb2YgRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlXTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZCA9IHRoaXMuU2VjdXJpdHlSb2xlUHJpb3JpdHlNYXBbZW1wbFNlY3VyaXR5Um9sZV0gPj0gdGhpcy5TZWN1cml0eVJvbGVQcmlvcml0eU1hcFtzZWN1cml0eVJvbGVdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihjYWxsYmFjayl7XG4gICAgICBjYWxsYmFjayh2YWxpZCA/PyBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZCA/PyBmYWxzZTtcbiAgfVxuXG4gIHJlcXVpcmVPcmdhbml6YXRpb25Vc2VyKG1vYmlVc2VyUHJvZmlsZTpNb2JpVXNlclByb2ZpbGUsIGNhbGxiYWNrOiAoKHZhbGlkOmJvb2xlYW4pID0+IHZvaWQpfHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkgOiBib29sZWFue1xuICAgIGxldCB2YWxpZCA9IChtb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25Vc2VyIHx8IFxuICAgICAgICAgICAgICAgICAgbW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uQWRtaW4gfHxcbiAgICAgICAgICAgICAgICAgIChtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJVc2VyIHx8IG1vYmlVc2VyUHJvZmlsZS5pc01hc3RlckFkbWluKSk7XG4gICAgaWYoY2FsbGJhY2spe1xuICAgICAgY2FsbGJhY2sodmFsaWQgPz8gZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWQgPz8gZmFsc2U7XG4gIH1cblxuICByZXF1aXJlT3JnYW5pemF0aW9uQWRtaW4obW9iaVVzZXJQcm9maWxlOk1vYmlVc2VyUHJvZmlsZSwgY2FsbGJhY2s6ICgodmFsaWQ6Ym9vbGVhbikgPT4gdm9pZCl8dW5kZWZpbmVkID0gdW5kZWZpbmVkKSA6IGJvb2xlYW57XG4gICAgbGV0IHZhbGlkID0gKG1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluIHx8XG4gICAgICAgICAgICAgICAgICAobW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyVXNlciB8fCBtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJBZG1pbikpO1xuICAgIGlmKGNhbGxiYWNrKXtcbiAgICAgIGNhbGxiYWNrKHZhbGlkID8/IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkID8/IGZhbHNlO1xuICB9XG5cbiAgcmVxdWlyZU1hc3RlclBlcm1pc3Npb24obW9iaVVzZXJQcm9maWxlOk1vYmlVc2VyUHJvZmlsZSwgY2FsbGJhY2s6ICgodmFsaWQ6Ym9vbGVhbikgPT4gdm9pZCl8dW5kZWZpbmVkID0gdW5kZWZpbmVkKSA6IGJvb2xlYW57XG4gICAgbGV0IHZhbGlkID0gKG1vYmlVc2VyUHJvZmlsZS5pc01hc3RlclVzZXIgfHwgbW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyQWRtaW4pO1xuICAgIGlmKGNhbGxiYWNrKXtcbiAgICAgIGNhbGxiYWNrKHZhbGlkID8/IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkID8/IGZhbHNlO1xuICB9XG5cbiAgcmVxdWlyZU1hc3RlckFkbWluUGVybWlzc2lvbihtb2JpVXNlclByb2ZpbGU6TW9iaVVzZXJQcm9maWxlLCBjYWxsYmFjazogKCh2YWxpZDpib29sZWFuKSA9PiB2b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQpIDogYm9vbGVhbntcbiAgICBsZXQgdmFsaWQgPSBtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJBZG1pbjtcbiAgICBpZighdmFsaWQpe1xuICAgICAgbGV0IGlzRW1wbG95ZWVNYXN0ZXIgPSAobW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyVXNlciA/PyBmYWxzZSkgJiYgKG1vYmlVc2VyUHJvZmlsZS5pc0VtcGxveWVlVXNlciA/PyBmYWxzZSk7XG4gICAgICBpZihpc0VtcGxveWVlTWFzdGVyKXtcbiAgICAgICAgbGV0IGVtcGxTZWN1cml0eVJvbGUgPSBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUuTm9uZTtcbiAgICAgICAgaWYobW9iaVVzZXJQcm9maWxlLnNlY3VyaXR5Um9sZSl7XG4gICAgICAgICAgZW1wbFNlY3VyaXR5Um9sZSA9IEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZVttb2JpVXNlclByb2ZpbGUuc2VjdXJpdHlSb2xlIGFzIGtleW9mIHR5cGVvZiBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkID0gKHRoaXMuU2VjdXJpdHlSb2xlUHJpb3JpdHlNYXBbZW1wbFNlY3VyaXR5Um9sZV0gPT0gdGhpcy5TZWN1cml0eVJvbGVQcmlvcml0eU1hcFtFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUuQWRtaW5dKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYoY2FsbGJhY2spe1xuICAgICAgY2FsbGJhY2sodmFsaWQgPz8gZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWQgPz8gZmFsc2U7XG4gIH0gICBcblxuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUZvck1hc3Rlck9yZ2FuaXphdGlvbkNsZWFyYW5jZShlcnJvck1lc3NhZ2U6c3RyaW5nKSA6IGJvb2xlYW57XG4gIGxldCBhbnlSZW1vdmVkOmJvb2xlYW4gPSBmYWxzZTtcblxuICBpZihlcnJvck1lc3NhZ2UgJiYgKFxuICAgIGVycm9yTWVzc2FnZS50b1N0cmluZygpLmluZGV4T2YoJ05vIFRlc3QgZGF0YWJhc2UgaGFzIGJlZW4gc2V0dXAnKSA+PSAwIHx8IFxuICAgIGVycm9yTWVzc2FnZS50b1N0cmluZygpLmluZGV4T2YoJ09yZ2FuaXphdGlvbiBkb2VzIG5vdCBleGlzdCcpID49IDBcbiAgKSl7XG4gICAgLy8gY29uc29sZS5sb2coXCJDaGVjayBmb3IgY2xlYXJhbmNlIG9mIE1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgIFxuICAgIGxldCBtYXN0ZXJPcmdJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIik7XG4gICAgaWYobWFzdGVyT3JnSWQpe1xuICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBNYXN0ZXJPcmdhbml6YXRpb25JZDpcIiwgbWFzdGVyT3JnSWQpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICAgIGFueVJlbW92ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBjdXN0b21lcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIpO1xuICAgIGlmKGN1c3RvbWVySWQpe1xuICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBNYXN0ZXJDdXN0b21lcklkOlwiLCBjdXN0b21lcklkKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiKTtcbiAgICAgIGFueVJlbW92ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCB2ZW5kb3JJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiTWFzdGVyVmVuZG9ySWRcIik7XG4gICAgaWYodmVuZG9ySWQpe1xuICAgICAgY29uc29sZS5sb2coXCJDbGVhcmluZyBNYXN0ZXJWZW5kb3JJZDpcIiwgdmVuZG9ySWQpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgICAgIGFueVJlbW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbnlSZW1vdmVkO1xufVxuIl19
612
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9iaWNsb3VkLWNvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9iaWNsb3VkLWNvcmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFjLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsV0FBVyxFQUFRLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBc0IsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7QUFPNUcsTUFBTSxPQUFPLG9CQUFvQjtJQW9CL0IsWUFBc0IsVUFBc0IsRUFBUyxhQUFxQztRQUFwRSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVMsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBbEJuRixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBQ3RCLGNBQVMsR0FBVyxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQVcsSUFBSSxDQUFDO1FBQ3BDLHFCQUFnQixHQUFXLEtBQUssQ0FBQztRQUNqQyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUl0QyxTQUFJLEdBQUcsTUFBTSxDQUFjLElBQUksQ0FBQyxDQUFDO1FBQ2pDLG9CQUFlLEdBQUUsTUFBTSxDQUE4QixTQUFTLENBQUMsQ0FBQztRQUNoRSx1QkFBa0IsR0FBRyxNQUFNLENBQWlDLFNB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b20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlciwgVXNlciwgTG9nIH0gZnJvbSAnb2lkYy1jbGllbnQnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIHJldHJ5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9iaWNsb3VkQ29uZmlnU2VydmljZSB9IGZyb20gXCIuL21vYmljbG91ZC1jb25maWcuc2VydmljZVwiO1xuaW1wb3J0IHsgTW9iaVVzZXJQcm9maWxlIH0gZnJvbSBcIi4uL3R5cGVzL21vYmktdXNlci1wcm9maWxlXCI7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkRldGFpbHMsIFByb2ZpbGVEZXRhaWxzLCBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUgfSBmcm9tIFwiLi4vdHlwZXMvYXBwbGljYXRpb24tZGV0YWlsc1wiO1xuaW1wb3J0IHsgQ291bnRyeSB9IGZyb20gXCIuLi90eXBlcy9jb3VudHJ5XCI7XG5pbXBvcnQgeyBJT0RhdGFSZXN1bHQgfSBmcm9tIFwiLi4vdHlwZXMvb2RhdGEtcmVzdWx0XCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1vYmljbG91ZENvcmVTZXJ2aWNlIHtcblxuICBwdWJsaWMgX2FwcFZlcnNpb246IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2FwcE5hbWU6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgX2FwcFRpdGxlOiBzdHJpbmcgPSAnJztcblxuICBwdWJsaWMgcmVxdWlyZV9Pcmdhbml6YXRpb246Ym9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyByZXF1aXJlX0N1c3RvbWVyOmJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHJlcXVpcmVfVmVuZG9yOmJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIG1hbmFnZXI6IFVzZXJNYW5hZ2VyIHwgdW5kZWZpbmVkO1xuXG4gIHVzZXIgPSBzaWduYWw8VXNlciB8IG51bGw+KG51bGwpO1xuICBtb2JpVXNlclByb2ZpbGU9IHNpZ25hbDxNb2JpVXNlclByb2ZpbGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGFwcGxpY2F0aW9uRGV0YWlscyA9IHNpZ25hbDxBcHBsaWNhdGlvbkRldGFpbHMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb2ZpbGVEZXRhaWxzID0gc2lnbmFsPFByb2ZpbGVEZXRhaWxzIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBjb3VudHJpZXMgPSBzaWduYWw8TWFwPHN0cmluZywgQ291bnRyeT4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IFxuXG4gIHB1YmxpYyBVc2VyQ2hhbmdlZDogRXZlbnRFbWl0dGVyPHt1c2VyOiBVc2VyfHVuZGVmaW5lZHxudWxsLCBwcm9maWxlOiBNb2JpVXNlclByb2ZpbGV8dW5kZWZpbmVkLCBwcm9maWxlRGV0YWlsczpQcm9maWxlRGV0YWlsc3x1bmRlZmluZWR9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e3VzZXI6IFVzZXJ8dW5kZWZpbmVkfG51bGwsIHByb2ZpbGU6IE1vYmlVc2VyUHJvZmlsZXx1bmRlZmluZWQsIHByb2ZpbGVEZXRhaWxzOlByb2ZpbGVEZXRhaWxzfHVuZGVmaW5lZH0+KCk7IFxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LCBwdWJsaWMgY29uZmlnU2VydmljZTogTW9iaWNsb3VkQ29uZmlnU2VydmljZSkgeyBcbiAgICB0aGlzLnVzZXJtYW5hZ2VyX1VzZXJMb2FkZWQgPSB0aGlzLnVzZXJtYW5hZ2VyX1VzZXJMb2FkZWQuYmluZCh0aGlzKTsgXG4gICAgdGhpcy51c2VybWFuYWdlcl9Vc2VyVW5sb2FkZWQgPSB0aGlzLnVzZXJtYW5hZ2VyX1VzZXJVbmxvYWRlZC5iaW5kKHRoaXMpOyBcblxuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBMb2cubG9nZ2VyID0gY29uc29sZTtcbiAgICAgIExvZy5sZXZlbCA9IExvZy5ERUJVRzsgIFxuICAgIH1cbiAgICB0aGlzLm1hbmFnZXIgPSBuZXcgVXNlck1hbmFnZXIoXG4gICAgICB7XG4gICAgICAgIGF1dGhvcml0eTogY29uZmlnU2VydmljZS5vaWRjX2F1dGhvcml0eSxcbiAgICAgICAgY2xpZW50X2lkOiBjb25maWdTZXJ2aWNlLm9pZGNfY2xpZW50X2lkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiBjb25maWdTZXJ2aWNlLm9pZGNfY2xpZW50X3NlY3JldCxcbiAgICAgICAgcmVkaXJlY3RfdXJpOiBjb25maWdTZXJ2aWNlLm9pZGNfcmVkaXJlY3RfdXJpLFxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk6IGNvbmZpZ1NlcnZpY2Uub2lkY19wb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXG4gICAgICAgIHJlc3BvbnNlX3R5cGU6IGNvbmZpZ1NlcnZpY2Uub2lkY19yZXNwb25zZV90eXBlLFxuICAgICAgICBzY29wZTogY29uZmlnU2VydmljZS5vaWRjX3Njb3BlcyxcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHRydWUsXG4gICAgICAgIGxvYWRVc2VySW5mbzogdHJ1ZSxcbiAgICAgICAgc2lsZW50X3JlZGlyZWN0X3VyaTogY29uZmlnU2VydmljZS5vaWRjX3JlZGlyZWN0X3NpbGVudF91cmlcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyTG9hZGVkKHRoaXMudXNlcm1hbmFnZXJfVXNlckxvYWRlZCk7ICAgIFxuICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkVXNlclVubG9hZGVkKHRoaXMudXNlcm1hbmFnZXJfVXNlclVubG9hZGVkKTtcblxuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICB0aGlzLmVuYWJsZU9pZGNMb2dFdmVudHMoKTsgIFxuICAgIH1cblxuICAgIHRoaXMubWFuYWdlci5jbGVhclN0YWxlU3RhdGUoKTtcblxuICAgIHRoaXMubWFuYWdlci5nZXRVc2VyKCkudGhlbigoX3VzZXI6VXNlcnxudWxsKSA9PiB7XG4gICAgICB0aGlzLnVzZXIuc2V0KF91c2VyKTtcbiAgICAgIGlmKF91c2VyKVxuICAgICAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZS5zZXQobmV3IE1vYmlVc2VyUHJvZmlsZShfdXNlcikpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZS5zZXQodW5kZWZpbmVkKTtcblxuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKVxuICAgICAgICBjb25zb2xlLmxvZyhcImNvbnN0cnVjdG9yOjptYW5hZ2VyLmdldFVzZXIoKVwiLCBcImdldFVzZXIgY29tcGxldGVcIiwgX3VzZXIsIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpKTtcblxuICAgICAgdGhpcy5vblVzZXJDaGFuZ2VkKCkudGhlbigoKSA9PiBcbiAgICAgIHtcbiAgICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKVxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29uc3RydWN0b3I6Om1hbmFnZXIuZ2V0VXNlcigpXCIsIFwib25Vc2VyQ2hhbmdlZCBjb21wbGV0ZVwiLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7IFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1c2VybWFuYWdlcl9Vc2VyTG9hZGVkKF91c2VyOlVzZXIpe1xuICAgIHRoaXMudXNlci5zZXQoX3VzZXIpO1xuICAgIGlmKF91c2VyKVxuICAgICAgdGhpcy5tb2JpVXNlclByb2ZpbGUuc2V0KG5ldyBNb2JpVXNlclByb2ZpbGUoX3VzZXIpKTtcbiAgICBlbHNlXG4gICAgICB0aGlzLm1vYmlVc2VyUHJvZmlsZS5zZXQodW5kZWZpbmVkKTtcblxuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZygnVXNlciBsb2FkZWQnLCBfdXNlciwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCksIHRoaXMucHJvZmlsZURldGFpbHMoKSk7XG4gICAgfVxuICAgIHRoaXMub25Vc2VyQ2hhbmdlZCgpOyAgICBcbiAgfVxuXG4gIHVzZXJtYW5hZ2VyX1VzZXJVbmxvYWRlZCgpe1xuICAgIHRoaXMudXNlci5zZXQobnVsbCk7XG4gICAgdGhpcy5tb2JpVXNlclByb2ZpbGUuc2V0KHVuZGVmaW5lZCk7XG4gICAgdGhpcy5vblVzZXJDaGFuZ2VkKCk7IFxuXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKCdVc2VyIHVubG9hZGVkJywgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCksIHRoaXMucHJvZmlsZURldGFpbHMoKSk7XG4gICAgfSBcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvblVzZXJDaGFuZ2VkKCkgOiBQcm9taXNlPHZvaWQ+XG4gIHtcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJvblVzZXJDaGFuZ2VkXCIsIFwidXNlclwiLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSwgdGhpcy5wcm9maWxlRGV0YWlscygpKTsgXG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnVzZXIoKSkge1xuICAgICAgLy9Mb2FkIGFwcGxpY2F0aW9uIGRldGFpbHMgKHJlbGF0ZWQgdG8gbG9nZ2VkIGluIG9yZ2FuaXphdGlvbiB1c2VyKVxuICAgICAgbGV0IGFwcFJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25EZXRhaWxzKCk7XG4gICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpXG4gICAgICAgIGNvbnNvbGUubG9nKFwib25Vc2VyQ2hhbmdlZFwiLCBcImFwcFJlc3VsdFwiLGFwcFJlc3VsdCk7XG5cbiAgICAgIC8vTG9hZCBQcm9maWxlIERldGFpbHMgKFRoZSBhY3R1YWwgZW1wbG95ZWUpXG4gICAgICBsZXQgcHJvZmlsZURldGFpbHNSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFByb2ZpbGVEZXRhaWxzKCk7XG4gICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgICBjb25zb2xlLmxvZyhcIm9uVXNlckNoYW5nZWRcIiwgXCJnZXRQcm9maWxlRGV0YWlscyByZXN1bHRcIixwcm9maWxlRGV0YWlsc1Jlc3VsdCk7IFxuICAgICAgICBjb25zb2xlLmxvZyhcIm9uVXNlckNoYW5nZWRcIiwgXCJnZXRQcm9maWxlRGV0YWlsc1wiLCB0aGlzLnByb2ZpbGVEZXRhaWxzKCkpO1xuICAgICAgfSBcbiAgICAgIFxuICAgICAgLy9Mb2FkIGNvdW50cmllcyAoaWYgbm90IGxvYWRlZClcbiAgICAgIGlmKCF0aGlzLmNvdW50cmllcygpKXtcbiAgICAgICAgbGV0IGNvdW50cmllc1Jlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0Q291bnRyaWVzKCk7XG4gICAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJvblVzZXJDaGFuZ2VkXCIsIFwiZ2V0Q291bnRyaWVzIHJlc3VsdFwiLGNvdW50cmllc1Jlc3VsdCk7IFxuICAgICAgICAgIGNvbnNvbGUubG9nKFwib25Vc2VyQ2hhbmdlZFwiLCBcImdldENvdW50cmllc1wiLCB0aGlzLmNvdW50cmllcygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubW9iaVVzZXJQcm9maWxlLnNldCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5wcm9maWxlRGV0YWlscy5zZXQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNldCh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRoaXMuVXNlckNoYW5nZWQuZW1pdCh7dXNlcjogdGhpcy51c2VyKCksIHByb2ZpbGU6IHRoaXMubW9iaVVzZXJQcm9maWxlKCksIHByb2ZpbGVEZXRhaWxzOiB0aGlzLnByb2ZpbGVEZXRhaWxzKCl9KTtcbiAgfVxuXG5cbiAgYXN5bmMgZ2V0QXBwbGljYXRpb25EZXRhaWxzKHJlcXVlc3RUaW1lb3V0Om51bWJlcj0zMDAwMCk6IFByb21pc2U8QXBwbGljYXRpb25EZXRhaWxzIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJBcHBsaWNhdGlvbkRldGFpbHMgaXMgbnVsbCwgdXNlciBub3QgYXV0aGVudGljYXRlZFwiKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNldCh1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpICYmICF0aGlzLmhhc01hc3Rlck9yZ2FuaXphdGlvbigpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJBcHBsaWNhdGlvbkRldGFpbHMgaXMgbnVsbCwgTWFzdGVyT3JnYW5pemF0aW9uIGlzIG5vdCBzZWxlY3RlZFwiKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25EZXRhaWxzLnNldCh1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRBcGlCYXNlVXJsKCl9QXBwbGljYXRpb25EZXRhaWxzYDtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKClcbiAgICAgICAgLnNldCgna2V5JywgdGhpcy5jb25maWdTZXJ2aWNlLmFwcF9uYW1lKVxuICAgICAgICAuc2V0KCdlbnYnLCB0aGlzLmNvbmZpZ1NlcnZpY2UuZW52aXJvbm1lbnQpO1xuICAgICAgXG4gICAgICBjb25zdCBhcHBEZXRhaWxzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8QXBwbGljYXRpb25EZXRhaWxzPih1cmwsIHsgcGFyYW1zIH0pLnBpcGUoXG4gICAgICAgICAgdGltZW91dChyZXF1ZXN0VGltZW91dCkscmV0cnkoe1xuICAgICAgICAgICAgY291bnQ6IDIsXG4gICAgICAgICAgICBkZWxheTogMTAwMCxcbiAgICAgICAgICAgIHJlc2V0T25TdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5hcHBsaWNhdGlvbkRldGFpbHMuc2V0KGFwcERldGFpbHMpO1xuICAgICAgcmV0dXJuIGFwcERldGFpbHM7XG4gICAgICBcbiAgICB9IFxuICAgIGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiZ2V0QXBwbGljYXRpb25EZXRhaWxzIGVycm9yOlwiLCBlcnJvcik7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uRGV0YWlscy5zZXQodW5kZWZpbmVkKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvdW50cmllcygpOiBQcm9taXNlPE1hcDxzdHJpbmcsIENvdW50cnk+PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5jb25maWdTZXJ2aWNlLmdldE1vYmlNYW5hZ2VtZW50RGF0YVVybCgpfUNvdW50cnlgO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQ6SU9EYXRhUmVzdWx0PENvdW50cnk+ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8SU9EYXRhUmVzdWx0PENvdW50cnk+Pih1cmwsIHtcbiAgICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICAgICckZmlsdGVyJzogJ2VuYWJsZWQgZXEgdHJ1ZScsXG4gICAgICAgICAgICAnJG9yZGVyYnknOiAnTmFtZScsXG4gICAgICAgICAgICAnJHNlbGVjdCc6ICdjb2RlMixOYW1lLExvY2FsTmFtZSxUcmFkZUFyZWEsU2hpcHBpbmdfUmVxdWlyZV9TdGF0ZSdcbiAgICAgICAgICB9XG4gICAgICAgIH0pLnBpcGUodGltZW91dCgxNTAwMCkscmV0cnkoe1xuICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgIGRlbGF5OiAxMDAwLFxuICAgICAgICAgIHJlc2V0T25TdWNjZXNzOiB0cnVlXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgY29uc3QgY291bnRyaWVzX21hcCA9IG5ldyBNYXAocmVzdWx0LnZhbHVlLm1hcCgoY291bnRyeTpDb3VudHJ5KSA9PiBbY291bnRyeS5Db2RlMiA/PyAnJywgY291bnRyeV0pKTtcbiAgICAgIFxuICAgICAgdGhpcy5jb3VudHJpZXMuc2V0KGNvdW50cmllc19tYXApO1xuICAgICAgXG4gICAgICByZXR1cm4gY291bnRyaWVzX21hcDtcbiAgICAgIFxuICAgIH0gXG4gICAgY2F0Y2ggKGVycm9yOmFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAvLyByZXR1cm4gbmV3IE1hcDxzdHJpbmcsIENvdW50cnk+KCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiBcbiAgYXN5bmMgZ2V0UHJvZmlsZURldGFpbHMocmVxdWVzdFRpbWVvdXQ6bnVtYmVyPTMwMDAwKTogUHJvbWlzZTxQcm9maWxlRGV0YWlscyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSB8fCAhdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8udXNlcl9pZCkge1xuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgbGV0IHByb2ZpbGUgPSB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImdldFByb2ZpbGVEZXRhaWxzXCIsIFwibm8gdXNlclwiLHByb2ZpbGUpOyBcbiAgICAgIH0gICAgICBcbiAgICAgIHRoaXMucHJvZmlsZURldGFpbHMuc2V0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICBsZXQgdXJsOnN0cmluZ3x1bmRlZmluZWQ7XG4gICAgbGV0IG9yZ2lkX292ZXJyaWRlOnN0cmluZ3x1bmRlZmluZWQ7XG4gICAgaWYodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNFbXBsb3llZVVzZXIpeyAgICAgICAgXG4gICAgICBpZih0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0VtcGxveWVlTWFzdGVyVXNlcil7XG4gICAgICAgIGxldCB1c2VyX29yZ19pZCA9IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LnVzZXJfcGFydHlpZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYodXNlcl9vcmdfaWQgIT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICBvcmdpZF9vdmVycmlkZSA9IHVzZXJfb3JnX2lkO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcm9maWxlRGV0YWlsc1wiLCBcImlzRW1wbG95ZWVNYXN0ZXJVc2VyXCIsIHVzZXJfb3JnX2lkLCBvcmdpZF9vdmVycmlkZSk7IFxuICAgICAgICB9ICBcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpc0VtcGxveWVlTWFzdGVyVXNlclwiLCBhcHBfb3JnSWQsIHVzZXJfb3JnX2lkLCBvcmdpZF9vdmVycmlkZSk7XG4gICAgICB9XG4gICAgICB1cmwgPSBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0TW9iaU1hbmFnZW1lbnREYXRhVXJsKCl9ZW1wbG95ZWUoJHt0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy51c2VyX2lkfSk/JGV4cGFuZD1JbWFnZSgkc2VsZWN0PVN0b3JhZ2VBY2NvdW50TmFtZSxCbG9iQ29udGFpbmVyTmFtZSxCbG9iTmFtZSlgO1xuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzQ3VzdG9tZXJVc2VyKXtcbiAgICAgIHVybCA9IGAke3RoaXMuY29uZmlnU2VydmljZS5nZXRNb2JpTWFuYWdlbWVudERhdGFVcmwoKX1jdXN0b21lcnVzZXIoJHt0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy51c2VyX2lkfSk/JGV4cGFuZD1JbWFnZSgkc2VsZWN0PVN0b3JhZ2VBY2NvdW50TmFtZSxCbG9iQ29udGFpbmVyTmFtZSxCbG9iTmFtZSlgO1xuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzVmVuZG9yVXNlcil7XG4gICAgICB1cmwgPSBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0TW9iaU1hbmFnZW1lbnREYXRhVXJsKCl9dmVuZG9ydXNlcigke3RoaXMubW9iaVVzZXJQcm9maWxlKCk/LnVzZXJfaWR9KT8kZXhwYW5kPUltYWdlKCRzZWxlY3Q9U3RvcmFnZUFjY291bnROYW1lLEJsb2JDb250YWluZXJOYW1lLEJsb2JOYW1lKWA7XG4gICAgfVxuICAgIGlmICghdXJsKSB7XG4gICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgICBsZXQgcHJvZmlsZSA9IHRoaXMubW9iaVVzZXJQcm9maWxlKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJvZmlsZURldGFpbHNcIiwgXCJubyB1cmxcIiwgcHJvZmlsZSk7IFxuICAgICAgfSBcbiAgICAgIHRoaXMucHJvZmlsZURldGFpbHMuc2V0KHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gY29uc29sZS5sb2codXJsKTtcbiAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gICAgICBpZihvcmdpZF9vdmVycmlkZSl7XG4gICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChcIk9yZ2FuaXphdGlvbklkXCIsIG9yZ2lkX292ZXJyaWRlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcm9maWxlRGV0YWlsc1wiLCBcInVybFwiLCB1cmwpOyBcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcm9maWxlRGV0YWlsc1wiLCBcImhlYWRlcnNcIiwgaGVhZGVycyk7IFxuICAgICAgfSBcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5nZXQ8SU9EYXRhUmVzdWx0PGFueT4+KHVybCwgeyBoZWFkZXJzOiBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICAgICAgdGltZW91dChyZXF1ZXN0VGltZW91dClcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcm9maWxlRGV0YWlsc1wiLCBcInJlc3VsdFwiLCByZXN1bHQpOyBcbiAgICAgIH0gXG4gICAgICBcbiAgICAgIGlmICghcmVzdWx0LnZhbHVlIHx8ICFyZXN1bHQudmFsdWVbMF0pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IF91c2VyID0gcmVzdWx0LnZhbHVlWzBdO1xuICAgICAgY29uc3QgX3Byb2ZpbGVEZXRhaWxzID0gIE9iamVjdC5hc3NpZ24obmV3IFByb2ZpbGVEZXRhaWxzKCksIHtcbiAgICAgICAgSWQ6IF91c2VyLklkPy50b1N0cmluZygpLFxuICAgICAgICBOYW1lOiBfdXNlci5OYW1lLFxuICAgICAgICBJbWFnZTogX3VzZXIuSW1hZ2UsXG4gICAgICAgIFVzZXI6IF91c2VyXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5wcm9maWxlRGV0YWlscy5zZXQoX3Byb2ZpbGVEZXRhaWxzKTtcblxuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcm9maWxlRGV0YWlsc1wiLCBcInByb2ZpbGVEZXRhaWxzXCIsIF9wcm9maWxlRGV0YWlscyk7IFxuICAgICAgfSBcblxuICAgICAgcmV0dXJuIF9wcm9maWxlRGV0YWlscztcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJnZXRQcm9maWxlRGV0YWlscyBlcnJvcjpcIiwgZXJyb3IpO1xuICAgICAgdGhpcy5wcm9maWxlRGV0YWlscy5zZXQodW5kZWZpbmVkKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9ICBcblxuXG4gIC8vIC0tLSBTaWduSW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbihyZWRpcmVjdFVybDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJzaWduSW5cIiwgcmVkaXJlY3RVcmwpOyAgXG4gICAgfVxuICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLm1hbmFnZXI/LnNpZ25pblJlZGlyZWN0KHsgZGF0YTogeyByZWRpcmVjdFVybDogcmVkaXJlY3RVcmwgfSB9KS5jYXRjaCggKHJlYXNvbjogYW55KSA9PlxuICAgIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzaWduSW4gZmFpbGVkOlwiLCByZWFzb24sIHRoaXMudXNlcigpLCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpKTtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IocmVhc29uKTtcbiAgICB9KTtcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJzaWduSW5cIiwgXCJyZXN1bHRcIiwgcmVzdWx0LCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7ICBcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb21wbGV0ZVNpZ25JbigpOiBQcm9taXNlPFVzZXJ8bnVsbD4geyAgICBcbiAgICBsZXQgX3VzZXIgPSBhd2FpdCB0aGlzLm1hbmFnZXI/LnNpZ25pblJlZGlyZWN0Q2FsbGJhY2soKSA/PyBudWxsO1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcImNvbXBsZXRlU2lnbkluXCIsIF91c2VyLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7ICBcbiAgICB9XG4gICAgcmV0dXJuIF91c2VyO1xuICB9XG5cbiAgLy8gLS0tIFNpbGVudCBTaWduSW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluU2lsZW50KCk6IFByb21pc2U8YW55PiB7ICBcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJzaWduSW5TaWxlbnRcIik7ICBcbiAgICB9ICBcbiAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWduaW5TaWxlbnQoKS50aGVuKChfdXNlcjpVc2VyKSA9PlxuICAgICAge1xuICAgICAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwic2lnbkluU2lsZW50XCIsIFwicmVzdWx0XCIsIF91c2VyLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7ICBcbiAgICAgICAgfSAgXG4gICAgICAgIHRoaXMub25TaWduZWRJblNpbGVudChfdXNlcik7XG4gICAgICB9KS5jYXRjaCggKHJlYXNvbjogYW55KSA9PlxuICAgICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwic2lnbkluU2lsZW50IGZhaWxlZDpcIiwgcmVhc29uLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3IocmVhc29uKTtcbiAgICAgIH0pO1xuXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2lnbkluU2lsZW50XCIsIFwicmVzdWx0XCIsIHJlc3VsdCwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgb25TaWduZWRJblNpbGVudChfdXNlcjogVXNlcil7XG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwib25TaWduZWRJblNpbGVudFwiLCBfdXNlciwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfSAgXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTaWxlbnRTaWduSW4oKSAgOiBQcm9taXNlPGFueT57ICBcbiAgICBpZih0aGlzLmNvbmZpZ1NlcnZpY2Uub2lkY19sb2cpe1xuICAgICAgY29uc29sZS5sb2coXCJjb21wbGV0ZVNpbGVudFNpZ25JblwiLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7ICBcbiAgICB9ICAgICAgIFxuICAgIGxldCByZXN1bHQgPSAgYXdhaXQgdGhpcy5tYW5hZ2VyPy5zaWduaW5TaWxlbnRDYWxsYmFjaygpO1xuXG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2lnbkluU2lsZW50XCIsIFwicmVzdWx0XCIsIHJlc3VsdCwgdGhpcy51c2VyKCksIHRoaXMubW9iaVVzZXJQcm9maWxlKCkpOyAgXG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyAtLS0gU2lnbk91dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIHB1YmxpYyBhc3luYyBzaWdub3V0KCk6IFByb21pc2U8YW55PiB7XG4gICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKXtcbiAgICAgIGNvbnNvbGUubG9nKFwic2lnbm91dFwiLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7ICBcbiAgICB9ICAgXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubWFuYWdlcj8uc2lnbm91dFJlZGlyZWN0KCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29tcGxldGVTaWdub3V0KCkge1xuICAgIGlmKHRoaXMuY29uZmlnU2VydmljZS5vaWRjX2xvZyl7XG4gICAgICBjb25zb2xlLmxvZyhcImNvbXBsZXRlU2lnbm91dFwiLCB0aGlzLnVzZXIoKSwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSk7ICBcbiAgICB9XG4gIH1cblxuICBlbmFibGVPaWRjTG9nRXZlbnRzKCl7XG4gICAgaWYodGhpcy5tYW5hZ2VyKXtcbiAgICAgIC8vIHRoaXMubWFuYWdlci5ldmVudHMuYWRkVXNlckxvYWRlZCgoX3VzZXI6VXNlcikgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmxvZygnVXNlciBsb2FkZWQ6JywgX3VzZXIpO1xuICAgICAgLy8gfSk7XG5cbiAgICAgIC8vIHRoaXMubWFuYWdlci5ldmVudHMuYWRkVXNlclVubG9hZGVkKCgpID0+IHtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJ1VzZXIgdW5sb2FkZWQnKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFVzZXJTaWduZWRJbigoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdVc2VyIHNpZ25lZCBpbi4uLicpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkQWNjZXNzVG9rZW5FeHBpcmluZygoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBY2Nlc3MgdG9rZW4gZXhwaXJpbmcuLi4nKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJlZCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBY2Nlc3MgdG9rZW4gZXhwaXJlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubWFuYWdlci5ldmVudHMuYWRkU2lsZW50UmVuZXdFcnJvcigoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NpbGVudCByZW5ldyBlcnJvcjonLCBlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5hZGRVc2VyU2lnbmVkT3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1VzZXIgc2lnbmVkIG91dCBmcm9tIGlkZW50aXR5IHNlcnZlcicpO1xuICAgICAgICBjb25zb2xlLnRyYWNlKCdVc2VyIHNpZ25lZCBvdXQgc3RhY2sgdHJhY2UnKTtcbiAgICAgICAgLy8gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHRvIGNoZWNrIC0gaWYgdGhpcyBpcyBmaXJpbmcsXG4gICAgICAgIC8vIGl0IGNvdWxkIHRyaWdnZXIgYXBwIHJlbG9hZHNcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLnJlbW92ZVVzZXJTaWduZWRPdXQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncmVtb3ZlVXNlclNpZ25lZE91dCBjYWxsZWQnKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1hbmFnZXIuZXZlbnRzLmFkZFVzZXJTZXNzaW9uQ2hhbmdlZCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRVc2VyU2Vzc2lvbkNoYW5nZWQgY2FsbGVkJyk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tYW5hZ2VyLmV2ZW50cy5yZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygncmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkIGNhbGxlZCcpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIEhlbHBlciBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51c2VyKCkgIT0gbnVsbCAmJiAhdGhpcy51c2VyKCk/LmV4cGlyZWQ7XG4gIH1cblxuICBwdWJsaWMgaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzRW1wbG95ZWVVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3Rlck9yZ2FuaXphdGlvbkF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzRW1wbG95ZWVVc2VyKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNPcmdhbml6YXRpb25Vc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25BZG1pbik7XG4gIH1cblxuICBwdWJsaWMgaXNNYXN0ZXJPcmdhbml6YXRpb25Vc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25Vc2VyIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uQWRtaW4pKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3Rlck9yZ2FuaXphdGlvbkFkbWluQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25BZG1pbikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9XG5cbiAgcHVibGljIGlzRW1wbG95ZWVBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzT3JnYW5pemF0aW9uVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvbkFkbWluIHx8IHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzRW1wbG95ZWVVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VtcGxveWVlTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmIHRoaXMubW9iaVVzZXJQcm9maWxlKCkgIT0gbnVsbCAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNFbXBsb3llZU1hc3RlclVzZXIpO1xuICB9XG5cbiAgcHVibGljIGlzTWFzdGVyRW1wbG95ZWVBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc09yZ2FuaXphdGlvblVzZXIgfHwgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uaXNPcmdhbml6YXRpb25BZG1pbiB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc0VtcGxveWVlVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9ICBcblxuICBwdWJsaWMgaXNDdXN0b21lclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzQ3VzdG9tZXJVc2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckN1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzQ3VzdG9tZXJVc2VyKSkgfHwgdGhpcy5pc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc1ZlbmRvclVzZXIpO1xuICB9XG5cbiAgcHVibGljIGlzTWFzdGVyVmVuZG9yVXNlckF1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbnx1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzVmVuZG9yVXNlcikpIHx8IHRoaXMuaXNNYXN0ZXJVc2VyQXV0aGVudGljYXRlZCgpO1xuICB9ICBcblxuICBwdWJsaWMgaXNCMkJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiAodGhpcy5pc09yZ2FuaXphdGlvbkF1dGhlbnRpY2F0ZWQoKSB8fCB0aGlzLmlzQ3VzdG9tZXJVc2VyQXV0aGVudGljYXRlZCgpfHwgdGhpcy5pc1ZlbmRvclVzZXJBdXRoZW50aWNhdGVkKCkpO1xuICB9XG5cbiAgcHVibGljIGlzTWFzdGVyQjJCQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgKHRoaXMuaXNPcmdhbml6YXRpb25BdXRoZW50aWNhdGVkKCkgfHwgdGhpcy5pc0N1c3RvbWVyVXNlckF1dGhlbnRpY2F0ZWQoKXx8IHRoaXMuaXNWZW5kb3JVc2VyQXV0aGVudGljYXRlZCgpKSB8fCB0aGlzLmlzTWFzdGVyVXNlckF1dGhlbnRpY2F0ZWQoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlclVzZXJBdXRoZW50aWNhdGVkKCk6IGJvb2xlYW58dW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgKHRoaXMubW9iaVVzZXJQcm9maWxlKCk/LmlzTWFzdGVyVXNlciB8fCB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc01hc3RlckFkbWluKTtcbiAgfVxuXG4gIHB1YmxpYyBpc01hc3RlckFkbWluQXV0aGVudGljYXRlZCgpOiBib29sZWFufHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNBdXRoZW50aWNhdGVkKCkgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKSAhPSBudWxsICYmICh0aGlzLm1vYmlVc2VyUHJvZmlsZSgpPy5pc01hc3RlckFkbWluKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWN1cml0eVJvbGUoKTogRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlfHVuZGVmaW5lZCB7XG4gICAgaWYodGhpcy5pc0F1dGhlbnRpY2F0ZWQoKSAmJiB0aGlzLm1vYmlVc2VyUHJvZmlsZSgpICE9IG51bGwgJiYgdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uc2VjdXJpdHlSb2xlKXtcbiAgICAgIHJldHVybiBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGVbdGhpcy5tb2JpVXNlclByb2ZpbGUoKT8uc2VjdXJpdHlSb2xlIGFzIGtleW9mIHR5cGVvZiBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGVdO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGhhc01hc3Rlck9yZ2FuaXphdGlvbigpOiBib29sZWFuIHtcbiAgICB2YXIgc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgIGlmKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkICYmIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3Rlck9yZ2FuaXphdGlvbigpOiBzdHJpbmd8bnVsbCB7XG4gICAgdmFyIHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQ7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0TWFzdGVyT3JnYW5pemF0aW9uKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkOiBzdHJpbmd8bnVsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmKHN0ck1hc3Rlck9yZ2FuaXphdGlvbklkKXtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIiwgc3RyTWFzdGVyT3JnYW5pemF0aW9uSWQpO1xuICAgICAgbGV0IGFwcGRldGFpbHMgPSBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uRGV0YWlscygpO1xuICAgICAgaWYodGhpcy5jb25maWdTZXJ2aWNlLm9pZGNfbG9nKVxuICAgICAgICBjb25zb2xlLmxvZyhcInNldE1hc3Rlck9yZ2FuaXphdGlvblwiLCBcImFwcFJlc3VsdFwiLCBhcHBkZXRhaWxzKTsgICAgXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnJlbW92ZU1hc3Rlck9yZ2FuaXphdGlvbigpO1xuICAgICAgLy8gcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4geyAgcmVzb2x2ZSh1bmRlZmluZWQpOyB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlTWFzdGVyT3JnYW5pemF0aW9uKCk6IHZvaWQge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiTWFzdGVyT3JnYW5pemF0aW9uSWRcIik7XG4gIH1cblxuICBwdWJsaWMgaGFzTWFzdGVyQ3VzdG9tZXIoKTogYm9vbGVhbiB7XG4gICAgdmFyIHN0ck1hc3RlckN1c3RvbWVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlckN1c3RvbWVySWRcIik7XG4gICAgaWYoc3RyTWFzdGVyQ3VzdG9tZXJJZCAmJiBzdHJNYXN0ZXJDdXN0b21lcklkLmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldE1hc3RlckN1c3RvbWVyKCk6IHN0cmluZ3xudWxsIHtcbiAgICB2YXIgc3RyTWFzdGVyQ3VzdG9tZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiTWFzdGVyQ3VzdG9tZXJJZFwiKTtcbiAgICByZXR1cm4gc3RyTWFzdGVyQ3VzdG9tZXJJZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXN0ZXJDdXN0b21lcihzdHJNYXN0ZXJDdXN0b21lcklkOiBzdHJpbmd8bnVsbCk6IHZvaWQge1xuICAgIGlmKHN0ck1hc3RlckN1c3RvbWVySWQpe1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIsIHN0ck1hc3RlckN1c3RvbWVySWQpOyBcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVtb3ZlTWFzdGVyQ3VzdG9tZXIoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlTWFzdGVyQ3VzdG9tZXIoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIpO1xuICB9ICBcblxuICBwdWJsaWMgaGFzTWFzdGVyVmVuZG9yKCk6IGJvb2xlYW4ge1xuICAgIHZhciBzdHJNYXN0ZXJWZW5kb3JJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiTWFzdGVyVmVuZG9ySWRcIik7XG4gICAgaWYoc3RyTWFzdGVyVmVuZG9ySWQgJiYgc3RyTWFzdGVyVmVuZG9ySWQubGVuZ3RoID4gMCl7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TWFzdGVyVmVuZG9yKCk6IHN0cmluZ3xudWxsIHtcbiAgICB2YXIgc3RyTWFzdGVyVmVuZG9ySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlclZlbmRvcklkXCIpO1xuICAgIHJldHVybiBzdHJNYXN0ZXJWZW5kb3JJZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXN0ZXJWZW5kb3Ioc3RyTWFzdGVyVmVuZG9ySWQ6IHN0cmluZ3xudWxsKTogdm9pZCB7XG4gICAgaWYoc3RyTWFzdGVyVmVuZG9ySWQpe1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiLCBzdHJNYXN0ZXJWZW5kb3JJZCk7ICAgXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnJlbW92ZU1hc3RlclZlbmRvcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVNYXN0ZXJWZW5kb3IoKTogdm9pZCB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgfSAgXG5cbiAgcHVibGljIHJlZGlyZWN0VXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlcigpPy5zdGF0ZT8ucmVkaXJlY3RVcmw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjY2Vzc1Rva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlcigpPy5hY2Nlc3NfdG9rZW4gPz8gJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF1dGhvcml6YXRpb25IZWFkZXIoKTogc3RyaW5nfHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMudXNlcigpPy50b2tlbl90eXBlPy5jb25jYXQoXCIgXCIsICh0aGlzLnVzZXIoKT8uYWNjZXNzX3Rva2VuID8/ICcnKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRva2VuRXhwaXJlc0F0KCk6IERhdGV8dW5kZWZpbmVkIHtcbiAgICBpZih0aGlzLnVzZXIoKSl7XG4gICAgICBsZXQgZXhwaXJlc19hdCA9IHRoaXMudXNlcigpPy5leHBpcmVzX2F0O1xuICAgICAgaWYoZXhwaXJlc19hdClcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGV4cGlyZXNfYXQgKiAxMDAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG9rZW5WYWxpZFVudGlsKCk6IERhdGV8dW5kZWZpbmVkIHtcbiAgICBpZih0aGlzLnVzZXIoKSl7XG4gICAgICBsZXQgZXhwaXJlc19hdCA9IHRoaXMudXNlcigpPy5leHBpcmVzX2F0O1xuICAgICAgaWYoZXhwaXJlc19hdClcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKChleHBpcmVzX2F0IC0xMjApICogMTAwMCk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzVG9rZW5FeHBpcmVkKCk6IGJvb2xlYW4ge1xuICAgIGlmKHRoaXMudXNlcigpKXtcbiAgICAgIGxldCBleHBpcmVzX2luID0gdGhpcy51c2VyKCk/LmV4cGlyZXNfaW47XG4gICAgICBpZihleHBpcmVzX2luKVxuICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAxMjA7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKGVycm9yOmFueSkge1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICBpZiAoZXJyb3IgJiYgZXJyb3IuZXJyb3IgJiYgZXJyb3IuZXJyb3IuZXJyb3Ipe1xuICAgICAgLy9HZXQgSnNvbiBlcnJvclxuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IuZXJyb3I7XG4gICAgfVxuICAgIGVsc2UgaWYoZXJyb3IgJiYgZXJyb3IuZXJyb3IgaW5zdGFuY2VvZiBFcnJvckV2ZW50KSB7XG4gICAgICAvLyBHZXQgY2xpZW50LXNpZGUgZXJyb3JcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcbiAgICB9IFxuICAgIGVsc2Uge1xuICAgICAgLy8gR2V0IHNlcnZlci1zaWRlIGVycm9yXG4gICAgICBlcnJvck1lc3NhZ2UgPSBgRXJyb3IgQ29kZTogJHtlcnJvci5zdGF0dXN9XFxuTWVzc2FnZTogJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgfVxuICAgIC8vIHdpbmRvdy5hbGVydChlcnJvck1lc3NhZ2UpO1xuICAgIGxldCBhbnlSZW1vdmVkOmJvb2xlYW4gPSBldmFsdWF0ZUZvck1hc3Rlck9yZ2FuaXphdGlvbkNsZWFyYW5jZShlcnJvck1lc3NhZ2UpO1xuICAgIGlmKGFueVJlbW92ZWQpe1xuICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgfVxuXG4gIC8vLS0gUGVybWlzc2lvbnNcbiAgU2VjdXJpdHlSb2xlUHJpb3JpdHlNYXA6IFJlY29yZDxFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUsIG51bWJlcj4gPSB7XG4gICAgW0VtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5Ob25lXTogMCxcbiAgICBbRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlLlN1cGVyVXNlcl06IDEsXG4gICAgW0VtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5BY2NvdW50YW50XTogMixcbiAgICBbRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlLkFkbWluXTogM1xuICB9O1xuXG4gIHJlcXVpcmVFbXBsb3llZVBlcm1pc3Npb24obW9iaVVzZXJQcm9maWxlOk1vYmlVc2VyUHJvZmlsZSwgY2FsbGJhY2s6ICgodmFsaWQ6Ym9vbGVhbikgPT4gdm9pZCl8dW5kZWZpbmVkID0gdW5kZWZpbmVkLCBzZWN1cml0eVJvbGU6RW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlID0gRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlLk5vbmUpIDogYm9vbGVhbntcbiAgICBsZXQgdmFsaWQgPSAobW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uVXNlciB8fCBcbiAgICAgICAgICAgICAgICAgIG1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvbkFkbWluIHx8XG4gICAgICAgICAgICAgICAgICAobW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyVXNlciB8fCBtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJBZG1pbikpO1xuICAgIGlmKCF2YWxpZCl7XG4gICAgICB2YWxpZCA9IG1vYmlVc2VyUHJvZmlsZS5pc0VtcGxveWVlVXNlciA/PyBmYWxzZTtcbiAgICAgIGlmKHZhbGlkKXtcbiAgICAgICAgbGV0IGVtcGxTZWN1cml0eVJvbGUgPSBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGUuTm9uZTtcbiAgICAgICAgaWYobW9iaVVzZXJQcm9maWxlLnNlY3VyaXR5Um9sZSl7XG4gICAgICAgICAgZW1wbFNlY3VyaXR5Um9sZSA9IEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZVttb2JpVXNlclByb2ZpbGUuc2VjdXJpdHlSb2xlIGFzIGtleW9mIHR5cGVvZiBFbXBsb3llZVNlY3VyaXR5Um9sZVR5cGVdO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkID0gdGhpcy5TZWN1cml0eVJvbGVQcmlvcml0eU1hcFtlbXBsU2VjdXJpdHlSb2xlXSA+PSB0aGlzLlNlY3VyaXR5Um9sZVByaW9yaXR5TWFwW3NlY3VyaXR5Um9sZV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmKGNhbGxiYWNrKXtcbiAgICAgIGNhbGxiYWNrKHZhbGlkID8/IGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkID8/IGZhbHNlO1xuICB9XG5cbiAgcmVxdWlyZU9yZ2FuaXphdGlvblVzZXIobW9iaVVzZXJQcm9maWxlOk1vYmlVc2VyUHJvZmlsZSwgY2FsbGJhY2s6ICgodmFsaWQ6Ym9vbGVhbikgPT4gdm9pZCl8dW5kZWZpbmVkID0gdW5kZWZpbmVkKSA6IGJvb2xlYW57XG4gICAgbGV0IHZhbGlkID0gKG1vYmlVc2VyUHJvZmlsZS5pc09yZ2FuaXphdGlvblVzZXIgfHwgXG4gICAgICAgICAgICAgICAgICBtb2JpVXNlclByb2ZpbGUuaXNPcmdhbml6YXRpb25BZG1pbiB8fFxuICAgICAgICAgICAgICAgICAgKG1vYmlVc2VyUHJvZmlsZS5pc01hc3RlclVzZXIgfHwgbW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyQWRtaW4pKTtcbiAgICBpZihjYWxsYmFjayl7XG4gICAgICBjYWxsYmFjayh2YWxpZCA/PyBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZCA/PyBmYWxzZTtcbiAgfVxuXG4gIHJlcXVpcmVPcmdhbml6YXRpb25BZG1pbihtb2JpVXNlclByb2ZpbGU6TW9iaVVzZXJQcm9maWxlLCBjYWxsYmFjazogKCh2YWxpZDpib29sZWFuKSA9PiB2b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQpIDogYm9vbGVhbntcbiAgICBsZXQgdmFsaWQgPSAobW9iaVVzZXJQcm9maWxlLmlzT3JnYW5pemF0aW9uQWRtaW4gfHxcbiAgICAgICAgICAgICAgICAgIChtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJVc2VyIHx8IG1vYmlVc2VyUHJvZmlsZS5pc01hc3RlckFkbWluKSk7XG4gICAgaWYoY2FsbGJhY2spe1xuICAgICAgY2FsbGJhY2sodmFsaWQgPz8gZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWQgPz8gZmFsc2U7XG4gIH1cblxuICByZXF1aXJlTWFzdGVyUGVybWlzc2lvbihtb2JpVXNlclByb2ZpbGU6TW9iaVVzZXJQcm9maWxlLCBjYWxsYmFjazogKCh2YWxpZDpib29sZWFuKSA9PiB2b2lkKXx1bmRlZmluZWQgPSB1bmRlZmluZWQpIDogYm9vbGVhbntcbiAgICBsZXQgdmFsaWQgPSAobW9iaVVzZXJQcm9maWxlLmlzTWFzdGVyVXNlciB8fCBtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJBZG1pbik7XG4gICAgaWYoY2FsbGJhY2spe1xuICAgICAgY2FsbGJhY2sodmFsaWQgPz8gZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWQgPz8gZmFsc2U7XG4gIH1cblxuICByZXF1aXJlTWFzdGVyQWRtaW5QZXJtaXNzaW9uKG1vYmlVc2VyUHJvZmlsZTpNb2JpVXNlclByb2ZpbGUsIGNhbGxiYWNrOiAoKHZhbGlkOmJvb2xlYW4pID0+IHZvaWQpfHVuZGVmaW5lZCA9IHVuZGVmaW5lZCkgOiBib29sZWFue1xuICAgIGxldCB2YWxpZCA9IG1vYmlVc2VyUHJvZmlsZS5pc01hc3RlckFkbWluO1xuICAgIGlmKCF2YWxpZCl7XG4gICAgICBsZXQgaXNFbXBsb3llZU1hc3RlciA9IChtb2JpVXNlclByb2ZpbGUuaXNNYXN0ZXJVc2VyID8/IGZhbHNlKSAmJiAobW9iaVVzZXJQcm9maWxlLmlzRW1wbG95ZWVVc2VyID8/IGZhbHNlKTtcbiAgICAgIGlmKGlzRW1wbG95ZWVNYXN0ZXIpe1xuICAgICAgICBsZXQgZW1wbFNlY3VyaXR5Um9sZSA9IEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5Ob25lO1xuICAgICAgICBpZihtb2JpVXNlclByb2ZpbGUuc2VjdXJpdHlSb2xlKXtcbiAgICAgICAgICBlbXBsU2VjdXJpdHlSb2xlID0gRW1wbG95ZWVTZWN1cml0eVJvbGVUeXBlW21vYmlVc2VyUHJvZmlsZS5zZWN1cml0eVJvbGUgYXMga2V5b2YgdHlwZW9mIEVtcGxveWVlU2VjdXJpdHlSb2xlVHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgdmFsaWQgPSAodGhpcy5TZWN1cml0eVJvbGVQcmlvcml0eU1hcFtlbXBsU2VjdXJpdHlSb2xlXSA9PSB0aGlzLlNlY3VyaXR5Um9sZVByaW9yaXR5TWFwW0VtcGxveWVlU2VjdXJpdHlSb2xlVHlwZS5BZG1pbl0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZihjYWxsYmFjayl7XG4gICAgICBjYWxsYmFjayh2YWxpZCA/PyBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZCA/PyBmYWxzZTtcbiAgfSAgIFxuXG5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlRm9yTWFzdGVyT3JnYW5pemF0aW9uQ2xlYXJhbmNlKGVycm9yTWVzc2FnZTpzdHJpbmcpIDogYm9vbGVhbntcbiAgbGV0IGFueVJlbW92ZWQ6Ym9vbGVhbiA9IGZhbHNlO1xuXG4gIGlmKGVycm9yTWVzc2FnZSAmJiAoXG4gICAgZXJyb3JNZXNzYWdlLnRvU3RyaW5nKCkuaW5kZXhPZignTm8gVGVzdCBkYXRhYmFzZSBoYXMgYmVlbiBzZXR1cCcpID49IDAgfHwgXG4gICAgZXJyb3JNZXNzYWdlLnRvU3RyaW5nKCkuaW5kZXhPZignT3JnYW5pemF0aW9uIGRvZXMgbm90IGV4aXN0JykgPj0gMFxuICApKXtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkNoZWNrIGZvciBjbGVhcmFuY2Ugb2YgTWFzdGVyT3JnYW5pemF0aW9uSWRcIik7XG4gICAgXG4gICAgbGV0IG1hc3Rlck9yZ0lkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJPcmdhbml6YXRpb25JZFwiKTtcbiAgICBpZihtYXN0ZXJPcmdJZCl7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIE1hc3Rlck9yZ2FuaXphdGlvbklkOlwiLCBtYXN0ZXJPcmdJZCk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIk1hc3Rlck9yZ2FuaXphdGlvbklkXCIpO1xuICAgICAgYW55UmVtb3ZlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGN1c3RvbWVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIk1hc3RlckN1c3RvbWVySWRcIik7XG4gICAgaWYoY3VzdG9tZXJJZCl7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIE1hc3RlckN1c3RvbWVySWQ6XCIsIGN1c3RvbWVySWQpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJNYXN0ZXJDdXN0b21lcklkXCIpO1xuICAgICAgYW55UmVtb3ZlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHZlbmRvcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJNYXN0ZXJWZW5kb3JJZFwiKTtcbiAgICBpZih2ZW5kb3JJZCl7XG4gICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIE1hc3RlclZlbmRvcklkOlwiLCB2ZW5kb3JJZCk7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcIk1hc3RlclZlbmRvcklkXCIpO1xuICAgICAgYW55UmVtb3ZlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFueVJlbW92ZWQ7XG59XG4iXX0=
@@ -533,13 +533,12 @@ class MobicloudCoreService {
533
533
  let orgid_override;
534
534
  if (this.mobiUserProfile()?.isEmployeeUser) {
535
535
  if (this.mobiUserProfile()?.isEmployeeMasterUser) {
536
- let app_orgId = this.applicationDetails()?.OrganizationId?.toLowerCase();
537
536
  let user_org_id = this.mobiUserProfile()?.user_partyid?.toLowerCase();
538
- if ((user_org_id != undefined && app_orgId != undefined) && app_orgId != user_org_id) {
537
+ if (user_org_id != undefined) {
539
538
  orgid_override = user_org_id;
540
539
  }
541
540
  if (this.configService.oidc_log) {
542
- console.log("getProfileDetails", "isEmployeeMasterUser", app_orgId, user_org_id, orgid_override);
541
+ console.log("getProfileDetails", "isEmployeeMasterUser", user_org_id, orgid_override);
543
542
  }
544
543
  }
545
544
  url = `${this.configService.getMobiManagementDataUrl()}employee(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;
@@ -1 +1 @@
1
- {"version":3,"file":"mobicloud-core.mjs","sources":["../../src/lib/mobicloud-core.component.ts","../../src/lib/types/mobi-user-profile.ts","../../src/lib/types/application-details.ts","../../src/lib/services/mobicloud-config.service.ts","../../src/lib/services/mobicloud-core.service.ts","../../src/lib/token-http-interceptor.ts","../../src/lib/validators/username-validator.ts","../../src/lib/mobicloud-core.module.ts","../../src/lib/guards/mobi-authentication.guard.ts","../../src/lib/guards/mobi-organization.guard.ts","../../src/lib/guards/mobi-b2b.guard.ts","../../src/lib/utils.ts","../../src/lib/types/language-info.ts","../../src/lib/types/theme-info.ts","../../src/lib/types/country.ts","../../src/lib/types/organization-info.ts","../../src/lib/types/ui-types.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-mobicloud-core',\n template: `\n <p>\n mobicloud-core works!\n </p>\n `,\n styles: [\n ]\n})\nexport class MobicloudCoreComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { WritableSignal, effect } from '@angular/core';\nimport { User } from 'oidc-client';\nimport { Observable } from 'rxjs';\n\nexport class MobiUserProfile {\n user: User|null = null;\n \n // constructor(oidc_User: Observable<User | undefined>) {\n // oidc_User.subscribe(u => this.user = u); \n // }\n\n constructor(user: User|null) {\n this.user = user;\n }\n\n // constructor(user: WritableSignal<User|null>) {\n // effect(() => {\n // this.user = user();\n // });\n // }\n \n get idToken() : string | undefined{\n return this.user?.id_token;\n }\n \n get refreshToken() : string | undefined{\n return this.user?.refresh_token;\n }\n \n get accessToken() : string | undefined{\n return this.user?.access_token;\n }\n \n get tokenType() : string | undefined{\n return this.user?.token_type;\n }\n \n get tokenScope() : string | undefined{\n return this.user?.scope;\n }\n \n get tokenExpiresAt() : number | undefined{\n return this.user?.expires_at;\n }\n \n get tokenExpiresAt_Date(): Date | undefined {\n if(this.user)\n return new Date(this.user.expires_at * 1000);\n return undefined;\n }\n \n get tokenExpiresIn() : number | undefined{\n return this.user?.expires_in;\n }\n \n get tokenIsExpired() : boolean | undefined{\n return this.user?.expired;\n }\n \n get shouldRenewToken() : boolean{\n if(this.user)\n return this.user.expires_in <= 120;\n return false;\n }\n \n // --- Profile\n get user_id() : string | undefined{\n return this.user?.profile?.sub;\n }\n \n get user_name() : string | undefined{\n return this.user?.profile?.name;\n }\n \n get user_username() : string | undefined{\n return this.user?.profile?.username;\n }\n \n get user_email() : string | undefined{\n return this.user?.profile?.email;\n }\n \n get user_partytype() : string | undefined{\n return this.user?.profile?.partytype;\n }\n \n get user_partyid() : string | undefined{\n return this.user?.profile?.partyid;\n }\n \n get user_partyname() : string | undefined{\n return this.user?.profile?.partyname;\n }\n \n get user_accountnumber() : string | undefined{\n return this.user?.profile?.account_number;\n }\n \n get user_authtype() : string | undefined{\n return this.user?.profile?.auth_type;\n }\n \n get user_roles() : string[] | undefined {\n return this.user?.profile?.role;\n }\n \n get isOrganizationAdmin() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('ORGADMIN');\n return false;\n }\n \n get isOrganizationUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('ORGUSER');\n return false;\n }\n \n get isEmployeeUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('EMPUSER');\n return false;\n }\n\n get isEmployeeMasterUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('EMPUSER') && this.user_roles?.includes('MASTER');\n return false;\n }\n \n get employeeNumber() : string | undefined{\n return this.user?.profile?.empl_number;\n } \n\n get securityRole() : string | undefined{\n return this.user?.profile?.security_role;\n } \n \n //-- B2B -----\n\n get isCustomerUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles.includes('CUSTUSER');\n return false;\n }\n \n get user_customer_id() : string | undefined{\n return this.user?.profile?.cust_id;\n }\n\n get user_customer_accountnumber() : string | undefined{\n return this.user?.profile?.cust_account;\n }\n\n get user_customer_name() : string | undefined{\n return this.user?.profile?.cust_name;\n }\n\n get isVendorUser() : boolean{\n if(this.user_roles)\n return this.user_roles.includes('VENDUSER');\n return false;\n }\n\n get isMasterUser() : boolean{\n if(this.user_roles)\n return this.user_roles.includes('MASTER');\n return false;\n }\n\n get isMasterAdmin() : boolean{\n if(this.user_roles)\n return this.user_roles.includes('MASTERADMIN');\n return false;\n }\n\n get user_vendor_id() : string | undefined{\n return this.user?.profile?.vend_id;\n }\n\n get user_vendor_accountnumber() : string | undefined{\n return this.user?.profile?.vend_account;\n }\n\n get user_vendor_name() : string | undefined{\n return this.user?.profile?.vend_name;\n } \n\n get isB2BUser() : boolean{\n return this.isCustomerUser || this.isVendorUser;\n }\n }","export class ApplicationDetails {\n\tName!: \t\tstring;\n OrganizationId!: \t\tstring;\n\tOrganizationName!:\t\t\tstring; \n OrganizationEmail!: \t\tstring; \n OrganizationAccountNumber!: string;\n StorageAccountName!: string;\n ServicebusName!: string;\n\n HashedPasswords!: \t\tboolean | undefined;\n CertificateLogin!: \t\tboolean | undefined;\n AllowSubOrganizations!: \tboolean | undefined;\n OwnerOrganizationId: \t\tstring | undefined;\n\tOwnerOrganizationName:\t\t\tstring | undefined; \n OwnerOrganizationAccountNumber:\t\t\tstring | undefined; \n\n IsMasterOrganization!: \t\tboolean | undefined;\n\n MapProvider?: MapProvider | undefined;\n MapProviderKey?: string | undefined;\n\n WmsLocationSetting?: WmsLocationSetting | undefined;\n ServicePlanningSetting?: ServicePlanningSetting | undefined;\n WebshipperSetting?: WebshipperSetting | undefined;\n \n DefaultDashboardSlideShowSetting?: DefaultDashboardSlideShowSetting | undefined;\n\n CloudApplications?: CloudApplicationInfo[] | undefined;\n MobisolutionsCloudApplication?: CloudApplicationInfo | undefined;\n}\n\nexport enum EmployeeSecurityRoleType\n{\n None = \"None\",\n SuperUser = \"SuperUser\",\n Accountant = \"Accountant\",\n Admin = \"Admin\",\n}\n\nexport class ServicePlanningSetting {\n TaskPart_ServiceReportId?: \t string|undefined;\n TaskPart_ApproveMode?: TaskPartApproveMode|undefined;\n \n}\n\nexport class DefaultDashboardSlideShowSetting {\n StartupId?: \t string|undefined;\n StartupName?: string|undefined;\n \n}\n\nexport enum TaskPartApproveMode\n{\n None = \"None\",\n Posted = \"Posted\",\n CreateReport = \"CreateReport\",\n SendEmail = \"SendEmail\",\n CreateReportSendEmail = \"CreateReportSendEmail\",\n}\n\nexport class WmsLocationSetting {\n Pattern?: \t string|undefined;\n UpdateOnChange?: boolean|undefined;\n \n}\n\nexport class WebshipperSetting {\n PackageWeightMode?: WebshipperPackageWeightMode|undefined;\n}\n\nexport enum WebshipperPackageWeightMode\n{\n PackageFixed = \"PackageFixed\",\n ItemsWeight = \"ItemsWeight\"\n}\n\nexport class ProfileDetails {\n Id?: \t string|undefined;\n Name?: string|undefined;\n\tImage?: ProfileImage|undefined; \n User?: any|undefined; \n}\n\nexport class ProfileImage {\n\tStorageAccountName?: string|undefined;\n BlobContainerName: \tstring|undefined;\n\tBlobName?: string|undefined; \n}\n\nexport enum MapProvider\n{\n None = \"None\",\n Bing = \"Bing\",\n Google = \"Google\"\n}\n\nexport class CloudApplicationInfo {\n Name?: \t string|undefined;\n ApplicationName?: string|undefined;\n DataConnectorName?: string|undefined;\n DataConnectorTypeName?: string|undefined;\n}","import '@angular/localize/init';\nimport { Injectable, Injector, LOCALE_ID, Inject, signal } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map } from 'rxjs/operators';\nimport { firstValueFrom, of } from 'rxjs';\nimport { registerLocaleData } from '@angular/common';\nimport localeDA from '@angular/common/locales/da';\nimport { LanguageInfo } from \"../types/language-info\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobicloudConfigService {\n\n AppInjector: Injector;\n\n public _config_name: string = '';\n public _app_name: string = '';\n public _app_title: string = '';\n public _environment: string = '';\n public _default_api_baseurl: string = ''; \n public _host_url: string = '';\n public _host_url_en: string = '';\n public _oidc_authority: string = '';\n public _oidc_client_id: string = '';\n public _oidc_client_secret: string = ''; \n public _oidc_response_type: string = '';\n public _oidc_scopes: string = '';\n public _oidc_log: boolean = false;\n public _log_httptrafic: number = 0;\n public _themes_enabled: boolean|undefined = false;\n\n currentLocaleId = signal<string>('');\n\n languageName = signal<string>('');\n\n constructor(private http: HttpClient, private injector: Injector, @Inject(LOCALE_ID) public localeId: string) {\n this.AppInjector = injector;\n console.log(\"Application Language:\", this.CurrentLanguage);\n // console.log(\"Application baseHref:\", this.baseHref);\n if(this.localeId == \"da\") {\n registerLocaleData(localeDA, 'da'); \n }\n this.currentLocaleId.set(this.localeId);\n this.languageName.set(this.getLanguageName(this.localeId));\n }\n\n checkIfConfigFileExists(config_file: string): Promise<boolean> {\n const timestamp = Date.now();\n return firstValueFrom(\n this.http.head(`./assets/${config_file}?t=${timestamp}`).pipe(\n map(() => true), // File exists\n catchError(() => of(false)) // File doesn't exist\n )\n );\n }\n\n async getConfigData(config_file: string): Promise<any> {\n const config_file_url = await this.checkIfConfigFileExists('app.config.runtime.json')\n ? './assets/app.config.runtime.json'\n : `./assets/${config_file}`;\n \n const configdata = await firstValueFrom(\n this.http.get(`${config_file_url}?t=${Date.now()}`)\n );\n \n Object.assign(this, configdata);\n return configdata;\n }\n\n\n getLanguageName(locale: string) : string {\n if(locale == \"da\"){\n return $localize`:@@LanguageName-da:Danish`;\n }\n else{\n return $localize`:@@LanguageName-en-US:English`;\n } \n }\n\n get CurrentLanguage() : string {\n if(this.localeId == \"da\"){\n return \"DK\";\n }\n else if(this.localeId == \"en-US\"){\n return \"US\";\n } \n else {\n return this.localeId;\n }\n }\n \n getSupportedLanguages() : LanguageInfo[]\n {\n const languages: LanguageInfo[] = [{LocaleId: 'da', LanguageName: this.getLanguageName('da'), FlagCode: 'DK'}, {LocaleId: 'en-US', LanguageName: this.getLanguageName('en-US'), FlagCode: 'GB'}];\n return languages;\n }\n\n getApiSiteUrl() : string{\n return `${this._default_api_baseurl}`;\n }\n\n getApiBaseUrl() : string{\n return `${this.getApiSiteUrl()}api/`;\n }\n\n getMobiManagementDataUrl() : string{\n return `${this.getApiBaseUrl()}mobimanagement/`;\n } \n\n getRepositoryUrl() : string{\n return `${this.getApiBaseUrl()}repository/`;\n } \n\n get config_name(): string {\n return this._config_name;\n }\n \n get app_name(): string {\n return this._app_name;\n }\n\n get app_title(): string {\n return this._app_title;\n }\n\n get environment(): string {\n return this._environment;\n }\n\n get oidc_authority(): string {\n return this._oidc_authority;\n }\n\n get oidc_client_id(): string {\n return this._oidc_client_id;\n }\n\n get oidc_client_secret(): string {\n return this._oidc_client_secret;\n }\n\n get host_url(): string {\n return this._host_url;\n }\n\n get host_url_en(): string {\n return this._host_url_en;\n }\n\n get oidc_base_url(): string {\n if(this.localeId == \"da\") {\n return this.host_url;\n }\n else{\n return this.host_url_en;\n } \n }\n\n get oidc_redirect_uri(): string {\n return `${this.oidc_base_url}signin-callback`;\n }\n\n get oidc_redirect_silent_uri(): string {\n return `${this.oidc_base_url}signin-silent-callback`;\n }\n\n get oidc_post_logout_redirect_uri(): string {\n return `${this.oidc_base_url}signout-callback`;\n }\n\n get oidc_response_type(): string {\n return this._oidc_response_type;\n }\n\n get oidc_scopes(): string {\n return this._oidc_scopes;\n }\n\n get oidc_log(): boolean {\n return this._oidc_log;\n }\n\n get log_httptrafic(): number {\n return this._log_httptrafic;\n }\n\n get themes_enabled(): boolean|undefined {\n return this._themes_enabled;\n }\n \n}\n","import { Injectable, EventEmitter, signal } from '@angular/core';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { UserManager, User, Log } from 'oidc-client';\nimport { firstValueFrom, retry } from 'rxjs';\nimport { timeout } from 'rxjs/operators';\nimport { MobicloudConfigService } from \"./mobicloud-config.service\";\nimport { MobiUserProfile } from \"../types/mobi-user-profile\";\nimport { ApplicationDetails, ProfileDetails, EmployeeSecurityRoleType } from \"../types/application-details\";\nimport { Country } from \"../types/country\";\nimport { IODataResult } from \"../types/odata-result\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobicloudCoreService {\n\n public _appVersion: string = '';\n public _appName: string = '';\n public _appTitle: string = '';\n\n public require_Organization:boolean = true;\n public require_Customer:boolean = false;\n public require_Vendor:boolean = false;\n\n private manager: UserManager | undefined;\n\n user = signal<User | null>(null);\n mobiUserProfile= signal<MobiUserProfile | undefined>(undefined);\n applicationDetails = signal<ApplicationDetails | undefined>(undefined);\n profileDetails = signal<ProfileDetails | undefined>(undefined);\n countries = signal<Map<string, Country> | undefined>(undefined); \n\n public UserChanged: EventEmitter<{user: User|undefined|null, profile: MobiUserProfile|undefined, profileDetails:ProfileDetails|undefined}> = new EventEmitter<{user: User|undefined|null, profile: MobiUserProfile|undefined, profileDetails:ProfileDetails|undefined}>(); \n\n constructor(protected httpClient: HttpClient, public configService: MobicloudConfigService) { \n this.usermanager_UserLoaded = this.usermanager_UserLoaded.bind(this); \n this.usermanager_UserUnloaded = this.usermanager_UserUnloaded.bind(this); \n\n if(this.configService.oidc_log){\n Log.logger = console;\n Log.level = Log.DEBUG; \n }\n this.manager = new UserManager(\n {\n authority: configService.oidc_authority,\n client_id: configService.oidc_client_id,\n client_secret: configService.oidc_client_secret,\n redirect_uri: configService.oidc_redirect_uri,\n post_logout_redirect_uri: configService.oidc_post_logout_redirect_uri,\n response_type: configService.oidc_response_type,\n scope: configService.oidc_scopes,\n filterProtocolClaims: true,\n loadUserInfo: true,\n silent_redirect_uri: configService.oidc_redirect_silent_uri\n }\n );\n\n this.manager.events.addUserLoaded(this.usermanager_UserLoaded); \n this.manager.events.addUserUnloaded(this.usermanager_UserUnloaded);\n\n if(this.configService.oidc_log){\n this.enableOidcLogEvents(); \n }\n\n this.manager.clearStaleState();\n\n this.manager.getUser().then((_user:User|null) => {\n this.user.set(_user);\n if(_user)\n this.mobiUserProfile.set(new MobiUserProfile(_user));\n else\n this.mobiUserProfile.set(undefined);\n\n if(this.configService.oidc_log)\n console.log(\"constructor::manager.getUser()\", \"getUser complete\", _user, this.user(), this.mobiUserProfile());\n\n this.onUserChanged().then(() => \n {\n if(this.configService.oidc_log)\n console.log(\"constructor::manager.getUser()\", \"onUserChanged complete\", this.user(), this.mobiUserProfile()); \n });\n });\n }\n\n usermanager_UserLoaded(_user:User){\n this.user.set(_user);\n if(_user)\n this.mobiUserProfile.set(new MobiUserProfile(_user));\n else\n this.mobiUserProfile.set(undefined);\n\n if(this.configService.oidc_log){\n console.log('User loaded', _user, this.user(), this.mobiUserProfile(), this.profileDetails());\n }\n this.onUserChanged(); \n }\n\n usermanager_UserUnloaded(){\n this.user.set(null);\n this.mobiUserProfile.set(undefined);\n this.onUserChanged(); \n\n if(this.configService.oidc_log){\n console.log('User unloaded', this.user(), this.mobiUserProfile(), this.profileDetails());\n } \n }\n\n protected async onUserChanged() : Promise<void>\n {\n if(this.configService.oidc_log){\n console.log(\"onUserChanged\", \"user\", this.user(), this.mobiUserProfile(), this.profileDetails()); \n }\n \n if (this.user()) {\n //Load application details (related to logged in organization user)\n let appResult = await this.getApplicationDetails();\n if(this.configService.oidc_log)\n console.log(\"onUserChanged\", \"appResult\",appResult);\n\n //Load Profile Details (The actual employee)\n let profileDetailsResult = await this.getProfileDetails();\n if(this.configService.oidc_log){\n console.log(\"onUserChanged\", \"getProfileDetails result\",profileDetailsResult); \n console.log(\"onUserChanged\", \"getProfileDetails\", this.profileDetails());\n } \n \n //Load countries (if not loaded)\n if(!this.countries()){\n let countriesResult = await this.getCountries();\n if(this.configService.oidc_log){\n console.log(\"onUserChanged\", \"getCountries result\",countriesResult); \n console.log(\"onUserChanged\", \"getCountries\", this.countries());\n }\n }\n }\n else {\n this.mobiUserProfile.set(undefined);\n this.profileDetails.set(undefined);\n this.applicationDetails.set(undefined);\n }\n\n this.UserChanged.emit({user: this.user(), profile: this.mobiUserProfile(), profileDetails: this.profileDetails()});\n }\n\n\n async getApplicationDetails(requestTimeout:number=30000): Promise<ApplicationDetails | undefined> {\n if (!this.isAuthenticated()) {\n console.warn(\"ApplicationDetails is null, user not authenticated\");\n this.applicationDetails.set(undefined);\n return undefined;\n }\n \n if (this.isMasterUserAuthenticated() && !this.hasMasterOrganization()) {\n console.warn(\"ApplicationDetails is null, MasterOrganization is not selected\");\n this.applicationDetails.set(undefined);\n return undefined;\n }\n \n try {\n const url = `${this.configService.getApiBaseUrl()}ApplicationDetails`;\n const params = new HttpParams()\n .set('key', this.configService.app_name)\n .set('env', this.configService.environment);\n \n const appDetails = await firstValueFrom(\n this.httpClient.get<ApplicationDetails>(url, { params }).pipe(\n timeout(requestTimeout),retry({\n count: 2,\n delay: 1000,\n resetOnSuccess: true\n })\n )\n );\n\n this.applicationDetails.set(appDetails);\n return appDetails;\n \n } \n catch (error: any) {\n console.error(\"getApplicationDetails error:\", error);\n this.applicationDetails.set(undefined);\n throw error;\n }\n }\n\n async getCountries(): Promise<Map<string, Country>> {\n const url = `${this.configService.getMobiManagementDataUrl()}Country`;\n \n try {\n const result:IODataResult<Country> = await firstValueFrom(\n this.httpClient.get<IODataResult<Country>>(url, {\n params: {\n '$filter': 'enabled eq true',\n '$orderby': 'Name',\n '$select': 'code2,Name,LocalName,TradeArea,Shipping_Require_State'\n }\n }).pipe(timeout(15000),retry({\n count: 2,\n delay: 1000,\n resetOnSuccess: true\n }))\n );\n \n const countries_map = new Map(result.value.map((country:Country) => [country.Code2 ?? '', country]));\n \n this.countries.set(countries_map);\n \n return countries_map;\n \n } \n catch (error:any) {\n console.error(error);\n // return new Map<string, Country>();\n throw error;\n }\n }\n \n async getProfileDetails(requestTimeout:number=30000): Promise<ProfileDetails | undefined> {\n if (!this.isAuthenticated() || !this.mobiUserProfile()?.user_id) {\n if(this.configService.oidc_log){\n let profile = this.mobiUserProfile();\n console.log(\"getProfileDetails\", \"no user\",profile); \n } \n this.profileDetails.set(undefined);\n return undefined;\n }\n \n let url:string|undefined;\n let orgid_override:string|undefined;\n if(this.mobiUserProfile()?.isEmployeeUser){ \n if(this.mobiUserProfile()?.isEmployeeMasterUser){\n let app_orgId = this.applicationDetails()?.OrganizationId?.toLowerCase();\n let user_org_id = this.mobiUserProfile()?.user_partyid?.toLowerCase();\n if((user_org_id != undefined && app_orgId != undefined) && app_orgId != user_org_id){\n orgid_override = user_org_id;\n }\n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"isEmployeeMasterUser\",app_orgId, user_org_id, orgid_override); \n } \n // console.log(\"isEmployeeMasterUser\", app_orgId, user_org_id, orgid_override);\n }\n url = `${this.configService.getMobiManagementDataUrl()}employee(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;\n }\n else if(this.mobiUserProfile()?.isCustomerUser){\n url = `${this.configService.getMobiManagementDataUrl()}customeruser(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;\n }\n else if(this.mobiUserProfile()?.isVendorUser){\n url = `${this.configService.getMobiManagementDataUrl()}vendoruser(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;\n }\n if (!url) {\n if(this.configService.oidc_log){\n let profile = this.mobiUserProfile();\n console.log(\"getProfileDetails\", \"no url\", profile); \n } \n this.profileDetails.set(undefined);\n return undefined;\n }\n \n try {\n // console.log(url);\n let headers = new HttpHeaders();\n if(orgid_override){\n headers = headers.set(\"OrganizationId\", orgid_override);\n }\n \n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"url\", url); \n console.log(\"getProfileDetails\", \"headers\", headers); \n } \n\n const result = await firstValueFrom(\n this.httpClient.get<IODataResult<any>>(url, { headers: headers }).pipe(\n timeout(requestTimeout)\n )\n );\n\n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"result\", result); \n } \n \n if (!result.value || !result.value[0]) {\n return undefined;\n }\n const _user = result.value[0];\n const _profileDetails = Object.assign(new ProfileDetails(), {\n Id: _user.Id?.toString(),\n Name: _user.Name,\n Image: _user.Image,\n User: _user\n });\n\n this.profileDetails.set(_profileDetails);\n\n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"profileDetails\", _profileDetails); \n } \n\n return _profileDetails;\n \n } catch (error: any) {\n console.error(\"getProfileDetails error:\", error);\n this.profileDetails.set(undefined);\n return undefined;\n }\n } \n\n\n // --- SignIn ------------------------------------------------------\n\n public async signIn(redirectUrl: string): Promise<any> {\n if(this.configService.oidc_log){\n console.log(\"signIn\", redirectUrl); \n }\n let result = await this.manager?.signinRedirect({ data: { redirectUrl: redirectUrl } }).catch( (reason: any) =>\n {\n console.error(\"signIn failed:\", reason, this.user(), this.mobiUserProfile());\n return new Error(reason);\n });\n if(this.configService.oidc_log){\n console.log(\"signIn\", \"result\", result, this.user(), this.mobiUserProfile()); \n }\n return result;\n }\n\n public async completeSignIn(): Promise<User|null> { \n let _user = await this.manager?.signinRedirectCallback() ?? null;\n if(this.configService.oidc_log){\n console.log(\"completeSignIn\", _user, this.user(), this.mobiUserProfile()); \n }\n return _user;\n }\n\n // --- Silent SignIn -----------------------------------------------\n\n public async signInSilent(): Promise<any> { \n if(this.configService.oidc_log){\n console.log(\"signInSilent\"); \n } \n let result = await this.manager?.signinSilent().then((_user:User) =>\n {\n if(this.configService.oidc_log){\n console.log(\"signInSilent\", \"result\", _user, this.user(), this.mobiUserProfile()); \n } \n this.onSignedInSilent(_user);\n }).catch( (reason: any) =>\n {\n console.error(\"signInSilent failed:\", reason, this.user(), this.mobiUserProfile());\n return new Error(reason);\n });\n\n if(this.configService.oidc_log){\n console.log(\"signInSilent\", \"result\", result, this.user(), this.mobiUserProfile()); \n }\n return result;\n }\n\n public onSignedInSilent(_user: User){\n if(this.configService.oidc_log){\n console.log(\"onSignedInSilent\", _user, this.user(), this.mobiUserProfile()); \n } \n }\n\n public async completeSilentSignIn() : Promise<any>{ \n if(this.configService.oidc_log){\n console.log(\"completeSilentSignIn\", this.user(), this.mobiUserProfile()); \n } \n let result = await this.manager?.signinSilentCallback();\n\n if(this.configService.oidc_log){\n console.log(\"signInSilent\", \"result\", result, this.user(), this.mobiUserProfile()); \n }\n return result;\n }\n\n // --- SignOut -----------------------------------------------------\n\n public async signout(): Promise<any> {\n if(this.configService.oidc_log){\n console.log(\"signout\", this.user(), this.mobiUserProfile()); \n } \n return await this.manager?.signoutRedirect();\n }\n\n public async completeSignout() {\n if(this.configService.oidc_log){\n console.log(\"completeSignout\", this.user(), this.mobiUserProfile()); \n }\n }\n\n enableOidcLogEvents(){\n if(this.manager){\n // this.manager.events.addUserLoaded((_user:User) => {\n // console.log('User loaded:', _user);\n // });\n\n // this.manager.events.addUserUnloaded(() => {\n // console.log('User unloaded');\n // });\n\n this.manager.events.addUserSignedIn(() => {\n console.log('User signed in...');\n });\n\n this.manager.events.addAccessTokenExpiring(() => {\n console.log('Access token expiring...');\n });\n\n this.manager.events.addAccessTokenExpired(() => {\n console.log('Access token expired');\n });\n\n this.manager.events.addSilentRenewError((error: Error) => {\n console.error('Silent renew error:', error);\n });\n\n this.manager.events.addUserSignedOut(() => {\n console.log('User signed out from identity server');\n console.trace('User signed out stack trace');\n // This is particularly important to check - if this is firing,\n // it could trigger app reloads\n });\n\n this.manager.events.removeUserSignedOut(() => {\n console.log('removeUserSignedOut called');\n });\n\n this.manager.events.addUserSessionChanged(() => {\n console.log('addUserSessionChanged called');\n });\n\n this.manager.events.removeUserSessionChanged(() => {\n console.log('removeUserSessionChanged called');\n });\n }\n }\n\n // --- Helper methods -----------------------------------------------------\n\n public isAuthenticated(): boolean {\n return this.user() != null && !this.user()?.expired;\n }\n\n public isOrganizationAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser);\n }\n\n public isMasterOrganizationAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser)) || this.isMasterUserAuthenticated();\n }\n\n public isOrganizationUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin);\n }\n\n public isMasterOrganizationUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin)) || this.isMasterUserAuthenticated();\n }\n\n public isMasterOrganizationAdminAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationAdmin)) || this.isMasterUserAuthenticated();\n }\n\n public isEmployeeAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser);\n }\n\n public isEmployeeMasterUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isEmployeeMasterUser);\n }\n\n public isMasterEmployeeAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser)) || this.isMasterUserAuthenticated();\n } \n\n public isCustomerUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isCustomerUser);\n }\n\n public isMasterCustomerUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isCustomerUser)) || this.isMasterUserAuthenticated();\n }\n\n public isVendorUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isVendorUser);\n }\n\n public isMasterVendorUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isVendorUser)) || this.isMasterUserAuthenticated();\n } \n\n public isB2BAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.isOrganizationAuthenticated() || this.isCustomerUserAuthenticated()|| this.isVendorUserAuthenticated());\n }\n\n public isMasterB2BAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.isOrganizationAuthenticated() || this.isCustomerUserAuthenticated()|| this.isVendorUserAuthenticated()) || this.isMasterUserAuthenticated();\n }\n\n public isMasterUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isMasterUser || this.mobiUserProfile()?.isMasterAdmin);\n }\n\n public isMasterAdminAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isMasterAdmin);\n }\n\n public securityRole(): EmployeeSecurityRoleType|undefined {\n if(this.isAuthenticated() && this.mobiUserProfile() != null && this.mobiUserProfile()?.securityRole){\n return EmployeeSecurityRoleType[this.mobiUserProfile()?.securityRole as keyof typeof EmployeeSecurityRoleType];\n }\n return undefined;\n }\n\n public hasMasterOrganization(): boolean {\n var strMasterOrganizationId = localStorage.getItem(\"MasterOrganizationId\");\n if(strMasterOrganizationId && strMasterOrganizationId.length > 0){\n return true;\n }\n else{\n return false;\n }\n }\n\n public getMasterOrganization(): string|null {\n var strMasterOrganizationId = localStorage.getItem(\"MasterOrganizationId\");\n return strMasterOrganizationId;\n }\n\n public async setMasterOrganization(strMasterOrganizationId: string|null): Promise<void> {\n if(strMasterOrganizationId){\n localStorage.setItem(\"MasterOrganizationId\", strMasterOrganizationId);\n let appdetails = await this.getApplicationDetails();\n if(this.configService.oidc_log)\n console.log(\"setMasterOrganization\", \"appResult\", appdetails); \n }\n else{\n this.removeMasterOrganization();\n // return new Promise(resolve => { resolve(undefined); });\n }\n }\n\n public removeMasterOrganization(): void {\n localStorage.removeItem(\"MasterOrganizationId\");\n }\n\n public hasMasterCustomer(): boolean {\n var strMasterCustomerId = localStorage.getItem(\"MasterCustomerId\");\n if(strMasterCustomerId && strMasterCustomerId.length > 0){\n return true;\n }\n else{\n return false;\n }\n }\n\n public getMasterCustomer(): string|null {\n var strMasterCustomerId = localStorage.getItem(\"MasterCustomerId\");\n return strMasterCustomerId;\n }\n\n public setMasterCustomer(strMasterCustomerId: string|null): void {\n if(strMasterCustomerId){\n localStorage.setItem(\"MasterCustomerId\", strMasterCustomerId); \n }\n else{\n this.removeMasterCustomer();\n }\n }\n\n public removeMasterCustomer(): void {\n localStorage.removeItem(\"MasterCustomerId\");\n } \n\n public hasMasterVendor(): boolean {\n var strMasterVendorId = localStorage.getItem(\"MasterVendorId\");\n if(strMasterVendorId && strMasterVendorId.length > 0){\n return true;\n }\n else{\n return false;\n }\n }\n\n public getMasterVendor(): string|null {\n var strMasterVendorId = localStorage.getItem(\"MasterVendorId\");\n return strMasterVendorId;\n }\n\n public setMasterVendor(strMasterVendorId: string|null): void {\n if(strMasterVendorId){\n localStorage.setItem(\"MasterVendorId\", strMasterVendorId); \n }\n else{\n this.removeMasterVendor();\n }\n }\n\n public removeMasterVendor(): void {\n localStorage.removeItem(\"MasterVendorId\");\n } \n\n public redirectUrl(): string {\n return this.user()?.state?.redirectUrl;\n }\n\n public get accessToken(): string {\n return this.user()?.access_token ?? '';\n }\n\n public get authorizationHeader(): string|undefined {\n return this.user()?.token_type?.concat(\" \", (this.user()?.access_token ?? ''));\n }\n\n public get tokenExpiresAt(): Date|undefined {\n if(this.user()){\n let expires_at = this.user()?.expires_at;\n if(expires_at)\n return new Date(expires_at * 1000);\n }\n return undefined;\n }\n\n public get tokenValidUntil(): Date|undefined {\n if(this.user()){\n let expires_at = this.user()?.expires_at;\n if(expires_at)\n return new Date((expires_at -120) * 1000);\n }\n return undefined;\n }\n\n public get isTokenExpired(): boolean {\n if(this.user()){\n let expires_in = this.user()?.expires_in;\n if(expires_in)\n return expires_in <= 120;\n }\n return false;\n }\n\n handleError(error:any) {\n let errorMessage = '';\n if (error && error.error && error.error.error){\n //Get Json error\n errorMessage = error.error.error;\n }\n else if(error && error.error instanceof ErrorEvent) {\n // Get client-side error\n errorMessage = error.error.message;\n } \n else {\n // Get server-side error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n // window.alert(errorMessage);\n let anyRemoved:boolean = evaluateForMasterOrganizationClearance(errorMessage);\n if(anyRemoved){\n location.reload();\n }\n return new Error(errorMessage);\n }\n\n //-- Permissions\n SecurityRolePriorityMap: Record<EmployeeSecurityRoleType, number> = {\n [EmployeeSecurityRoleType.None]: 0,\n [EmployeeSecurityRoleType.SuperUser]: 1,\n [EmployeeSecurityRoleType.Accountant]: 2,\n [EmployeeSecurityRoleType.Admin]: 3\n };\n\n requireEmployeePermission(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined, securityRole:EmployeeSecurityRoleType = EmployeeSecurityRoleType.None) : boolean{\n let valid = (mobiUserProfile.isOrganizationUser || \n mobiUserProfile.isOrganizationAdmin ||\n (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin));\n if(!valid){\n valid = mobiUserProfile.isEmployeeUser ?? false;\n if(valid){\n let emplSecurityRole = EmployeeSecurityRoleType.None;\n if(mobiUserProfile.securityRole){\n emplSecurityRole = EmployeeSecurityRoleType[mobiUserProfile.securityRole as keyof typeof EmployeeSecurityRoleType];\n }\n valid = this.SecurityRolePriorityMap[emplSecurityRole] >= this.SecurityRolePriorityMap[securityRole];\n }\n }\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireOrganizationUser(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = (mobiUserProfile.isOrganizationUser || \n mobiUserProfile.isOrganizationAdmin ||\n (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin));\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireOrganizationAdmin(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = (mobiUserProfile.isOrganizationAdmin ||\n (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin));\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireMasterPermission(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin);\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireMasterAdminPermission(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = mobiUserProfile.isMasterAdmin;\n if(!valid){\n let isEmployeeMaster = (mobiUserProfile.isMasterUser ?? false) && (mobiUserProfile.isEmployeeUser ?? false);\n if(isEmployeeMaster){\n let emplSecurityRole = EmployeeSecurityRoleType.None;\n if(mobiUserProfile.securityRole){\n emplSecurityRole = EmployeeSecurityRoleType[mobiUserProfile.securityRole as keyof typeof EmployeeSecurityRoleType];\n }\n valid = (this.SecurityRolePriorityMap[emplSecurityRole] == this.SecurityRolePriorityMap[EmployeeSecurityRoleType.Admin]);\n }\n }\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n } \n\n\n}\n\nexport function evaluateForMasterOrganizationClearance(errorMessage:string) : boolean{\n let anyRemoved:boolean = false;\n\n if(errorMessage && (\n errorMessage.toString().indexOf('No Test database has been setup') >= 0 || \n errorMessage.toString().indexOf('Organization does not exist') >= 0\n )){\n // console.log(\"Check for clearance of MasterOrganizationId\");\n \n let masterOrgId = localStorage.getItem(\"MasterOrganizationId\");\n if(masterOrgId){\n console.log(\"Clearing MasterOrganizationId:\", masterOrgId);\n localStorage.removeItem(\"MasterOrganizationId\");\n anyRemoved = true;\n }\n\n let customerId = localStorage.getItem(\"MasterCustomerId\");\n if(customerId){\n console.log(\"Clearing MasterCustomerId:\", customerId);\n localStorage.removeItem(\"MasterCustomerId\");\n anyRemoved = true;\n }\n\n let vendorId = localStorage.getItem(\"MasterVendorId\");\n if(vendorId){\n console.log(\"Clearing MasterVendorId:\", vendorId);\n localStorage.removeItem(\"MasterVendorId\");\n anyRemoved = true;\n }\n }\n\n return anyRemoved;\n}\n","import { Injectable } from '@angular/core';\nimport {HttpEvent,HttpInterceptor,HttpHandler,HttpRequest,HttpErrorResponse} from \"@angular/common/http\";\nimport { Observable } from \"rxjs\";\n\n// import { ConfigService } from \"../../services/config.service\";\n// import { UserService } from \"../../services/user.service\";\nimport { MobicloudConfigService } from \"./services/mobicloud-config.service\";\nimport { MobicloudCoreService } from \"./services/mobicloud-core.service\";\n\nimport { from } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n@Injectable()\nexport class TokenHttpInterceptor implements HttpInterceptor {\n \n private coreService: MobicloudCoreService | undefined;\n\n constructor(protected configService: MobicloudConfigService) \n { \n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // All HTTP requests are going to go through this method\n\n if(this.configService?._default_api_baseurl && req.url.includes(this.configService._default_api_baseurl)){\n if(this.coreService === undefined){ \n this.coreService = this.configService.AppInjector.get(MobicloudCoreService);\n }\n // console.log(\"userservice: \" + this.userService);\n if(this.configService.log_httptrafic > 1){\n console.log({log: \"token-http-interceptor request\", request: req});\n }\n // if (!req.headers.has(\"Access-Control-Allow-Origin\")) {\n // req = req.clone({\n // headers: req.headers.set(\"Access-Control-Allow-Origin\", \"*\")\n // });\n // }\n\n const language: string = this.configService.CurrentLanguage;\n \n if (language && !req.headers.has(\"Language\")) {\n req = req.clone({\n headers: req.headers.set(\"Language\", language)\n });\n }\n if (language && !req.headers.has(\"Application\")) {\n req = req.clone({\n headers: req.headers.set(\"Application\", this.configService._app_name)\n });\n } \n if(this.configService.log_httptrafic > 1){\n console.log(req); \n }\n if(this.coreService && this.coreService.isAuthenticated()){\n if(this.coreService.isTokenExpired) {\n if(this.configService.log_httptrafic > 0)\n console.warn({log: \"token is expired (silent signin)\", tokenValidUntil: this.coreService.tokenValidUntil, tokenExpiresAt: this.coreService.tokenExpiresAt, is: this.coreService.isTokenExpired, auth_header: this.coreService.authorizationHeader, user: this.coreService.user} );\n return from(this.coreService.signInSilent()).pipe(\n switchMap((user) => {\n if(this.configService.log_httptrafic > 0)\n console.log({log: \"token renewed (adding new token)\", tokenValidUntil: this.coreService?.tokenValidUntil, tokenExpiresAt: this.coreService?.tokenExpiresAt, is: this.coreService?.isTokenExpired, auth_header: this.coreService?.authorizationHeader, user: this.coreService?.user} );\n req = req.clone({headers: req.headers.set(\"Authorization\", this.coreService?.authorizationHeader ?? '')}); \n\n // if(this.coreService && this.coreService.isMasterUserAuthenticated() && this.coreService.require_Organization && !req.headers.has(\"OrganizationId\")){\n if(this.coreService && this.coreService.require_Organization && !req.headers.has(\"OrganizationId\")){ \n var strMasterOrganizationId = this.coreService.getMasterOrganization();\n if(strMasterOrganizationId && strMasterOrganizationId.length > 0){\n req = req.clone({headers: req.headers.set(\"OrganizationId\", strMasterOrganizationId)});\n }\n } \n\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){\n if(this.coreService && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){ \n var strMasterCustomerId = this.coreService.getMasterCustomer();\n if(strMasterCustomerId && strMasterCustomerId.length > 0){\n req = req.clone({headers: req.headers.set(\"CustomerId\", strMasterCustomerId)});\n }\n }\n\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){\n if(this.coreService && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){ \n var strMasterVendorId = this.coreService.getMasterVendor();\n if(strMasterVendorId && strMasterVendorId.length > 0){\n req = req.clone({headers: req.headers.set(\"VendorId\", strMasterVendorId)});\n }\n } \n\n return next.handle(req);\n })\n );\n } \n else{\n if(this.configService.log_httptrafic > 0)\n console.log({log: \"token not expired\", tokenValidUntil: this.coreService.tokenValidUntil, tokenExpiresAt: this.coreService.tokenExpiresAt, is: this.coreService.isTokenExpired, auth_header: this.coreService.authorizationHeader, user: this.coreService.user} );\n if (!req.headers.has(\"Authorization\")) {\n req = req.clone({headers: req.headers.set(\"Authorization\", this.coreService.authorizationHeader ?? '')}); \n }\n // if(this.coreService.isMasterUserAuthenticated() && !req.headers.has(\"OrganizationId\")){\n if(this.coreService && this.coreService.require_Organization && !req.headers.has(\"OrganizationId\")){\n var strMasterOrganizationId = this.coreService.getMasterOrganization();\n if(strMasterOrganizationId && strMasterOrganizationId.length > 0){\n req = req.clone({headers: req.headers.set(\"OrganizationId\", strMasterOrganizationId)});\n }\n }\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){\n if(this.coreService && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){ \n var strMasterCustomerId = this.coreService.getMasterCustomer();\n if(strMasterCustomerId && strMasterCustomerId.length > 0){\n req = req.clone({headers: req.headers.set(\"CustomerId\", strMasterCustomerId)});\n }\n }\n\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){\n if(this.coreService && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){ \n var strMasterVendorId = this.coreService.getMasterVendor();\n if(strMasterVendorId && strMasterVendorId.length > 0){\n req = req.clone({headers: req.headers.set(\"VendorId\", strMasterVendorId)});\n }\n } \n return next.handle(req);\n }\n }\n else{\n if(this.configService.log_httptrafic > 0)\n console.log({log: \"user not athenticated\", tokenValidUntil: this.coreService.tokenValidUntil, tokenExpiresAt: this.coreService.tokenExpiresAt, is: this.coreService.isTokenExpired, auth_header: this.coreService.authorizationHeader, user: this.coreService.user} );\n return next.handle(req); \n } \n } \n else{\n if(this.configService.log_httptrafic > 1)\n console.log(\"not app request: \", req);\n return next.handle(req);\n } \n } \n}\n","import '@angular/localize/init';\nimport { Injectable } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Observable, throwError, firstValueFrom } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map, timeout } from 'rxjs/operators';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable()\nexport class UsernameValidator {\n\n currentUserId: string |undefined;\n debouncer: any |undefined;\n\n constructor(protected httpClient: HttpClient, public coreService: MobicloudCoreService){ \n } \n \n checkUsername(control: UntypedFormControl): any {\n\n clearTimeout(this.debouncer);\n \n return new Promise(resolve => {\n \n this.debouncer = setTimeout(() => {\n let parameterString = `?username=${control.value}`;\n if(this.currentUserId){\n parameterString += `&currentUserId=${this.currentUserId}`;\n }\n this.executeFunction<boolean>(parameterString).then(response => {\n response.subscribe((result) => {\n if(result){\n // console.log(\"user taken\");\n resolve({ \n \"usernametaken\": true\n });\n } else{\n // console.log(\"user not taken\");\n resolve(null);\n } \n });\n }),\n (err:any) => { \n resolve({'usernametaken': true});\n }\n }, 1000); \n \n });\n }\n\n async executeFunction<T>(parameterString: string = '', requestTimeout: number = 30000) : Promise<Observable<T>>{\n console.log(`${this.coreService.configService.getMobiManagementDataUrl()}Employee/UsernameTaken()${parameterString}`);\n return this.httpClient.get<any>(`${this.coreService.configService.getMobiManagementDataUrl()}Employee/UsernameTaken()${parameterString}`)\n .pipe(timeout(requestTimeout), catchError(this.handleError))\n .pipe(map(result => result['value'])); \n }\n \n handleError(error:any) {\n let errorMessage = '';\n if (error && error.error && error.error.error){\n //Get Json error\n errorMessage = error.error.error;\n }\n else if(error && error.error instanceof ErrorEvent) {\n // Get client-side error\n errorMessage = error.error.message;\n } \n else {\n // Get server-side error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n\n return throwError(() => errorMessage);\n } \n\n async usernameValidation_devextreme(username: string, currentUserId?: string): Promise<void> {\n const params = new URLSearchParams();\n params.set('username', username);\n if (currentUserId) {\n params.set('currentUserId', currentUserId);\n }\n \n const url = `${this.coreService.configService.getMobiManagementDataUrl()}Employee/UsernameTaken()?${params}`;\n \n try {\n const res: any = await firstValueFrom(this.httpClient.get(url));\n \n res.isValid = !res.value;\n if (res.isValid) {\n res.message = $localize`:@@ValidationText-UsernameAvailable:Username is available`;\n return res;\n } else {\n throw $localize`:@@ErrorText-UsernameTaken:Username is not available`;\n }\n } catch (error) {\n console.error(error);\n throw \"Error: Unable to validate username\";\n }\n }\n \n async usernameValidation_customer_devextreme(customerId: string, username: string, currentUserId?: string): Promise<void> {\n const params = new URLSearchParams();\n params.set('username', username);\n if (currentUserId) {\n params.set('currentUserId', currentUserId);\n }\n \n const url = `${this.coreService.configService.getMobiManagementDataUrl()}Customer(${customerId})/UsernameTaken()?${params}`;\n \n try {\n const res: any = await firstValueFrom(this.httpClient.get(url));\n \n res.isValid = !res.value;\n if (res.isValid) {\n res.message = $localize`:@@ValidationText-UsernameAvailable:Username is available`;\n return res;\n } else {\n throw $localize`:@@ErrorText-UsernameTaken:Username is not available`;\n }\n } catch (error) {\n console.error(error);\n throw \"Error: Unable to validate username\";\n }\n } \n \n async usernameValidation_vendor_devextreme(vendorId: string, username: string, currentUserId?: string): Promise<void> {\n const params = new URLSearchParams();\n params.set('username', username);\n if (currentUserId) {\n params.set('currentUserId', currentUserId);\n }\n \n const url = `${this.coreService.configService.getMobiManagementDataUrl()}Vendor(${vendorId})/UsernameTaken()?${params}`;\n \n try {\n const res: any = await firstValueFrom(this.httpClient.get(url));\n \n res.isValid = !res.value;\n if (res.isValid) {\n res.message = $localize`:@@ValidationText-UsernameAvailable:Username is available`;\n return res;\n } else {\n throw $localize`:@@ErrorText-UsernameTaken:Username is not available`;\n }\n } catch (error) {\n console.error(error);\n throw \"Error: Unable to validate username\";\n }\n }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { MobicloudCoreComponent } from './mobicloud-core.component';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { TokenHttpInterceptor } from \"./token-http-interceptor\";\nimport { MobicloudConfigService } from \"./services/mobicloud-config.service\";\nimport { UsernameValidator } from \"./validators/username-validator\";\n\n@NgModule({\n declarations: [MobicloudCoreComponent],\n imports: [\n ],\n exports: [MobicloudCoreComponent]\n})\nexport class MobicloudCoreModule {\n\n static forRoot(): ModuleWithProviders<MobicloudCoreModule> {\n return {\n ngModule: MobicloudCoreModule,\n providers: [\n {provide: HTTP_INTERCEPTORS, useClass: TokenHttpInterceptor, deps: [MobicloudConfigService], multi: true},\n UsernameValidator\n ]\n };\n } \n }\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isAuthenticated()) {\n return true;\n }\n\n this.coreService.signIn(state.url);\n return false;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiOrganizationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n \n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n return new Observable<boolean>((observer) => {\n this.coreService.requireEmployeePermission(userProfile, (valid: boolean) => {\n if (valid && this.coreService.isAuthenticated()) {\n observer.next(true);\n observer.complete();\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiMasterUserGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n return new Observable<boolean>((observer) => {\n this.coreService.requireMasterPermission(userProfile, (valid: boolean) => {\n if (valid && this.coreService.isAuthenticated()) {\n observer.next(true);\n observer.complete();\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiMasterAdminGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n return new Observable<boolean>((observer) => {\n this.coreService.requireMasterAdminPermission(userProfile, (valid: boolean) => {\n if (valid && this.coreService.isAuthenticated()) {\n observer.next(true);\n observer.complete();\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}\n\n//-------\n@Injectable({\n providedIn: 'root'\n})\nexport class MasterOrganizationGuard implements CanActivate {\n constructor(\n private router: Router, \n private coreService: MobicloudCoreService\n ) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n // Convert the callback-based method to an Observable\n return new Observable<boolean>((observer) => {\n this.coreService.requireEmployeePermission(userProfile, (valid: boolean) => {\n \n if (valid && this.coreService.isAuthenticated()) {\n if (this.coreService.isMasterUserAuthenticated()) {\n const strMasterOrganizationId = localStorage.getItem(\"MasterOrganizationId\");\n \n if (strMasterOrganizationId && strMasterOrganizationId.length > 0) {\n observer.next(true);\n observer.complete();\n } else {\n this.router.navigateByUrl('/selectorganization');\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(true);\n observer.complete();\n }\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiB2BAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isB2BAuthenticated()) {\n return true;\n }\n\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n \n return false;\n }\n\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiCustomerUserAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isCustomerUserAuthenticated()) {\n return true;\n }\n\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n \n return false;\n }\n\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiVendorUserAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isVendorUserAuthenticated()) {\n return true;\n }\n\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n \n return false;\n }\n\n}","export function convertToISODates_ODataValues (values: any, value_names: string[]){\n for (const key in value_names) {\n if(values[value_names[key]]){\n if(!(values[value_names[key]] instanceof Date)){\n values[value_names[key]] = new Date(values[value_names[key]]);\n }\n values[value_names[key]] = new Date(values[value_names[key]]).toISOString();\n }\n } \n}\n\nexport function setZeroTime_ODataValues (values: any, value_names: string[]){\n for (const key in value_names) {\n if(values[value_names[key]]){\n if(!(values[value_names[key]] instanceof Date)){\n values[value_names[key]] = new Date(values[value_names[key]]);\n }\n // console.log(values[value_names[key]]);\n values[value_names[key]].setUTCFullYear(values[value_names[key]].getFullYear());\n values[value_names[key]].setUTCMonth(values[value_names[key]].getMonth());\n values[value_names[key]].setUTCDate(values[value_names[key]].getDate());\n values[value_names[key]].setUTCHours(0); \n values[value_names[key]].setUTCMinutes(0); \n values[value_names[key]].setUTCSeconds(0); \n values[value_names[key]].setUTCMilliseconds(0); \n \n // console.log(values[value_names[key]]); \n values[value_names[key]] = new Date(values[value_names[key]]).toISOString();\n }\n } \n}\n\nexport function setZeroTime_ODataValues_original (values: any, value_names: string[]){\n for (const key in value_names) {\n if(values[value_names[key]]){\n if(!(values[value_names[key]] instanceof Date)){\n values[value_names[key]] = new Date(values[value_names[key]]);\n }\n // console.log(values[value_names[key]]);\n values[value_names[key]].setFullYear(values[value_names[key]].getFullYear());\n values[value_names[key]].setMonth(values[value_names[key]].getMonth());\n values[value_names[key]].setDate(values[value_names[key]].getDate());\n values[value_names[key]].setHours(0); \n values[value_names[key]].setMinutes(0); \n values[value_names[key]].setSeconds(0); \n values[value_names[key]].setMilliseconds(0); \n \n // console.log(values[value_names[key]].toISOString());\n }\n } \n}\n\nexport function ensureDateEqual(date1: Date, date2: any) : Date|undefined{\n if(date1){\n if(!(date1 instanceof Date)){\n date1 = new Date(date1);\n }\n\n if(date2){\n if(!(date2 instanceof Date)){\n date2 = new Date(date2);\n }\n var start = new Date(date2); \n start.setFullYear(date1.getFullYear());\n start.setMonth(date1.getMonth());\n start.setDate(date1.getDate());\n return start;\n }\n }\n return undefined;\n}\n\n//--- Grouping, Sorting and Filtering helper function\nexport function fullNameFilterExpression_Employee(this:any, filterValue: any, selectedFilterOperation: any, field: string | undefined) {\n let column:any = this as any;\n let filterExpression : any[]|undefined;\n\n if(filterValue){\n switch(selectedFilterOperation) { \n case 'contains': {\n if(field)\n filterExpression = [[`${field}/FirstName`, selectedFilterOperation, filterValue], \"or\", [`${field}/LastName`, selectedFilterOperation, filterValue]]; \n else\n filterExpression = [[`FirstName`, selectedFilterOperation, filterValue], \"or\", [`LastName`, selectedFilterOperation, filterValue]]; \n break; \n } \n case 'notcontains': {\n if(field)\n filterExpression = [[`${field}/FirstName`, selectedFilterOperation, filterValue], \"and\", [`${field}/LastName`, selectedFilterOperation, filterValue]]; \n else\n filterExpression = [[`FirstName`, selectedFilterOperation, filterValue], \"and\", [`LastName`, selectedFilterOperation, filterValue]]; \n break; \n }\n case 'startswith': {\n if(field)\n filterExpression = [`${field}/FirstName`, selectedFilterOperation, filterValue];\n else\n filterExpression = [`FirstName`, selectedFilterOperation, filterValue];\n break; \n } \n case 'endswith': {\n if(field)\n filterExpression = [`${field}/LastName`, selectedFilterOperation, filterValue]; \n else\n filterExpression = [`LastName`, selectedFilterOperation, filterValue]; \n break; \n } \n default: { \n break; \n } \n } \n}\n\n if(!filterExpression){\n filterExpression = column.defaultCalculateFilterExpression.apply(column, arguments);\n }\n\n return filterExpression;\n}\n\n\nexport function dateFunctionFilterExpression(this:any, filterValue: any, selectedFilterOperation: any, field: string|undefined, odata_Function: string|undefined) {\n let column:any = this as any;\n let filterExpression : any[]|undefined;\n\n if(filterValue){\n switch(selectedFilterOperation) { \n case '=': {\n filterExpression = [[`${odata_Function}(${field})`, selectedFilterOperation, filterValue]]; \n break; \n } \n case '<>': {\n filterExpression = [[`${odata_Function}(${field})`, selectedFilterOperation, filterValue]]; \n break; \n }\n case '<': {\n //Less than\n filterExpression = [`${odata_Function}(${field})`, selectedFilterOperation, filterValue];\n break; \n } \n case '>': {\n //Greater than\n filterExpression = [`${odata_Function}(${field})`, selectedFilterOperation, filterValue]; \n break; \n } \n default: { \n break; \n } \n } \n}\n\n if(!filterExpression){\n filterExpression = column.defaultCalculateFilterExpression.apply(column, arguments);\n }\n\n // console.log(\"date filter: \", filterExpression);\n return filterExpression;\n}\n\nexport function getBlobUrl(storageAccountName: string, blobPath: string) : string{\n const delim = blobPath.startsWith('/') ? '' : '/';\n return `https://${storageAccountName}.blob.core.windows.net${delim}${blobPath}`;\n}\n\nexport function getProfileImageUrl(storageAccountName: string|undefined, blobContainerName: string|undefined, blobName: string|undefined) : string{\n if(storageAccountName && blobContainerName && blobName){\n return getBlobUrl(storageAccountName, blobContainerName + blobName);\n }\n return './assets/png/no-profile-img-32.png';\n}\n","export class LanguageInfo {\n LocaleId?: string; \n LanguageName?: string;\n FlagCode?: string;\n}","export class ThemeInfo {\n ThemeName?: string; \n ThemeCaption?: string;\n Svg?: string;\n}","export class Country {\n Id?: number; \n Enabled?: boolean;\n Code3?: string;\n Code2?: string;\n Name?: string;\n NameOfficial?: string;\n LocalName?: string;\n LocalNameOfficial?: string; \n Flag_32?: string;\n Flag_128?: string;\n Latitude?: number;\n Longitude?: number;\n zoom?: number;\n TradeArea?: string;\n Language?: string;\n Shipping_Require_State?: boolean; \n}\n\nexport class CountryState {\n Id?: number; \n Name?: string;\n Name_Native?: string;\n\n CountryId?: number; \n CountryCode?: string;\n CountryName?: string;\n CountryLocalName?: string;\n\n StateCode?: string;\n Type?: string;\n\n Latitude?: number;\n Longitude?: number;\n}\n\nexport class CountryCity {\n Id?: number; \n Name?: string;\n\n StateId?: number; \n StateCode?: string;\n StateName?: string;\n StateName_Native?: string;\n \n CountryId?: number; \n CountryCode?: string;\n CountryName?: string;\n CountryLocalName?: string;\n\n Latitude?: number;\n Longitude?: number;\n}\n\nexport class CountryPostalCode {\n Id?: number; \n Name?: string;\n PostalCode?: string;\n\n CountryId?: number; \n CountryCode?: string;\n CountryName?: string;\n CountryLocalName?: string;\n\n AdminName1?: string;\n AdminName1_Native?: string; \n AdminCode1?: string;\n AdminName2?: string;\n AdminCode2?: string;\n AdminName3?: string;\n AdminCode3?: string;\n\n Latitude?: number;\n Longitude?: number;\n}","export class OrganizationInfo {\n OrganizationId: string | undefined;\n Name: string | undefined;\n Email: string | undefined; \n AccountNumber: string | undefined;\n\n HashedPasswords: boolean | undefined;\n CertificateLogin: boolean | undefined;\n Demo: boolean | undefined;\n Active: boolean | undefined;\n\n PartnerId: string | undefined;\n PartnerName: string | undefined;\n\n StorageAccount: StorageAccountInfo | undefined;\n}\n\nexport class StorageAccountInfo {\n Key: string | undefined;\n Name: string | undefined;\n}","export interface IToolbarItem {\n name?: string;\n caption: string;\n svg: string;\n link?: string|undefined;\n linkstate?: any|undefined;\n click?: string|undefined;\n click_paramters?: any[]|undefined;\n children?: IToolbarItem[]|undefined;\n cssClass?: string | undefined;\n cssClass_Icon?: string | undefined;\n itemtype?: string | undefined;\n }\n \n export interface IMenuNode {\n name?: string;\n caption: string;\n svg: string;\n svg_active: string;\n link?: string|undefined;\n linkstate?: any|undefined;\n click?: string|undefined;\n click_paramters?: any[]|undefined; \n children?: IMenuNode[]|undefined;\n }\n\n export enum MenuState {\n OpenedNormal = \"OpenNormal\",\n OpenCollapsed = \"OpenCollapsed\",\n Closed = \"Closed\"\n }"],"names":["i2.MobicloudConfigService","i1.MobicloudConfigService","i2.MobicloudCoreService","i1"],"mappings":";;;;;;;;;;;;MAYa,sBAAsB,CAAA;AAEjC,IAAA,WAAA,GAAA,EAAgB;IAEhB,QAAQ,GAAA;IACR;+GALW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,QAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARvB;;;;AAIT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA;;4FAIU,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAVlC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,oBAAoB,EAAA,QAAA,EACpB;;;;AAIT,EAAA,CAAA,EAAA;;;MCJU,eAAe,CAAA;AAOxB,IAAA,WAAA,CAAY,IAAe,EAAA;QAN3B,IAAA,CAAA,IAAI,GAAc,IAAI;AAOpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;IAClB;AAQA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ;IAC5B;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,aAAa;IACjC;AAEA,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,YAAY;IAChC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU;IAC9B;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK;IACzB;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU;IAC9B;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,IAAG,IAAI,CAAC,IAAI;YACV,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AAC9C,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,UAAU;IAC9B;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO;IAC3B;AAEA,IAAA,IAAI,gBAAgB,GAAA;QAClB,IAAG,IAAI,CAAC,IAAI;AACV,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,GAAG;AACpC,QAAA,OAAO,KAAK;IACd;AAGA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG;IAChC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI;IACjC;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ;IACrC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK;IAClC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS;IACtC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;IACpC;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS;IACtC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,cAAc;IAC3C;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS;IACtC;AAEA,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI;IACjC;AAEA,IAAA,IAAI,mBAAmB,GAAA;QACrB,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;AAC9C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;AAC7C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC;AAC7C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,oBAAoB,GAAA;QACtB,IAAG,IAAI,CAAC,UAAU;AAChB,YAAA,OAAO,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC;AACpF,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW;IACxC;AAEA,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa;IAC1C;AAIA,IAAA,IAAI,cAAc,GAAA;QAChB,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;IACpC;AAEA,IAAA,IAAI,2BAA2B,GAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY;IACzC;AAEA,IAAA,IAAI,kBAAkB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS;IACtC;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;AAC7C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,YAAY,GAAA;QACd,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC3C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,aAAa,GAAA;QACf,IAAG,IAAI,CAAC,UAAU;YAChB,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;AAChD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO;IACpC;AAEA,IAAA,IAAI,yBAAyB,GAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY;IACzC;AAEA,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS;IACtC;AAEA,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY;IACjD;AACD;;MC/LU,kBAAkB,CAAA;AA6B9B;IAEW;AAAZ,CAAA,UAAY,wBAAwB,EAAA;AAEhC,IAAA,wBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,wBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,wBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,wBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACnB,CAAC,EANW,wBAAwB,KAAxB,wBAAwB,GAAA,EAAA,CAAA,CAAA;MAQvB,sBAAsB,CAAA;AAIlC;MAEY,gCAAgC,CAAA;AAI5C;IAEW;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAE3B,IAAA,mBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,mBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AACnD,CAAC,EAPW,mBAAmB,KAAnB,mBAAmB,GAAA,EAAA,CAAA,CAAA;MASlB,kBAAkB,CAAA;AAI9B;MAEY,iBAAiB,CAAA;AAE7B;IAEW;AAAZ,CAAA,UAAY,2BAA2B,EAAA;AAEnC,IAAA,2BAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,2BAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC/B,CAAC,EAJW,2BAA2B,KAA3B,2BAA2B,GAAA,EAAA,CAAA,CAAA;MAM1B,cAAc,CAAA;AAK1B;MAEY,YAAY,CAAA;AAIxB;IAEW;AAAZ,CAAA,UAAY,WAAW,EAAA;AAEnB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EALW,WAAW,KAAX,WAAW,GAAA,EAAA,CAAA,CAAA;MAOV,oBAAoB,CAAA;AAKhC;;MCzFY,sBAAsB,CAAA;AAwBjC,IAAA,WAAA,CAAoB,IAAgB,EAAU,QAAkB,EAA4B,QAAgB,EAAA;QAAxF,IAAA,CAAA,IAAI,GAAJ,IAAI;QAAsB,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAsC,IAAA,CAAA,QAAQ,GAAR,QAAQ;QApB7F,IAAA,CAAA,YAAY,GAAW,EAAE;QACzB,IAAA,CAAA,SAAS,GAAW,EAAE;QACtB,IAAA,CAAA,UAAU,GAAW,EAAE;QACvB,IAAA,CAAA,YAAY,GAAW,EAAE;QACzB,IAAA,CAAA,oBAAoB,GAAW,EAAE;QACjC,IAAA,CAAA,SAAS,GAAW,EAAE;QACtB,IAAA,CAAA,YAAY,GAAW,EAAE;QACzB,IAAA,CAAA,eAAe,GAAW,EAAE;QAC5B,IAAA,CAAA,eAAe,GAAW,EAAE;QAC5B,IAAA,CAAA,mBAAmB,GAAW,EAAE;QAChC,IAAA,CAAA,mBAAmB,GAAW,EAAE;QAChC,IAAA,CAAA,YAAY,GAAW,EAAE;QACzB,IAAA,CAAA,SAAS,GAAY,KAAK;QAC1B,IAAA,CAAA,eAAe,GAAW,CAAC;QAC3B,IAAA,CAAA,eAAe,GAAsB,KAAK;AAEjD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAS,EAAE,CAAC;AAEpC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,EAAE,CAAC;AAG/B,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ;QAC3B,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,eAAe,CAAC;AAE1D,QAAA,IAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAI;AAC1B,YAAA,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC;QACpC;QACA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D;AAEA,IAAA,uBAAuB,CAAC,WAAmB,EAAA;AACzC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAC5B,QAAA,OAAO,cAAc,CACnB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,SAAA,EAAY,WAAW,MAAM,SAAS,CAAA,CAAE,CAAC,CAAC,IAAI,CAC3D,GAAG,CAAC,MAAM,IAAI,CAAC,EACf,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAC5B,CACF;IACH;IAEA,MAAM,aAAa,CAAC,WAAmB,EAAA;QACrC,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,yBAAyB;AAClF,cAAE;AACF,cAAE,CAAA,SAAA,EAAY,WAAW,CAAA,CAAE;QAE7B,MAAM,UAAU,GAAG,MAAM,cAAc,CACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA,EAAG,eAAe,MAAM,IAAI,CAAC,GAAG,EAAE,CAAA,CAAE,CAAC,CACpD;AAED,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;AAC/B,QAAA,OAAO,UAAU;IACnB;AAGA,IAAA,eAAe,CAAC,MAAc,EAAA;AAC5B,QAAA,IAAG,MAAM,IAAI,IAAI,EAAC;YAChB,OAAO,SAAS,CAAA,CAAA,yBAAA,CAA2B;QAC7C;aACI;YACF,OAAO,SAAS,CAAA,CAAA,6BAAA,CAA+B;QACjD;IACF;AAEA,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,IAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAC;AACrB,YAAA,OAAO,IAAI;QACf;AACK,aAAA,IAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAC;AAC/B,YAAA,OAAO,IAAI;QACb;aACK;YACH,OAAO,IAAI,CAAC,QAAQ;QACtB;IACF;IAEA,qBAAqB,GAAA;AAEnB,QAAA,MAAM,SAAS,GAAmB,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAC,EAAE,EAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAC,CAAC;AAChM,QAAA,OAAO,SAAS;IAClB;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,oBAAoB,EAAE;IACvC;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM;IACtC;IAEA,wBAAwB,GAAA;AACtB,QAAA,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,iBAAiB;IACjD;IAEA,gBAAgB,GAAA;AACd,QAAA,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,aAAa;IAC7C;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,UAAU;IACxB;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB;IACjC;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,aAAa,GAAA;AACf,QAAA,IAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAI;YAC1B,OAAO,IAAI,CAAC,QAAQ;QACtB;aACI;YACF,OAAO,IAAI,CAAC,WAAW;QACzB;IACF;AAEA,IAAA,IAAI,iBAAiB,GAAA;AACnB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,iBAAiB;IAC/C;AAEA,IAAA,IAAI,wBAAwB,GAAA;AAC1B,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,wBAAwB;IACtD;AAEA,IAAA,IAAI,6BAA6B,GAAA;AAC/B,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,aAAa,kBAAkB;IAChD;AAEA,IAAA,IAAI,kBAAkB,GAAA;QACpB,OAAO,IAAI,CAAC,mBAAmB;IACjC;AAEA,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAEA,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe;IAC7B;AAjLW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,oEAwByC,SAAS,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAxBxE,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cAFrB,MAAM,EAAA,CAAA,CAAA;;4FAEP,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAHlC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAyBoE,MAAM;2BAAC,SAAS;;;MCtBxE,oBAAoB,CAAA;IAoB/B,WAAA,CAAsB,UAAsB,EAAS,aAAqC,EAAA;QAApE,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,aAAa,GAAb,aAAa;QAlB3D,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,SAAS,GAAW,EAAE;QAEtB,IAAA,CAAA,oBAAoB,GAAW,IAAI;QACnC,IAAA,CAAA,gBAAgB,GAAW,KAAK;QAChC,IAAA,CAAA,cAAc,GAAW,KAAK;AAIrC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAc,IAAI,CAAC;AAChC,QAAA,IAAA,CAAA,eAAe,GAAE,MAAM,CAA8B,SAAS,CAAC;AAC/D,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAiC,SAAS,CAAC;AACtE,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAA6B,SAAS,CAAC;AAC9D,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAmC,SAAS,CAAC;AAExD,QAAA,IAAA,CAAA,WAAW,GAA2H,IAAI,YAAY,EAA4G;AAunBzQ,QAAA,IAAA,CAAA,uBAAuB,GAA6C;AAClE,YAAA,CAAC,wBAAwB,CAAC,IAAI,GAAG,CAAC;AAClC,YAAA,CAAC,wBAAwB,CAAC,SAAS,GAAG,CAAC;AACvC,YAAA,CAAC,wBAAwB,CAAC,UAAU,GAAG,CAAC;AACxC,YAAA,CAAC,wBAAwB,CAAC,KAAK,GAAG;SACnC;QAznBC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QACpE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;AAExE,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,GAAG,CAAC,MAAM,GAAG,OAAO;AACpB,YAAA,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;QACvB;AACA,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAC5B;YACE,SAAS,EAAE,aAAa,CAAC,cAAc;YACvC,SAAS,EAAE,aAAa,CAAC,cAAc;YACvC,aAAa,EAAE,aAAa,CAAC,kBAAkB;YAC/C,YAAY,EAAE,aAAa,CAAC,iBAAiB;YAC7C,wBAAwB,EAAE,aAAa,CAAC,6BAA6B;YACrE,aAAa,EAAE,aAAa,CAAC,kBAAkB;YAC/C,KAAK,EAAE,aAAa,CAAC,WAAW;AAChC,YAAA,oBAAoB,EAAE,IAAI;AAC1B,YAAA,YAAY,EAAE,IAAI;YAClB,mBAAmB,EAAE,aAAa,CAAC;AACpC,SAAA,CACF;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC;QAC9D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC;AAElE,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;YAC7B,IAAI,CAAC,mBAAmB,EAAE;QAC5B;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;QAE9B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAe,KAAI;AAC9C,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,YAAA,IAAG,KAAK;gBACN,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;;AAEpD,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;AAErC,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;AAC5B,gBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAE/G,YAAA,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,MAAK;AAE7B,gBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;AAC5B,oBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,wBAAwB,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAChH,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,sBAAsB,CAAC,KAAU,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACpB,QAAA,IAAG,KAAK;YACN,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC;;AAEpD,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;AAErC,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QAC/F;QACA,IAAI,CAAC,aAAa,EAAE;IACtB;IAEA,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE;AAEpB,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1F;IACF;AAEU,IAAA,MAAM,aAAa,GAAA;AAE3B,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;QAClG;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE;AAEf,YAAA,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE;AAClD,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;gBAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,EAAC,SAAS,CAAC;AAGrD,YAAA,IAAI,oBAAoB,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE;AACzD,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,0BAA0B,EAAC,oBAAoB,CAAC;AAC7E,gBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,mBAAmB,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;YAC1E;AAGA,YAAA,IAAG,CAAC,IAAI,CAAC,SAAS,EAAE,EAAC;AACnB,gBAAA,IAAI,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE;AAC/C,gBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,qBAAqB,EAAC,eAAe,CAAC;AACnE,oBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChE;YACF;QACF;aACK;AACH,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;AACnC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;QACxC;AAEA,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,EAAC,CAAC;IACpH;AAGA,IAAA,MAAM,qBAAqB,CAAC,cAAA,GAAsB,KAAK,EAAA;AACrD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;AAC3B,YAAA,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC;AAClE,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,YAAA,OAAO,SAAS;QAClB;QAEA,IAAI,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE;AACrE,YAAA,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC;AAC9E,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI;YACF,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAA,kBAAA,CAAoB;AACrE,YAAA,MAAM,MAAM,GAAG,IAAI,UAAU;iBAC1B,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;iBACtC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YAE7C,MAAM,UAAU,GAAG,MAAM,cAAc,CACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAqB,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAC3D,OAAO,CAAC,cAAc,CAAC,EAAC,KAAK,CAAC;AAC5B,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,cAAc,EAAE;aACjB,CAAC,CACH,CACF;AAED,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;AACvC,YAAA,OAAO,UAAU;QAEnB;QACA,OAAO,KAAU,EAAE;AACjB,YAAA,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AACpD,YAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;AACtC,YAAA,MAAM,KAAK;QACb;IACF;AAEA,IAAA,MAAM,YAAY,GAAA;QAChB,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,OAAA,CAAS;AAErE,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAyB,MAAM,cAAc,CACvD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAwB,GAAG,EAAE;AAC9C,gBAAA,MAAM,EAAE;AACN,oBAAA,SAAS,EAAE,iBAAiB;AAC5B,oBAAA,UAAU,EAAE,MAAM;AAClB,oBAAA,SAAS,EAAE;AACZ;aACF,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAC,KAAK,CAAC;AAC3B,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,cAAc,EAAE;aACjB,CAAC,CAAC,CACJ;YAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAe,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAEpG,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;AAEjC,YAAA,OAAO,aAAa;QAEtB;QACA,OAAO,KAAS,EAAE;AAChB,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AAEpB,YAAA,MAAM,KAAK;QACb;IACF;AAEA,IAAA,MAAM,iBAAiB,CAAC,cAAA,GAAsB,KAAK,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE;AAC/D,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;gBACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAC,OAAO,CAAC;YACrD;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI,GAAoB;AACxB,QAAA,IAAI,cAA+B;AACnC,QAAA,IAAG,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,EAAC;AACxC,YAAA,IAAG,IAAI,CAAC,eAAe,EAAE,EAAE,oBAAoB,EAAC;gBAC9C,IAAI,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE;gBACxE,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;AACrE,gBAAA,IAAG,CAAC,WAAW,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,EAAC;oBAClF,cAAc,GAAG,WAAW;gBAC9B;AACA,gBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,oBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,sBAAsB,EAAC,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC;gBACjG;YAEF;AACA,YAAA,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,SAAA,EAAY,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,wEAAwE;QAC3K;AACK,aAAA,IAAG,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,EAAC;AAC7C,YAAA,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,aAAA,EAAgB,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,wEAAwE;QAC/K;AACK,aAAA,IAAG,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAC;AAC3C,YAAA,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,WAAA,EAAc,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,wEAAwE;QAC7K;QACA,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE;gBACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,CAAC;YACrD;AACA,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI;AAEF,YAAA,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE;YAC/B,IAAG,cAAc,EAAC;gBAChB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,cAAc,CAAC;YACzD;AAEA,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAG,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,SAAS,EAAE,OAAO,CAAC;YACtD;AAEA,YAAA,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAoB,GAAG,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CACpE,OAAO,CAAC,cAAc,CAAC,CACxB,CACF;AAED,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,EAAE,MAAM,CAAC;YACpD;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACrC,gBAAA,OAAO,SAAS;YAClB;YACA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC7B,MAAM,eAAe,GAAI,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,EAAE,EAAE;AAC3D,gBAAA,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClB,gBAAA,IAAI,EAAE;AACP,aAAA,CAAC;AAEF,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC;AAExC,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,CAAC;YACrE;AAEA,YAAA,OAAO,eAAe;QAExB;QAAE,OAAO,KAAU,EAAE;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC;AAClC,YAAA,OAAO,SAAS;QAClB;IACF;IAKO,MAAM,MAAM,CAAC,WAAmB,EAAA;AACrC,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,WAAW,CAAC;QACpC;QACA,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAE,CAAC,MAAW,KAAI;AAE7G,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5E,YAAA,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;AAC1B,QAAA,CAAC,CAAC;AACF,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC9E;AACA,QAAA,OAAO,MAAM;IACf;AAEO,IAAA,MAAM,cAAc,GAAA;QACzB,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,sBAAsB,EAAE,IAAI,IAAI;AAChE,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC3E;AACA,QAAA,OAAO,KAAK;IACd;AAIO,IAAA,MAAM,YAAY,GAAA;AACvB,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC7B;AACA,QAAA,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,KAAU,KAAI;AAEhE,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,gBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;YACnF;AACA,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AAC9B,QAAA,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC,MAAW,KAAI;AAExB,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;AAClF,YAAA,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC;AAC1B,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QACpF;AACA,QAAA,OAAO,MAAM;IACf;AAEO,IAAA,gBAAgB,CAAC,KAAW,EAAA;AACjC,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7E;IACF;AAEO,IAAA,MAAM,oBAAoB,GAAA;AAC/B,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1E;QACA,IAAI,MAAM,GAAI,MAAM,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE;AAExD,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QACpF;AACA,QAAA,OAAO,MAAM;IACf;AAIO,IAAA,MAAM,OAAO,GAAA;AAClB,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QAC7D;AACA,QAAA,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE;IAC9C;AAEO,IAAA,MAAM,eAAe,GAAA;AAC1B,QAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAC;AAC7B,YAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;QACrE;IACF;IAEA,mBAAmB,GAAA;AACjB,QAAA,IAAG,IAAI,CAAC,OAAO,EAAC;YASd,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,MAAK;AACvC,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;AAClC,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAK;AAC9C,gBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AACzC,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAK;AAC7C,gBAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;AACrC,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,KAAY,KAAI;AACvD,gBAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;AAC7C,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAK;AACxC,gBAAA,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACnD,gBAAA,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC;AAG9C,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAK;AAC3C,gBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;AAC3C,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC,MAAK;AAC7C,gBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;AAC7C,YAAA,CAAC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,MAAK;AAChD,gBAAA,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;AAChD,YAAA,CAAC,CAAC;QACJ;IACF;IAIO,eAAe,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO;IACrD;IAEO,2BAA2B,GAAA;AAChC,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC;IAC1M;IAEO,iCAAiC,GAAA;AACtC,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IAChP;IAEO,+BAA+B,GAAA;QACpC,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC;IAChK;IAEO,qCAAqC,GAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IACtM;IAEO,sCAAsC,GAAA;QAC3C,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IACxJ;IAEO,uBAAuB,GAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC;IAC1M;IAEO,iCAAiC,GAAA;QACtC,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,oBAAoB,CAAC;IACnH;IAEO,6BAA6B,GAAA;AAClC,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,kBAAkB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,mBAAmB,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IAChP;IAEO,2BAA2B,GAAA;QAChC,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC;IAC7G;IAEO,iCAAiC,GAAA;QACtC,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,cAAc,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IACnJ;IAEO,yBAAyB,GAAA;QAC9B,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC;IAC3G;IAEO,+BAA+B,GAAA;QACpC,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IACjJ;IAEO,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,2BAA2B,EAAE,IAAI,IAAI,CAAC,2BAA2B,EAAE,IAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC;IAChJ;IAEO,wBAAwB,GAAA;QAC7B,OAAO,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,2BAA2B,EAAE,IAAI,IAAI,CAAC,2BAA2B,EAAE,IAAG,IAAI,CAAC,yBAAyB,EAAE,CAAC,IAAI,IAAI,CAAC,yBAAyB,EAAE;IACpL;IAEO,yBAAyB,GAAA;QAC9B,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC;IACpJ;IAEO,0BAA0B,GAAA;QAC/B,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe,EAAE,EAAE,aAAa,CAAC;IAC5G;IAEO,YAAY,GAAA;AACjB,QAAA,IAAG,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,YAAY,EAAC;YAClG,OAAO,wBAAwB,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,YAAqD,CAAC;QAChH;AACA,QAAA,OAAO,SAAS;IAClB;IAEO,qBAAqB,GAAA;QAC1B,IAAI,uBAAuB,GAAG,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAC1E,IAAG,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAC;AAC/D,YAAA,OAAO,IAAI;QACb;aACI;AACF,YAAA,OAAO,KAAK;QACd;IACF;IAEO,qBAAqB,GAAA;QAC1B,IAAI,uBAAuB,GAAG,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;AAC1E,QAAA,OAAO,uBAAuB;IAChC;IAEO,MAAM,qBAAqB,CAAC,uBAAoC,EAAA;QACrE,IAAG,uBAAuB,EAAC;AACzB,YAAA,YAAY,CAAC,OAAO,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;AACrE,YAAA,IAAI,UAAU,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE;AACnD,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,QAAQ;gBAC5B,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,WAAW,EAAE,UAAU,CAAC;QACjE;aACI;YACF,IAAI,CAAC,wBAAwB,EAAE;QAEjC;IACF;IAEO,wBAAwB,GAAA;AAC7B,QAAA,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC;IACjD;IAEO,iBAAiB,GAAA;QACtB,IAAI,mBAAmB,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAClE,IAAG,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAC;AACvD,YAAA,OAAO,IAAI;QACb;aACI;AACF,YAAA,OAAO,KAAK;QACd;IACF;IAEO,iBAAiB,GAAA;QACtB,IAAI,mBAAmB,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAClE,QAAA,OAAO,mBAAmB;IAC5B;AAEO,IAAA,iBAAiB,CAAC,mBAAgC,EAAA;QACvD,IAAG,mBAAmB,EAAC;AACrB,YAAA,YAAY,CAAC,OAAO,CAAC,kBAAkB,EAAE,mBAAmB,CAAC;QAC/D;aACI;YACF,IAAI,CAAC,oBAAoB,EAAE;QAC7B;IACF;IAEO,oBAAoB,GAAA;AACzB,QAAA,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC;IAC7C;IAEO,eAAe,GAAA;QACpB,IAAI,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC9D,IAAG,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAC;AACnD,YAAA,OAAO,IAAI;QACb;aACI;AACF,YAAA,OAAO,KAAK;QACd;IACF;IAEO,eAAe,GAAA;QACpB,IAAI,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAC9D,QAAA,OAAO,iBAAiB;IAC1B;AAEO,IAAA,eAAe,CAAC,iBAA8B,EAAA;QACnD,IAAG,iBAAiB,EAAC;AACnB,YAAA,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;QAC3D;aACI;YACF,IAAI,CAAC,kBAAkB,EAAE;QAC3B;IACF;IAEO,kBAAkB,GAAA;AACvB,QAAA,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC;IAC3C;IAEO,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW;IACxC;AAEA,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,IAAI,EAAE;IACxC;AAEA,IAAA,IAAW,mBAAmB,GAAA;QAC5B,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,YAAY,IAAI,EAAE,EAAE;IAChF;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,EAAC;YACb,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU;AACxC,YAAA,IAAG,UAAU;AACX,gBAAA,OAAO,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACtC;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAW,eAAe,GAAA;AACxB,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,EAAC;YACb,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU;AACxC,YAAA,IAAG,UAAU;gBACX,OAAO,IAAI,IAAI,CAAC,CAAC,UAAU,GAAE,GAAG,IAAI,IAAI,CAAC;QAC7C;AACA,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,IAAW,cAAc,GAAA;AACvB,QAAA,IAAG,IAAI,CAAC,IAAI,EAAE,EAAC;YACb,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,UAAU;AACxC,YAAA,IAAG,UAAU;gBACX,OAAO,UAAU,IAAI,GAAG;QAC5B;AACA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,WAAW,CAAC,KAAS,EAAA;QACnB,IAAI,YAAY,GAAG,EAAE;AACrB,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAC;AAE5C,YAAA,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK;QAClC;aACK,IAAG,KAAK,IAAI,KAAK,CAAC,KAAK,YAAY,UAAU,EAAE;AAEhD,YAAA,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO;QACtC;aACK;YAEH,YAAY,GAAG,CAAA,YAAA,EAAe,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,OAAO,CAAA,CAAE;QACzE;AAEA,QAAA,IAAI,UAAU,GAAW,sCAAsC,CAAC,YAAY,CAAC;QAC7E,IAAG,UAAU,EAAC;YACZ,QAAQ,CAAC,MAAM,EAAE;QACnB;AACA,QAAA,OAAO,IAAI,KAAK,CAAC,YAAY,CAAC;IAChC;IAUA,yBAAyB,CAAC,eAA+B,EAAE,QAAA,GAAgD,SAAS,EAAE,YAAA,GAAwC,wBAAwB,CAAC,IAAI,EAAA;AACzL,QAAA,IAAI,KAAK,IAAI,eAAe,CAAC,kBAAkB;AACjC,YAAA,eAAe,CAAC,mBAAmB;aAClC,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;QAC9E,IAAG,CAAC,KAAK,EAAC;AACR,YAAA,KAAK,GAAG,eAAe,CAAC,cAAc,IAAI,KAAK;YAC/C,IAAG,KAAK,EAAC;AACP,gBAAA,IAAI,gBAAgB,GAAG,wBAAwB,CAAC,IAAI;AACpD,gBAAA,IAAG,eAAe,CAAC,YAAY,EAAC;AAC9B,oBAAA,gBAAgB,GAAG,wBAAwB,CAAC,eAAe,CAAC,YAAqD,CAAC;gBACpH;AACA,gBAAA,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;YACtG;QACF;QACA,IAAG,QAAQ,EAAC;AACV,YAAA,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1B;QACA,OAAO,KAAK,IAAI,KAAK;IACvB;AAEA,IAAA,uBAAuB,CAAC,eAA+B,EAAE,QAAA,GAAgD,SAAS,EAAA;AAChH,QAAA,IAAI,KAAK,IAAI,eAAe,CAAC,kBAAkB;AACjC,YAAA,eAAe,CAAC,mBAAmB;aAClC,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;QAC9E,IAAG,QAAQ,EAAC;AACV,YAAA,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1B;QACA,OAAO,KAAK,IAAI,KAAK;IACvB;AAEA,IAAA,wBAAwB,CAAC,eAA+B,EAAE,QAAA,GAAgD,SAAS,EAAA;AACjH,QAAA,IAAI,KAAK,IAAI,eAAe,CAAC,mBAAmB;aACjC,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;QAC9E,IAAG,QAAQ,EAAC;AACV,YAAA,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1B;QACA,OAAO,KAAK,IAAI,KAAK;IACvB;AAEA,IAAA,uBAAuB,CAAC,eAA+B,EAAE,QAAA,GAAgD,SAAS,EAAA;QAChH,IAAI,KAAK,IAAI,eAAe,CAAC,YAAY,IAAI,eAAe,CAAC,aAAa,CAAC;QAC3E,IAAG,QAAQ,EAAC;AACV,YAAA,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1B;QACA,OAAO,KAAK,IAAI,KAAK;IACvB;AAEA,IAAA,4BAA4B,CAAC,eAA+B,EAAE,QAAA,GAAgD,SAAS,EAAA;AACrH,QAAA,IAAI,KAAK,GAAG,eAAe,CAAC,aAAa;QACzC,IAAG,CAAC,KAAK,EAAC;AACR,YAAA,IAAI,gBAAgB,GAAG,CAAC,eAAe,CAAC,YAAY,IAAI,KAAK,MAAM,eAAe,CAAC,cAAc,IAAI,KAAK,CAAC;YAC3G,IAAG,gBAAgB,EAAC;AAClB,gBAAA,IAAI,gBAAgB,GAAG,wBAAwB,CAAC,IAAI;AACpD,gBAAA,IAAG,eAAe,CAAC,YAAY,EAAC;AAC9B,oBAAA,gBAAgB,GAAG,wBAAwB,CAAC,eAAe,CAAC,YAAqD,CAAC;gBACpH;AACA,gBAAA,KAAK,IAAI,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAC1H;QACF;QACA,IAAG,QAAQ,EAAC;AACV,YAAA,QAAQ,CAAC,KAAK,IAAI,KAAK,CAAC;QAC1B;QACA,OAAO,KAAK,IAAI,KAAK;IACvB;+GA/sBW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;AAqtBK,SAAU,sCAAsC,CAAC,YAAmB,EAAA;IACxE,IAAI,UAAU,GAAW,KAAK;AAE9B,IAAA,IAAG,YAAY,KACb,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,IAAI,CAAC;AACvE,QAAA,YAAY,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,CACpE,EAAC;QAGA,IAAI,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;QAC9D,IAAG,WAAW,EAAC;AACb,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,WAAW,CAAC;AAC1D,YAAA,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC;YAC/C,UAAU,GAAG,IAAI;QACnB;QAEA,IAAI,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACzD,IAAG,UAAU,EAAC;AACZ,YAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,UAAU,CAAC;AACrD,YAAA,YAAY,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAC3C,UAAU,GAAG,IAAI;QACnB;QAEA,IAAI,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACrD,IAAG,QAAQ,EAAC;AACV,YAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,QAAQ,CAAC;AACjD,YAAA,YAAY,CAAC,UAAU,CAAC,gBAAgB,CAAC;YACzC,UAAU,GAAG,IAAI;QACnB;IACF;AAEA,IAAA,OAAO,UAAU;AACnB;;MCrvBa,oBAAoB,CAAA;AAI7B,IAAA,WAAA,CAAsB,aAAqC,EAAA;QAArC,IAAA,CAAA,aAAa,GAAb,aAAa;IAEnC;IAEA,SAAS,CAAC,GAAqB,EAAE,IAAiB,EAAA;AAG9C,QAAA,IAAG,IAAI,CAAC,aAAa,EAAE,oBAAoB,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAC;AACrG,YAAA,IAAG,IAAI,CAAC,WAAW,KAAK,SAAS,EAAC;AAC9B,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC;YAC/E;YAEA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,EAAC;AACrC,gBAAA,OAAO,CAAC,GAAG,CAAC,EAAC,GAAG,EAAE,gCAAgC,EAAE,OAAO,EAAE,GAAG,EAAC,CAAC;YACtE;AAOA,YAAA,MAAM,QAAQ,GAAW,IAAI,CAAC,aAAa,CAAC,eAAe;AAE3D,YAAA,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;AAC1C,gBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ;AAC9C,iBAAA,CAAC;YACN;AACA,YAAA,IAAI,QAAQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AAC7C,gBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACd,oBAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS;AACrE,iBAAA,CAAC;YACN;YACA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC,EAAC;AACrC,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YACpB;YACA,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAC;AACtD,gBAAA,IAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;AAChC,oBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC;wBACpC,OAAO,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,kCAAkC,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAC,CAAE;AACrR,oBAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAC7C,SAAS,CAAC,CAAC,IAAI,KAAI;AACf,wBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC;4BACpC,OAAO,CAAC,GAAG,CAAC,EAAC,GAAG,EAAE,kCAAkC,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAC,CAAE;wBACzR,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,EAAE,mBAAmB,IAAI,EAAE,CAAC,EAAC,CAAC;wBAGzG,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAC;4BAC/F,IAAI,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE;4BACtE,IAAG,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAC;gCAC7D,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,EAAC,CAAC;4BAC1F;wBACJ;wBAGA,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;4BACvF,IAAI,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;4BAC9D,IAAG,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAC;gCACrD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAC,CAAC;4BAClF;wBACJ;wBAGA,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAC;4BACnF,IAAI,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;4BAC1D,IAAG,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAC;gCACjD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAC,CAAC;4BAC9E;wBACJ;AAEA,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;oBACvB,CAAC,CAAC,CACT;gBACL;qBACI;AACA,oBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,EAAC,GAAG,EAAE,mBAAmB,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAC,CAAE;oBACrQ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;wBACnC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAC,CAAC;oBAC5G;oBAEA,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,oBAAoB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAC;wBAC/F,IAAI,uBAAuB,GAAG,IAAI,CAAC,WAAW,CAAC,qBAAqB,EAAE;wBACtE,IAAG,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAC;4BAC7D,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,uBAAuB,CAAC,EAAC,CAAC;wBAC1F;oBACJ;oBAEA,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAC;wBACvF,IAAI,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;wBAC9D,IAAG,mBAAmB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAC;4BACrD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,mBAAmB,CAAC,EAAC,CAAC;wBAClF;oBACJ;oBAGA,IAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAC;wBACnF,IAAI,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;wBAC1D,IAAG,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAC;4BACjD,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAC,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAC,CAAC;wBAC9E;oBACJ;AACA,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC3B;YACJ;iBACI;AACA,gBAAA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,EAAC,GAAG,EAAE,uBAAuB,EAAE,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAC,CAAE;AACzQ,gBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAC3B;QACJ;aACI;AACA,YAAA,IAAG,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,CAAC;AACpC,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAG,GAAG,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B;IACJ;+GAxHS,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;;MCFY,iBAAiB,CAAA;IAK1B,WAAA,CAAsB,UAAsB,EAAS,WAAiC,EAAA;QAAhE,IAAA,CAAA,UAAU,GAAV,UAAU;QAAqB,IAAA,CAAA,WAAW,GAAX,WAAW;IAChE;AAEA,IAAA,aAAa,CAAC,OAA2B,EAAA;AAErC,QAAA,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;AAE5B,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AAE3B,YAAA,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,MAAK;AAC7B,gBAAA,IAAI,eAAe,GAAG,CAAA,UAAA,EAAa,OAAO,CAAC,KAAK,EAAE;AAClD,gBAAA,IAAG,IAAI,CAAC,aAAa,EAAC;AACpB,oBAAA,eAAe,IAAI,CAAA,eAAA,EAAkB,IAAI,CAAC,aAAa,EAAE;gBAC3D;gBACF,IAAI,CAAC,eAAe,CAAU,eAAe,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAG;AAC3D,oBAAA,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;wBAC1B,IAAG,MAAM,EAAC;AAEN,4BAAA,OAAO,CAAC;AACJ,gCAAA,eAAe,EAAE;AAClB,6BAAA,CAAC;wBACR;6BAAM;4BAEF,OAAO,CAAC,IAAI,CAAC;wBACjB;AACJ,oBAAA,CAAC,CAAC;AACJ,gBAAA,CAAC,CAAC;oBACF,CAAC,GAAO,KAAI;AACR,wBAAA,OAAO,CAAC,EAAC,eAAe,EAAE,IAAI,EAAC,CAAC;AAClC,oBAAA,CAAC;YACT,CAAC,EAAE,IAAI,CAAC;AAER,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,MAAM,eAAe,CAAI,kBAA0B,EAAE,EAAE,iBAAyB,KAAK,EAAA;AACnF,QAAA,OAAO,CAAC,GAAG,CAAC,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,wBAAA,EAA2B,eAAe,CAAA,CAAE,CAAC;AACrH,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,wBAAA,EAA2B,eAAe,EAAE;AACrI,aAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC1D,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACzC;AAEA,IAAA,WAAW,CAAC,KAAS,EAAA;QACnB,IAAI,YAAY,GAAG,EAAE;AACrB,QAAA,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAC;AAE5C,YAAA,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK;QAClC;aACK,IAAG,KAAK,IAAI,KAAK,CAAC,KAAK,YAAY,UAAU,EAAE;AAEhD,YAAA,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO;QACtC;aACK;YAEH,YAAY,GAAG,CAAA,YAAA,EAAe,KAAK,CAAC,MAAM,cAAc,KAAK,CAAC,OAAO,CAAA,CAAE;QACzE;AAEA,QAAA,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC;IACvC;AAEA,IAAA,MAAM,6BAA6B,CAAC,QAAgB,EAAE,aAAsB,EAAA;AAC1E,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;QAChC,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC;QAC5C;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,yBAAA,EAA4B,MAAM,EAAE;AAE5G,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/D,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK;AACxB,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACf,gBAAA,GAAG,CAAC,OAAO,GAAG,SAAS,CAAA,2DAA2D;AAClF,gBAAA,OAAO,GAAG;YACZ;iBAAO;gBACL,MAAM,SAAS,CAAA,CAAA,oDAAA,CAAsD;YACvE;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,YAAA,MAAM,oCAAoC;QAC5C;IACF;AAEA,IAAA,MAAM,sCAAsC,CAAC,UAAkB,EAAE,QAAgB,EAAE,aAAsB,EAAA;AACvG,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;QAChC,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC;QAC5C;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,SAAA,EAAY,UAAU,CAAA,kBAAA,EAAqB,MAAM,EAAE;AAE3H,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/D,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK;AACxB,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACf,gBAAA,GAAG,CAAC,OAAO,GAAG,SAAS,CAAA,2DAA2D;AAClF,gBAAA,OAAO,GAAG;YACZ;iBAAO;gBACL,MAAM,SAAS,CAAA,CAAA,oDAAA,CAAsD;YACvE;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,YAAA,MAAM,oCAAoC;QAC5C;IACF;AAEA,IAAA,MAAM,oCAAoC,CAAC,QAAgB,EAAE,QAAgB,EAAE,aAAsB,EAAA;AACnG,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE;AACpC,QAAA,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;QAChC,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC;QAC5C;AAEA,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAA,OAAA,EAAU,QAAQ,CAAA,kBAAA,EAAqB,MAAM,EAAE;AAEvH,QAAA,IAAI;AACF,YAAA,MAAM,GAAG,GAAQ,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE/D,YAAA,GAAG,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK;AACxB,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACf,gBAAA,GAAG,CAAC,OAAO,GAAG,SAAS,CAAA,2DAA2D;AAClF,gBAAA,OAAO,GAAG;YACZ;iBAAO;gBACL,MAAM,SAAS,CAAA,CAAA,oDAAA,CAAsD;YACvE;QACF;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;AACpB,YAAA,MAAM,oCAAoC;QAC5C;IACF;+GA1IS,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAAjB,iBAAiB,EAAA,CAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;MCIY,mBAAmB,CAAA;AAE9B,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,mBAAmB;AAC7B,YAAA,SAAS,EAAE;AACT,gBAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAC;gBACzG;AACD;SACF;IACH;+GAVW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;gHAAnB,mBAAmB,EAAA,YAAA,EAAA,CALf,sBAAsB,CAAA,EAAA,OAAA,EAAA,CAG3B,sBAAsB,CAAA,EAAA,CAAA,CAAA;gHAErB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,sBAAsB,CAAC;AACtC,oBAAA,OAAO,EAAE,EACR;oBACD,OAAO,EAAE,CAAC,sBAAsB;AACjC,iBAAA;;;MCHY,uBAAuB,CAAA;IAElC,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AACtC,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,QAAA,OAAO,KAAK;IACd;+GAdW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCCY,qBAAqB,CAAA;IAEhC,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;QAEtD,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,UAAU,CAAU,CAAC,QAAQ,KAAI;YAC1C,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC,KAAc,KAAI;gBACzE,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AAC/C,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;qBAAO;oBACL,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;wBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;oBACpC;AACA,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;+GA/BW,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;4FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAsCY,mBAAmB,CAAA;IAE9B,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;QAEtD,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,UAAU,CAAU,CAAC,QAAQ,KAAI;YAC1C,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC,KAAc,KAAI;gBACvE,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AAC/C,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;qBAAO;oBACL,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;wBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;oBACpC;AACA,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;+GA/BW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;4FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAsCY,oBAAoB,CAAA;IAE/B,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;QAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;QAEtD,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,UAAU,CAAU,CAAC,QAAQ,KAAI;YAC1C,IAAI,CAAC,WAAW,CAAC,4BAA4B,CAAC,WAAW,EAAE,CAAC,KAAc,KAAI;gBAC5E,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AAC/C,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;qBAAO;oBACL,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;wBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;oBACpC;AACA,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;+GA/BW,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cAFnB,MAAM,EAAA,CAAA,CAAA;;4FAEP,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAuCY,uBAAuB,CAAA;IAClC,WAAA,CACU,MAAc,EACd,WAAiC,EAAA;QADjC,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,WAAW,GAAX,WAAW;IAClB;IAEH,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;QAG1B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;QAEtD,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;gBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YACpC;AACA,YAAA,OAAO,KAAK;QACd;AAGA,QAAA,OAAO,IAAI,UAAU,CAAU,CAAC,QAAQ,KAAI;YAC1C,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,WAAW,EAAE,CAAC,KAAc,KAAI;gBAEzE,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;AAC/C,oBAAA,IAAI,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,EAAE;wBAChD,MAAM,uBAAuB,GAAG,YAAY,CAAC,OAAO,CAAC,sBAAsB,CAAC;wBAE5E,IAAI,uBAAuB,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AACjE,4BAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;4BACnB,QAAQ,CAAC,QAAQ,EAAE;wBACrB;6BAAO;AACL,4BAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC;AAChD,4BAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;4BACpB,QAAQ,CAAC,QAAQ,EAAE;wBACrB;oBACF;yBAAO;AACL,wBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;wBACnB,QAAQ,CAAC,QAAQ,EAAE;oBACrB;gBACF;qBAAO;oBACL,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;wBACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;oBACpC;AACA,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;oBACpB,QAAQ,CAAC,QAAQ,EAAE;gBACrB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;+GAjDW,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cAFtB,MAAM,EAAA,CAAA,CAAA;;4FAEP,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAHnC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MC/GY,0BAA0B,CAAA;IAErC,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,EAAE;AACzC,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;YACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACpC;AAEA,QAAA,OAAO,KAAK;IACd;+GAjBW,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;;4FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAyBY,mCAAmC,CAAA;IAE9C,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,2BAA2B,EAAE,EAAE;AAClD,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;YACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACpC;AAEA,QAAA,OAAO,KAAK;IACd;+GAjBW,mCAAmC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mCAAmC,cAFlC,MAAM,EAAA,CAAA,CAAA;;4FAEP,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;MAyBY,iCAAiC,CAAA;IAE5C,WAAA,CAAoB,MAAc,EAAU,WAAiC,EAAA;QAAzD,IAAA,CAAA,MAAM,GAAN,MAAM;QAAkB,IAAA,CAAA,WAAW,GAAX,WAAW;IAA0B;IAEjF,WAAW,CACT,IAA4B,EAC5B,KAA0B,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,yBAAyB,EAAE,EAAE;AAChD,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE;YACvC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QACpC;AAEA,QAAA,OAAO,KAAK;IACd;+GAjBW,iCAAiC,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAAD,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cAFhC,MAAM,EAAA,CAAA,CAAA;;4FAEP,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAH7C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACxDK,SAAU,6BAA6B,CAAE,MAAW,EAAE,WAAqB,EAAA;AAC7E,IAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;QAC7B,IAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC;AAC1B,YAAA,IAAG,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,EAAC;AAC7C,gBAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D;YACA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC7E;IACF;AACJ;AAEM,SAAU,uBAAuB,CAAE,MAAW,EAAE,WAAqB,EAAA;AACzE,IAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;QAC7B,IAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC;AAC1B,YAAA,IAAG,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,EAAC;AAC7C,gBAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D;YAEA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAG9C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;QAC7E;IACF;AACF;AAEM,SAAU,gCAAgC,CAAE,MAAW,EAAE,WAAqB,EAAA;AAClF,IAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;QAC7B,IAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAC;AAC1B,YAAA,IAAG,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,EAAC;AAC7C,gBAAA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D;YAEA,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5E,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QAG7C;IACF;AACF;AAEM,SAAU,eAAe,CAAC,KAAW,EAAE,KAAU,EAAA;IACrD,IAAG,KAAK,EAAC;AACP,QAAA,IAAG,EAAE,KAAK,YAAY,IAAI,CAAC,EAAC;AAC1B,YAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;QACzB;QAEA,IAAG,KAAK,EAAC;AACP,YAAA,IAAG,EAAE,KAAK,YAAY,IAAI,CAAC,EAAC;AAC1B,gBAAA,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YACzB;AACA,YAAA,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;YAC3B,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACtC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;AAC9B,YAAA,OAAO,KAAK;QACd;IACF;AACA,IAAA,OAAO,SAAS;AAClB;SAGgB,iCAAiC,CAAW,WAAgB,EAAE,uBAA4B,EAAE,KAAyB,EAAA;IACnI,IAAI,MAAM,GAAO,IAAW;AAC5B,IAAA,IAAI,gBAAkC;IAEtC,IAAG,WAAW,EAAC;QACb,QAAO,uBAAuB;YAC5B,KAAK,UAAU,EAAE;AACf,gBAAA,IAAG,KAAK;oBACN,gBAAgB,GAAG,CAAC,CAAC,CAAA,EAAG,KAAK,YAAY,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA,EAAG,KAAK,CAAA,SAAA,CAAW,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;;oBAEpJ,gBAAgB,GAAG,CAAC,CAAC,CAAA,SAAA,CAAW,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;gBACpI;YACF;YACA,KAAK,aAAa,EAAE;AAClB,gBAAA,IAAG,KAAK;oBACN,gBAAgB,GAAG,CAAC,CAAC,CAAA,EAAG,KAAK,YAAY,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA,EAAG,KAAK,CAAA,SAAA,CAAW,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;;oBAErJ,gBAAgB,GAAG,CAAC,CAAC,CAAA,SAAA,CAAW,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;gBACrI;YACF;YACA,KAAK,YAAY,EAAE;AACjB,gBAAA,IAAG,KAAK;oBACN,gBAAgB,GAAG,CAAC,CAAA,EAAG,KAAK,CAAA,UAAA,CAAY,EAAE,uBAAuB,EAAE,WAAW,CAAC;;oBAE/E,gBAAgB,GAAG,CAAC,CAAA,SAAA,CAAW,EAAE,uBAAuB,EAAE,WAAW,CAAC;gBACxE;YACF;YACA,KAAK,UAAU,EAAE;AACf,gBAAA,IAAG,KAAK;oBACN,gBAAgB,GAAG,CAAC,CAAA,EAAG,KAAK,CAAA,SAAA,CAAW,EAAE,uBAAuB,EAAE,WAAW,CAAC;;oBAE9E,gBAAgB,GAAG,CAAC,CAAA,QAAA,CAAU,EAAE,uBAAuB,EAAE,WAAW,CAAC;gBACvE;YACF;YACA,SAAS;gBACP;YACF;;IAEN;IAEE,IAAG,CAAC,gBAAgB,EAAC;QACnB,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;IACrF;AAEA,IAAA,OAAO,gBAAgB;AACzB;AAGM,SAAU,4BAA4B,CAAW,WAAgB,EAAE,uBAA4B,EAAE,KAAuB,EAAE,cAAgC,EAAA;IAC9J,IAAI,MAAM,GAAO,IAAW;AAC5B,IAAA,IAAI,gBAAkC;IAEtC,IAAG,WAAW,EAAC;QACb,QAAO,uBAAuB;YAC5B,KAAK,GAAG,EAAE;AACR,gBAAA,gBAAgB,GAAG,CAAC,CAAC,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;gBAC1F;YACF;YACA,KAAK,IAAI,EAAE;AACT,gBAAA,gBAAgB,GAAG,CAAC,CAAC,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,uBAAuB,EAAE,WAAW,CAAC,CAAC;gBAC1F;YACF;YACA,KAAK,GAAG,EAAE;AAER,gBAAA,gBAAgB,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,uBAAuB,EAAE,WAAW,CAAC;gBACxF;YACF;YACA,KAAK,GAAG,EAAE;AAER,gBAAA,gBAAgB,GAAG,CAAC,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,EAAE,uBAAuB,EAAE,WAAW,CAAC;gBACxF;YACF;YACA,SAAS;gBACP;YACF;;IAEN;IAEE,IAAG,CAAC,gBAAgB,EAAC;QACnB,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;IACrF;AAGA,IAAA,OAAO,gBAAgB;AACzB;AAEM,SAAU,UAAU,CAAC,kBAA0B,EAAE,QAAgB,EAAA;AACrE,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG;AACjD,IAAA,OAAO,WAAW,kBAAkB,CAAA,sBAAA,EAAyB,KAAK,CAAA,EAAG,QAAQ,EAAE;AACjF;SAEgB,kBAAkB,CAAC,kBAAoC,EAAE,iBAAmC,EAAE,QAA0B,EAAA;AACtI,IAAA,IAAG,kBAAkB,IAAI,iBAAiB,IAAI,QAAQ,EAAC;QACrD,OAAO,UAAU,CAAC,kBAAkB,EAAE,iBAAiB,GAAG,QAAQ,CAAC;IACrE;AACA,IAAA,OAAO,oCAAoC;AAC7C;;MCzKa,YAAY,CAAA;AAIxB;;MCJY,SAAS,CAAA;AAIrB;;MCJY,OAAO,CAAA;AAiBnB;MAEY,YAAY,CAAA;AAexB;MAEY,WAAW,CAAA;AAgBvB;MAEY,iBAAiB,CAAA;AAoB7B;;MC1EY,gBAAgB,CAAA;AAe5B;MAEY,kBAAkB,CAAA;AAG9B;;ICMa;AAAZ,CAAA,UAAY,SAAS,EAAA;AACnB,IAAA,SAAA,CAAA,cAAA,CAAA,GAAA,YAA2B;AAC3B,IAAA,SAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAJW,SAAS,KAAT,SAAS,GAAA,EAAA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"mobicloud-core.mjs","sources":["../../src/lib/mobicloud-core.component.ts","../../src/lib/types/mobi-user-profile.ts","../../src/lib/types/application-details.ts","../../src/lib/services/mobicloud-config.service.ts","../../src/lib/services/mobicloud-core.service.ts","../../src/lib/token-http-interceptor.ts","../../src/lib/validators/username-validator.ts","../../src/lib/mobicloud-core.module.ts","../../src/lib/guards/mobi-authentication.guard.ts","../../src/lib/guards/mobi-organization.guard.ts","../../src/lib/guards/mobi-b2b.guard.ts","../../src/lib/utils.ts","../../src/lib/types/language-info.ts","../../src/lib/types/theme-info.ts","../../src/lib/types/country.ts","../../src/lib/types/organization-info.ts","../../src/lib/types/ui-types.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-mobicloud-core',\n template: `\n <p>\n mobicloud-core works!\n </p>\n `,\n styles: [\n ]\n})\nexport class MobicloudCoreComponent implements OnInit {\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { WritableSignal, effect } from '@angular/core';\nimport { User } from 'oidc-client';\nimport { Observable } from 'rxjs';\n\nexport class MobiUserProfile {\n user: User|null = null;\n \n // constructor(oidc_User: Observable<User | undefined>) {\n // oidc_User.subscribe(u => this.user = u); \n // }\n\n constructor(user: User|null) {\n this.user = user;\n }\n\n // constructor(user: WritableSignal<User|null>) {\n // effect(() => {\n // this.user = user();\n // });\n // }\n \n get idToken() : string | undefined{\n return this.user?.id_token;\n }\n \n get refreshToken() : string | undefined{\n return this.user?.refresh_token;\n }\n \n get accessToken() : string | undefined{\n return this.user?.access_token;\n }\n \n get tokenType() : string | undefined{\n return this.user?.token_type;\n }\n \n get tokenScope() : string | undefined{\n return this.user?.scope;\n }\n \n get tokenExpiresAt() : number | undefined{\n return this.user?.expires_at;\n }\n \n get tokenExpiresAt_Date(): Date | undefined {\n if(this.user)\n return new Date(this.user.expires_at * 1000);\n return undefined;\n }\n \n get tokenExpiresIn() : number | undefined{\n return this.user?.expires_in;\n }\n \n get tokenIsExpired() : boolean | undefined{\n return this.user?.expired;\n }\n \n get shouldRenewToken() : boolean{\n if(this.user)\n return this.user.expires_in <= 120;\n return false;\n }\n \n // --- Profile\n get user_id() : string | undefined{\n return this.user?.profile?.sub;\n }\n \n get user_name() : string | undefined{\n return this.user?.profile?.name;\n }\n \n get user_username() : string | undefined{\n return this.user?.profile?.username;\n }\n \n get user_email() : string | undefined{\n return this.user?.profile?.email;\n }\n \n get user_partytype() : string | undefined{\n return this.user?.profile?.partytype;\n }\n \n get user_partyid() : string | undefined{\n return this.user?.profile?.partyid;\n }\n \n get user_partyname() : string | undefined{\n return this.user?.profile?.partyname;\n }\n \n get user_accountnumber() : string | undefined{\n return this.user?.profile?.account_number;\n }\n \n get user_authtype() : string | undefined{\n return this.user?.profile?.auth_type;\n }\n \n get user_roles() : string[] | undefined {\n return this.user?.profile?.role;\n }\n \n get isOrganizationAdmin() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('ORGADMIN');\n return false;\n }\n \n get isOrganizationUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('ORGUSER');\n return false;\n }\n \n get isEmployeeUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('EMPUSER');\n return false;\n }\n\n get isEmployeeMasterUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles?.includes('EMPUSER') && this.user_roles?.includes('MASTER');\n return false;\n }\n \n get employeeNumber() : string | undefined{\n return this.user?.profile?.empl_number;\n } \n\n get securityRole() : string | undefined{\n return this.user?.profile?.security_role;\n } \n \n //-- B2B -----\n\n get isCustomerUser() : boolean | undefined{\n if(this.user_roles)\n return this.user_roles.includes('CUSTUSER');\n return false;\n }\n \n get user_customer_id() : string | undefined{\n return this.user?.profile?.cust_id;\n }\n\n get user_customer_accountnumber() : string | undefined{\n return this.user?.profile?.cust_account;\n }\n\n get user_customer_name() : string | undefined{\n return this.user?.profile?.cust_name;\n }\n\n get isVendorUser() : boolean{\n if(this.user_roles)\n return this.user_roles.includes('VENDUSER');\n return false;\n }\n\n get isMasterUser() : boolean{\n if(this.user_roles)\n return this.user_roles.includes('MASTER');\n return false;\n }\n\n get isMasterAdmin() : boolean{\n if(this.user_roles)\n return this.user_roles.includes('MASTERADMIN');\n return false;\n }\n\n get user_vendor_id() : string | undefined{\n return this.user?.profile?.vend_id;\n }\n\n get user_vendor_accountnumber() : string | undefined{\n return this.user?.profile?.vend_account;\n }\n\n get user_vendor_name() : string | undefined{\n return this.user?.profile?.vend_name;\n } \n\n get isB2BUser() : boolean{\n return this.isCustomerUser || this.isVendorUser;\n }\n }","export class ApplicationDetails {\n\tName!: \t\tstring;\n OrganizationId!: \t\tstring;\n\tOrganizationName!:\t\t\tstring; \n OrganizationEmail!: \t\tstring; \n OrganizationAccountNumber!: string;\n StorageAccountName!: string;\n ServicebusName!: string;\n\n HashedPasswords!: \t\tboolean | undefined;\n CertificateLogin!: \t\tboolean | undefined;\n AllowSubOrganizations!: \tboolean | undefined;\n OwnerOrganizationId: \t\tstring | undefined;\n\tOwnerOrganizationName:\t\t\tstring | undefined; \n OwnerOrganizationAccountNumber:\t\t\tstring | undefined; \n\n IsMasterOrganization!: \t\tboolean | undefined;\n\n MapProvider?: MapProvider | undefined;\n MapProviderKey?: string | undefined;\n\n WmsLocationSetting?: WmsLocationSetting | undefined;\n ServicePlanningSetting?: ServicePlanningSetting | undefined;\n WebshipperSetting?: WebshipperSetting | undefined;\n \n DefaultDashboardSlideShowSetting?: DefaultDashboardSlideShowSetting | undefined;\n\n CloudApplications?: CloudApplicationInfo[] | undefined;\n MobisolutionsCloudApplication?: CloudApplicationInfo | undefined;\n}\n\nexport enum EmployeeSecurityRoleType\n{\n None = \"None\",\n SuperUser = \"SuperUser\",\n Accountant = \"Accountant\",\n Admin = \"Admin\",\n}\n\nexport class ServicePlanningSetting {\n TaskPart_ServiceReportId?: \t string|undefined;\n TaskPart_ApproveMode?: TaskPartApproveMode|undefined;\n \n}\n\nexport class DefaultDashboardSlideShowSetting {\n StartupId?: \t string|undefined;\n StartupName?: string|undefined;\n \n}\n\nexport enum TaskPartApproveMode\n{\n None = \"None\",\n Posted = \"Posted\",\n CreateReport = \"CreateReport\",\n SendEmail = \"SendEmail\",\n CreateReportSendEmail = \"CreateReportSendEmail\",\n}\n\nexport class WmsLocationSetting {\n Pattern?: \t string|undefined;\n UpdateOnChange?: boolean|undefined;\n \n}\n\nexport class WebshipperSetting {\n PackageWeightMode?: WebshipperPackageWeightMode|undefined;\n}\n\nexport enum WebshipperPackageWeightMode\n{\n PackageFixed = \"PackageFixed\",\n ItemsWeight = \"ItemsWeight\"\n}\n\nexport class ProfileDetails {\n Id?: \t string|undefined;\n Name?: string|undefined;\n\tImage?: ProfileImage|undefined; \n User?: any|undefined; \n}\n\nexport class ProfileImage {\n\tStorageAccountName?: string|undefined;\n BlobContainerName: \tstring|undefined;\n\tBlobName?: string|undefined; \n}\n\nexport enum MapProvider\n{\n None = \"None\",\n Bing = \"Bing\",\n Google = \"Google\"\n}\n\nexport class CloudApplicationInfo {\n Name?: \t string|undefined;\n ApplicationName?: string|undefined;\n DataConnectorName?: string|undefined;\n DataConnectorTypeName?: string|undefined;\n}","import '@angular/localize/init';\nimport { Injectable, Injector, LOCALE_ID, Inject, signal } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map } from 'rxjs/operators';\nimport { firstValueFrom, of } from 'rxjs';\nimport { registerLocaleData } from '@angular/common';\nimport localeDA from '@angular/common/locales/da';\nimport { LanguageInfo } from \"../types/language-info\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobicloudConfigService {\n\n AppInjector: Injector;\n\n public _config_name: string = '';\n public _app_name: string = '';\n public _app_title: string = '';\n public _environment: string = '';\n public _default_api_baseurl: string = ''; \n public _host_url: string = '';\n public _host_url_en: string = '';\n public _oidc_authority: string = '';\n public _oidc_client_id: string = '';\n public _oidc_client_secret: string = ''; \n public _oidc_response_type: string = '';\n public _oidc_scopes: string = '';\n public _oidc_log: boolean = false;\n public _log_httptrafic: number = 0;\n public _themes_enabled: boolean|undefined = false;\n\n currentLocaleId = signal<string>('');\n\n languageName = signal<string>('');\n\n constructor(private http: HttpClient, private injector: Injector, @Inject(LOCALE_ID) public localeId: string) {\n this.AppInjector = injector;\n console.log(\"Application Language:\", this.CurrentLanguage);\n // console.log(\"Application baseHref:\", this.baseHref);\n if(this.localeId == \"da\") {\n registerLocaleData(localeDA, 'da'); \n }\n this.currentLocaleId.set(this.localeId);\n this.languageName.set(this.getLanguageName(this.localeId));\n }\n\n checkIfConfigFileExists(config_file: string): Promise<boolean> {\n const timestamp = Date.now();\n return firstValueFrom(\n this.http.head(`./assets/${config_file}?t=${timestamp}`).pipe(\n map(() => true), // File exists\n catchError(() => of(false)) // File doesn't exist\n )\n );\n }\n\n async getConfigData(config_file: string): Promise<any> {\n const config_file_url = await this.checkIfConfigFileExists('app.config.runtime.json')\n ? './assets/app.config.runtime.json'\n : `./assets/${config_file}`;\n \n const configdata = await firstValueFrom(\n this.http.get(`${config_file_url}?t=${Date.now()}`)\n );\n \n Object.assign(this, configdata);\n return configdata;\n }\n\n\n getLanguageName(locale: string) : string {\n if(locale == \"da\"){\n return $localize`:@@LanguageName-da:Danish`;\n }\n else{\n return $localize`:@@LanguageName-en-US:English`;\n } \n }\n\n get CurrentLanguage() : string {\n if(this.localeId == \"da\"){\n return \"DK\";\n }\n else if(this.localeId == \"en-US\"){\n return \"US\";\n } \n else {\n return this.localeId;\n }\n }\n \n getSupportedLanguages() : LanguageInfo[]\n {\n const languages: LanguageInfo[] = [{LocaleId: 'da', LanguageName: this.getLanguageName('da'), FlagCode: 'DK'}, {LocaleId: 'en-US', LanguageName: this.getLanguageName('en-US'), FlagCode: 'GB'}];\n return languages;\n }\n\n getApiSiteUrl() : string{\n return `${this._default_api_baseurl}`;\n }\n\n getApiBaseUrl() : string{\n return `${this.getApiSiteUrl()}api/`;\n }\n\n getMobiManagementDataUrl() : string{\n return `${this.getApiBaseUrl()}mobimanagement/`;\n } \n\n getRepositoryUrl() : string{\n return `${this.getApiBaseUrl()}repository/`;\n } \n\n get config_name(): string {\n return this._config_name;\n }\n \n get app_name(): string {\n return this._app_name;\n }\n\n get app_title(): string {\n return this._app_title;\n }\n\n get environment(): string {\n return this._environment;\n }\n\n get oidc_authority(): string {\n return this._oidc_authority;\n }\n\n get oidc_client_id(): string {\n return this._oidc_client_id;\n }\n\n get oidc_client_secret(): string {\n return this._oidc_client_secret;\n }\n\n get host_url(): string {\n return this._host_url;\n }\n\n get host_url_en(): string {\n return this._host_url_en;\n }\n\n get oidc_base_url(): string {\n if(this.localeId == \"da\") {\n return this.host_url;\n }\n else{\n return this.host_url_en;\n } \n }\n\n get oidc_redirect_uri(): string {\n return `${this.oidc_base_url}signin-callback`;\n }\n\n get oidc_redirect_silent_uri(): string {\n return `${this.oidc_base_url}signin-silent-callback`;\n }\n\n get oidc_post_logout_redirect_uri(): string {\n return `${this.oidc_base_url}signout-callback`;\n }\n\n get oidc_response_type(): string {\n return this._oidc_response_type;\n }\n\n get oidc_scopes(): string {\n return this._oidc_scopes;\n }\n\n get oidc_log(): boolean {\n return this._oidc_log;\n }\n\n get log_httptrafic(): number {\n return this._log_httptrafic;\n }\n\n get themes_enabled(): boolean|undefined {\n return this._themes_enabled;\n }\n \n}\n","import { Injectable, EventEmitter, signal } from '@angular/core';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { UserManager, User, Log } from 'oidc-client';\nimport { firstValueFrom, retry } from 'rxjs';\nimport { timeout } from 'rxjs/operators';\nimport { MobicloudConfigService } from \"./mobicloud-config.service\";\nimport { MobiUserProfile } from \"../types/mobi-user-profile\";\nimport { ApplicationDetails, ProfileDetails, EmployeeSecurityRoleType } from \"../types/application-details\";\nimport { Country } from \"../types/country\";\nimport { IODataResult } from \"../types/odata-result\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobicloudCoreService {\n\n public _appVersion: string = '';\n public _appName: string = '';\n public _appTitle: string = '';\n\n public require_Organization:boolean = true;\n public require_Customer:boolean = false;\n public require_Vendor:boolean = false;\n\n private manager: UserManager | undefined;\n\n user = signal<User | null>(null);\n mobiUserProfile= signal<MobiUserProfile | undefined>(undefined);\n applicationDetails = signal<ApplicationDetails | undefined>(undefined);\n profileDetails = signal<ProfileDetails | undefined>(undefined);\n countries = signal<Map<string, Country> | undefined>(undefined); \n\n public UserChanged: EventEmitter<{user: User|undefined|null, profile: MobiUserProfile|undefined, profileDetails:ProfileDetails|undefined}> = new EventEmitter<{user: User|undefined|null, profile: MobiUserProfile|undefined, profileDetails:ProfileDetails|undefined}>(); \n\n constructor(protected httpClient: HttpClient, public configService: MobicloudConfigService) { \n this.usermanager_UserLoaded = this.usermanager_UserLoaded.bind(this); \n this.usermanager_UserUnloaded = this.usermanager_UserUnloaded.bind(this); \n\n if(this.configService.oidc_log){\n Log.logger = console;\n Log.level = Log.DEBUG; \n }\n this.manager = new UserManager(\n {\n authority: configService.oidc_authority,\n client_id: configService.oidc_client_id,\n client_secret: configService.oidc_client_secret,\n redirect_uri: configService.oidc_redirect_uri,\n post_logout_redirect_uri: configService.oidc_post_logout_redirect_uri,\n response_type: configService.oidc_response_type,\n scope: configService.oidc_scopes,\n filterProtocolClaims: true,\n loadUserInfo: true,\n silent_redirect_uri: configService.oidc_redirect_silent_uri\n }\n );\n\n this.manager.events.addUserLoaded(this.usermanager_UserLoaded); \n this.manager.events.addUserUnloaded(this.usermanager_UserUnloaded);\n\n if(this.configService.oidc_log){\n this.enableOidcLogEvents(); \n }\n\n this.manager.clearStaleState();\n\n this.manager.getUser().then((_user:User|null) => {\n this.user.set(_user);\n if(_user)\n this.mobiUserProfile.set(new MobiUserProfile(_user));\n else\n this.mobiUserProfile.set(undefined);\n\n if(this.configService.oidc_log)\n console.log(\"constructor::manager.getUser()\", \"getUser complete\", _user, this.user(), this.mobiUserProfile());\n\n this.onUserChanged().then(() => \n {\n if(this.configService.oidc_log)\n console.log(\"constructor::manager.getUser()\", \"onUserChanged complete\", this.user(), this.mobiUserProfile()); \n });\n });\n }\n\n usermanager_UserLoaded(_user:User){\n this.user.set(_user);\n if(_user)\n this.mobiUserProfile.set(new MobiUserProfile(_user));\n else\n this.mobiUserProfile.set(undefined);\n\n if(this.configService.oidc_log){\n console.log('User loaded', _user, this.user(), this.mobiUserProfile(), this.profileDetails());\n }\n this.onUserChanged(); \n }\n\n usermanager_UserUnloaded(){\n this.user.set(null);\n this.mobiUserProfile.set(undefined);\n this.onUserChanged(); \n\n if(this.configService.oidc_log){\n console.log('User unloaded', this.user(), this.mobiUserProfile(), this.profileDetails());\n } \n }\n\n protected async onUserChanged() : Promise<void>\n {\n if(this.configService.oidc_log){\n console.log(\"onUserChanged\", \"user\", this.user(), this.mobiUserProfile(), this.profileDetails()); \n }\n \n if (this.user()) {\n //Load application details (related to logged in organization user)\n let appResult = await this.getApplicationDetails();\n if(this.configService.oidc_log)\n console.log(\"onUserChanged\", \"appResult\",appResult);\n\n //Load Profile Details (The actual employee)\n let profileDetailsResult = await this.getProfileDetails();\n if(this.configService.oidc_log){\n console.log(\"onUserChanged\", \"getProfileDetails result\",profileDetailsResult); \n console.log(\"onUserChanged\", \"getProfileDetails\", this.profileDetails());\n } \n \n //Load countries (if not loaded)\n if(!this.countries()){\n let countriesResult = await this.getCountries();\n if(this.configService.oidc_log){\n console.log(\"onUserChanged\", \"getCountries result\",countriesResult); \n console.log(\"onUserChanged\", \"getCountries\", this.countries());\n }\n }\n }\n else {\n this.mobiUserProfile.set(undefined);\n this.profileDetails.set(undefined);\n this.applicationDetails.set(undefined);\n }\n\n this.UserChanged.emit({user: this.user(), profile: this.mobiUserProfile(), profileDetails: this.profileDetails()});\n }\n\n\n async getApplicationDetails(requestTimeout:number=30000): Promise<ApplicationDetails | undefined> {\n if (!this.isAuthenticated()) {\n console.warn(\"ApplicationDetails is null, user not authenticated\");\n this.applicationDetails.set(undefined);\n return undefined;\n }\n \n if (this.isMasterUserAuthenticated() && !this.hasMasterOrganization()) {\n console.warn(\"ApplicationDetails is null, MasterOrganization is not selected\");\n this.applicationDetails.set(undefined);\n return undefined;\n }\n \n try {\n const url = `${this.configService.getApiBaseUrl()}ApplicationDetails`;\n const params = new HttpParams()\n .set('key', this.configService.app_name)\n .set('env', this.configService.environment);\n \n const appDetails = await firstValueFrom(\n this.httpClient.get<ApplicationDetails>(url, { params }).pipe(\n timeout(requestTimeout),retry({\n count: 2,\n delay: 1000,\n resetOnSuccess: true\n })\n )\n );\n\n this.applicationDetails.set(appDetails);\n return appDetails;\n \n } \n catch (error: any) {\n console.error(\"getApplicationDetails error:\", error);\n this.applicationDetails.set(undefined);\n throw error;\n }\n }\n\n async getCountries(): Promise<Map<string, Country>> {\n const url = `${this.configService.getMobiManagementDataUrl()}Country`;\n \n try {\n const result:IODataResult<Country> = await firstValueFrom(\n this.httpClient.get<IODataResult<Country>>(url, {\n params: {\n '$filter': 'enabled eq true',\n '$orderby': 'Name',\n '$select': 'code2,Name,LocalName,TradeArea,Shipping_Require_State'\n }\n }).pipe(timeout(15000),retry({\n count: 2,\n delay: 1000,\n resetOnSuccess: true\n }))\n );\n \n const countries_map = new Map(result.value.map((country:Country) => [country.Code2 ?? '', country]));\n \n this.countries.set(countries_map);\n \n return countries_map;\n \n } \n catch (error:any) {\n console.error(error);\n // return new Map<string, Country>();\n throw error;\n }\n }\n \n async getProfileDetails(requestTimeout:number=30000): Promise<ProfileDetails | undefined> {\n if (!this.isAuthenticated() || !this.mobiUserProfile()?.user_id) {\n if(this.configService.oidc_log){\n let profile = this.mobiUserProfile();\n console.log(\"getProfileDetails\", \"no user\",profile); \n } \n this.profileDetails.set(undefined);\n return undefined;\n }\n \n let url:string|undefined;\n let orgid_override:string|undefined;\n if(this.mobiUserProfile()?.isEmployeeUser){ \n if(this.mobiUserProfile()?.isEmployeeMasterUser){\n let user_org_id = this.mobiUserProfile()?.user_partyid?.toLowerCase();\n if(user_org_id != undefined){\n orgid_override = user_org_id;\n }\n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"isEmployeeMasterUser\", user_org_id, orgid_override); \n } \n // console.log(\"isEmployeeMasterUser\", app_orgId, user_org_id, orgid_override);\n }\n url = `${this.configService.getMobiManagementDataUrl()}employee(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;\n }\n else if(this.mobiUserProfile()?.isCustomerUser){\n url = `${this.configService.getMobiManagementDataUrl()}customeruser(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;\n }\n else if(this.mobiUserProfile()?.isVendorUser){\n url = `${this.configService.getMobiManagementDataUrl()}vendoruser(${this.mobiUserProfile()?.user_id})?$expand=Image($select=StorageAccountName,BlobContainerName,BlobName)`;\n }\n if (!url) {\n if(this.configService.oidc_log){\n let profile = this.mobiUserProfile();\n console.log(\"getProfileDetails\", \"no url\", profile); \n } \n this.profileDetails.set(undefined);\n return undefined;\n }\n \n try {\n // console.log(url);\n let headers = new HttpHeaders();\n if(orgid_override){\n headers = headers.set(\"OrganizationId\", orgid_override);\n }\n \n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"url\", url); \n console.log(\"getProfileDetails\", \"headers\", headers); \n } \n\n const result = await firstValueFrom(\n this.httpClient.get<IODataResult<any>>(url, { headers: headers }).pipe(\n timeout(requestTimeout)\n )\n );\n\n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"result\", result); \n } \n \n if (!result.value || !result.value[0]) {\n return undefined;\n }\n const _user = result.value[0];\n const _profileDetails = Object.assign(new ProfileDetails(), {\n Id: _user.Id?.toString(),\n Name: _user.Name,\n Image: _user.Image,\n User: _user\n });\n\n this.profileDetails.set(_profileDetails);\n\n if(this.configService.oidc_log){\n console.log(\"getProfileDetails\", \"profileDetails\", _profileDetails); \n } \n\n return _profileDetails;\n \n } catch (error: any) {\n console.error(\"getProfileDetails error:\", error);\n this.profileDetails.set(undefined);\n return undefined;\n }\n } \n\n\n // --- SignIn ------------------------------------------------------\n\n public async signIn(redirectUrl: string): Promise<any> {\n if(this.configService.oidc_log){\n console.log(\"signIn\", redirectUrl); \n }\n let result = await this.manager?.signinRedirect({ data: { redirectUrl: redirectUrl } }).catch( (reason: any) =>\n {\n console.error(\"signIn failed:\", reason, this.user(), this.mobiUserProfile());\n return new Error(reason);\n });\n if(this.configService.oidc_log){\n console.log(\"signIn\", \"result\", result, this.user(), this.mobiUserProfile()); \n }\n return result;\n }\n\n public async completeSignIn(): Promise<User|null> { \n let _user = await this.manager?.signinRedirectCallback() ?? null;\n if(this.configService.oidc_log){\n console.log(\"completeSignIn\", _user, this.user(), this.mobiUserProfile()); \n }\n return _user;\n }\n\n // --- Silent SignIn -----------------------------------------------\n\n public async signInSilent(): Promise<any> { \n if(this.configService.oidc_log){\n console.log(\"signInSilent\"); \n } \n let result = await this.manager?.signinSilent().then((_user:User) =>\n {\n if(this.configService.oidc_log){\n console.log(\"signInSilent\", \"result\", _user, this.user(), this.mobiUserProfile()); \n } \n this.onSignedInSilent(_user);\n }).catch( (reason: any) =>\n {\n console.error(\"signInSilent failed:\", reason, this.user(), this.mobiUserProfile());\n return new Error(reason);\n });\n\n if(this.configService.oidc_log){\n console.log(\"signInSilent\", \"result\", result, this.user(), this.mobiUserProfile()); \n }\n return result;\n }\n\n public onSignedInSilent(_user: User){\n if(this.configService.oidc_log){\n console.log(\"onSignedInSilent\", _user, this.user(), this.mobiUserProfile()); \n } \n }\n\n public async completeSilentSignIn() : Promise<any>{ \n if(this.configService.oidc_log){\n console.log(\"completeSilentSignIn\", this.user(), this.mobiUserProfile()); \n } \n let result = await this.manager?.signinSilentCallback();\n\n if(this.configService.oidc_log){\n console.log(\"signInSilent\", \"result\", result, this.user(), this.mobiUserProfile()); \n }\n return result;\n }\n\n // --- SignOut -----------------------------------------------------\n\n public async signout(): Promise<any> {\n if(this.configService.oidc_log){\n console.log(\"signout\", this.user(), this.mobiUserProfile()); \n } \n return await this.manager?.signoutRedirect();\n }\n\n public async completeSignout() {\n if(this.configService.oidc_log){\n console.log(\"completeSignout\", this.user(), this.mobiUserProfile()); \n }\n }\n\n enableOidcLogEvents(){\n if(this.manager){\n // this.manager.events.addUserLoaded((_user:User) => {\n // console.log('User loaded:', _user);\n // });\n\n // this.manager.events.addUserUnloaded(() => {\n // console.log('User unloaded');\n // });\n\n this.manager.events.addUserSignedIn(() => {\n console.log('User signed in...');\n });\n\n this.manager.events.addAccessTokenExpiring(() => {\n console.log('Access token expiring...');\n });\n\n this.manager.events.addAccessTokenExpired(() => {\n console.log('Access token expired');\n });\n\n this.manager.events.addSilentRenewError((error: Error) => {\n console.error('Silent renew error:', error);\n });\n\n this.manager.events.addUserSignedOut(() => {\n console.log('User signed out from identity server');\n console.trace('User signed out stack trace');\n // This is particularly important to check - if this is firing,\n // it could trigger app reloads\n });\n\n this.manager.events.removeUserSignedOut(() => {\n console.log('removeUserSignedOut called');\n });\n\n this.manager.events.addUserSessionChanged(() => {\n console.log('addUserSessionChanged called');\n });\n\n this.manager.events.removeUserSessionChanged(() => {\n console.log('removeUserSessionChanged called');\n });\n }\n }\n\n // --- Helper methods -----------------------------------------------------\n\n public isAuthenticated(): boolean {\n return this.user() != null && !this.user()?.expired;\n }\n\n public isOrganizationAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser);\n }\n\n public isMasterOrganizationAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser)) || this.isMasterUserAuthenticated();\n }\n\n public isOrganizationUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin);\n }\n\n public isMasterOrganizationUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin)) || this.isMasterUserAuthenticated();\n }\n\n public isMasterOrganizationAdminAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationAdmin)) || this.isMasterUserAuthenticated();\n }\n\n public isEmployeeAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser);\n }\n\n public isEmployeeMasterUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isEmployeeMasterUser);\n }\n\n public isMasterEmployeeAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isOrganizationUser || this.mobiUserProfile()?.isOrganizationAdmin || this.mobiUserProfile()?.isEmployeeUser)) || this.isMasterUserAuthenticated();\n } \n\n public isCustomerUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isCustomerUser);\n }\n\n public isMasterCustomerUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isCustomerUser)) || this.isMasterUserAuthenticated();\n }\n\n public isVendorUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isVendorUser);\n }\n\n public isMasterVendorUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.mobiUserProfile() != null && (this.mobiUserProfile()?.isVendorUser)) || this.isMasterUserAuthenticated();\n } \n\n public isB2BAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.isOrganizationAuthenticated() || this.isCustomerUserAuthenticated()|| this.isVendorUserAuthenticated());\n }\n\n public isMasterB2BAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && (this.isOrganizationAuthenticated() || this.isCustomerUserAuthenticated()|| this.isVendorUserAuthenticated()) || this.isMasterUserAuthenticated();\n }\n\n public isMasterUserAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isMasterUser || this.mobiUserProfile()?.isMasterAdmin);\n }\n\n public isMasterAdminAuthenticated(): boolean|undefined {\n return this.isAuthenticated() && this.mobiUserProfile() != null && (this.mobiUserProfile()?.isMasterAdmin);\n }\n\n public securityRole(): EmployeeSecurityRoleType|undefined {\n if(this.isAuthenticated() && this.mobiUserProfile() != null && this.mobiUserProfile()?.securityRole){\n return EmployeeSecurityRoleType[this.mobiUserProfile()?.securityRole as keyof typeof EmployeeSecurityRoleType];\n }\n return undefined;\n }\n\n public hasMasterOrganization(): boolean {\n var strMasterOrganizationId = localStorage.getItem(\"MasterOrganizationId\");\n if(strMasterOrganizationId && strMasterOrganizationId.length > 0){\n return true;\n }\n else{\n return false;\n }\n }\n\n public getMasterOrganization(): string|null {\n var strMasterOrganizationId = localStorage.getItem(\"MasterOrganizationId\");\n return strMasterOrganizationId;\n }\n\n public async setMasterOrganization(strMasterOrganizationId: string|null): Promise<void> {\n if(strMasterOrganizationId){\n localStorage.setItem(\"MasterOrganizationId\", strMasterOrganizationId);\n let appdetails = await this.getApplicationDetails();\n if(this.configService.oidc_log)\n console.log(\"setMasterOrganization\", \"appResult\", appdetails); \n }\n else{\n this.removeMasterOrganization();\n // return new Promise(resolve => { resolve(undefined); });\n }\n }\n\n public removeMasterOrganization(): void {\n localStorage.removeItem(\"MasterOrganizationId\");\n }\n\n public hasMasterCustomer(): boolean {\n var strMasterCustomerId = localStorage.getItem(\"MasterCustomerId\");\n if(strMasterCustomerId && strMasterCustomerId.length > 0){\n return true;\n }\n else{\n return false;\n }\n }\n\n public getMasterCustomer(): string|null {\n var strMasterCustomerId = localStorage.getItem(\"MasterCustomerId\");\n return strMasterCustomerId;\n }\n\n public setMasterCustomer(strMasterCustomerId: string|null): void {\n if(strMasterCustomerId){\n localStorage.setItem(\"MasterCustomerId\", strMasterCustomerId); \n }\n else{\n this.removeMasterCustomer();\n }\n }\n\n public removeMasterCustomer(): void {\n localStorage.removeItem(\"MasterCustomerId\");\n } \n\n public hasMasterVendor(): boolean {\n var strMasterVendorId = localStorage.getItem(\"MasterVendorId\");\n if(strMasterVendorId && strMasterVendorId.length > 0){\n return true;\n }\n else{\n return false;\n }\n }\n\n public getMasterVendor(): string|null {\n var strMasterVendorId = localStorage.getItem(\"MasterVendorId\");\n return strMasterVendorId;\n }\n\n public setMasterVendor(strMasterVendorId: string|null): void {\n if(strMasterVendorId){\n localStorage.setItem(\"MasterVendorId\", strMasterVendorId); \n }\n else{\n this.removeMasterVendor();\n }\n }\n\n public removeMasterVendor(): void {\n localStorage.removeItem(\"MasterVendorId\");\n } \n\n public redirectUrl(): string {\n return this.user()?.state?.redirectUrl;\n }\n\n public get accessToken(): string {\n return this.user()?.access_token ?? '';\n }\n\n public get authorizationHeader(): string|undefined {\n return this.user()?.token_type?.concat(\" \", (this.user()?.access_token ?? ''));\n }\n\n public get tokenExpiresAt(): Date|undefined {\n if(this.user()){\n let expires_at = this.user()?.expires_at;\n if(expires_at)\n return new Date(expires_at * 1000);\n }\n return undefined;\n }\n\n public get tokenValidUntil(): Date|undefined {\n if(this.user()){\n let expires_at = this.user()?.expires_at;\n if(expires_at)\n return new Date((expires_at -120) * 1000);\n }\n return undefined;\n }\n\n public get isTokenExpired(): boolean {\n if(this.user()){\n let expires_in = this.user()?.expires_in;\n if(expires_in)\n return expires_in <= 120;\n }\n return false;\n }\n\n handleError(error:any) {\n let errorMessage = '';\n if (error && error.error && error.error.error){\n //Get Json error\n errorMessage = error.error.error;\n }\n else if(error && error.error instanceof ErrorEvent) {\n // Get client-side error\n errorMessage = error.error.message;\n } \n else {\n // Get server-side error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n // window.alert(errorMessage);\n let anyRemoved:boolean = evaluateForMasterOrganizationClearance(errorMessage);\n if(anyRemoved){\n location.reload();\n }\n return new Error(errorMessage);\n }\n\n //-- Permissions\n SecurityRolePriorityMap: Record<EmployeeSecurityRoleType, number> = {\n [EmployeeSecurityRoleType.None]: 0,\n [EmployeeSecurityRoleType.SuperUser]: 1,\n [EmployeeSecurityRoleType.Accountant]: 2,\n [EmployeeSecurityRoleType.Admin]: 3\n };\n\n requireEmployeePermission(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined, securityRole:EmployeeSecurityRoleType = EmployeeSecurityRoleType.None) : boolean{\n let valid = (mobiUserProfile.isOrganizationUser || \n mobiUserProfile.isOrganizationAdmin ||\n (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin));\n if(!valid){\n valid = mobiUserProfile.isEmployeeUser ?? false;\n if(valid){\n let emplSecurityRole = EmployeeSecurityRoleType.None;\n if(mobiUserProfile.securityRole){\n emplSecurityRole = EmployeeSecurityRoleType[mobiUserProfile.securityRole as keyof typeof EmployeeSecurityRoleType];\n }\n valid = this.SecurityRolePriorityMap[emplSecurityRole] >= this.SecurityRolePriorityMap[securityRole];\n }\n }\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireOrganizationUser(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = (mobiUserProfile.isOrganizationUser || \n mobiUserProfile.isOrganizationAdmin ||\n (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin));\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireOrganizationAdmin(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = (mobiUserProfile.isOrganizationAdmin ||\n (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin));\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireMasterPermission(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = (mobiUserProfile.isMasterUser || mobiUserProfile.isMasterAdmin);\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n }\n\n requireMasterAdminPermission(mobiUserProfile:MobiUserProfile, callback: ((valid:boolean) => void)|undefined = undefined) : boolean{\n let valid = mobiUserProfile.isMasterAdmin;\n if(!valid){\n let isEmployeeMaster = (mobiUserProfile.isMasterUser ?? false) && (mobiUserProfile.isEmployeeUser ?? false);\n if(isEmployeeMaster){\n let emplSecurityRole = EmployeeSecurityRoleType.None;\n if(mobiUserProfile.securityRole){\n emplSecurityRole = EmployeeSecurityRoleType[mobiUserProfile.securityRole as keyof typeof EmployeeSecurityRoleType];\n }\n valid = (this.SecurityRolePriorityMap[emplSecurityRole] == this.SecurityRolePriorityMap[EmployeeSecurityRoleType.Admin]);\n }\n }\n if(callback){\n callback(valid ?? false);\n }\n return valid ?? false;\n } \n\n\n}\n\nexport function evaluateForMasterOrganizationClearance(errorMessage:string) : boolean{\n let anyRemoved:boolean = false;\n\n if(errorMessage && (\n errorMessage.toString().indexOf('No Test database has been setup') >= 0 || \n errorMessage.toString().indexOf('Organization does not exist') >= 0\n )){\n // console.log(\"Check for clearance of MasterOrganizationId\");\n \n let masterOrgId = localStorage.getItem(\"MasterOrganizationId\");\n if(masterOrgId){\n console.log(\"Clearing MasterOrganizationId:\", masterOrgId);\n localStorage.removeItem(\"MasterOrganizationId\");\n anyRemoved = true;\n }\n\n let customerId = localStorage.getItem(\"MasterCustomerId\");\n if(customerId){\n console.log(\"Clearing MasterCustomerId:\", customerId);\n localStorage.removeItem(\"MasterCustomerId\");\n anyRemoved = true;\n }\n\n let vendorId = localStorage.getItem(\"MasterVendorId\");\n if(vendorId){\n console.log(\"Clearing MasterVendorId:\", vendorId);\n localStorage.removeItem(\"MasterVendorId\");\n anyRemoved = true;\n }\n }\n\n return anyRemoved;\n}\n","import { Injectable } from '@angular/core';\nimport {HttpEvent,HttpInterceptor,HttpHandler,HttpRequest,HttpErrorResponse} from \"@angular/common/http\";\nimport { Observable } from \"rxjs\";\n\n// import { ConfigService } from \"../../services/config.service\";\n// import { UserService } from \"../../services/user.service\";\nimport { MobicloudConfigService } from \"./services/mobicloud-config.service\";\nimport { MobicloudCoreService } from \"./services/mobicloud-core.service\";\n\nimport { from } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\n\n@Injectable()\nexport class TokenHttpInterceptor implements HttpInterceptor {\n \n private coreService: MobicloudCoreService | undefined;\n\n constructor(protected configService: MobicloudConfigService) \n { \n }\n\n intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {\n // All HTTP requests are going to go through this method\n\n if(this.configService?._default_api_baseurl && req.url.includes(this.configService._default_api_baseurl)){\n if(this.coreService === undefined){ \n this.coreService = this.configService.AppInjector.get(MobicloudCoreService);\n }\n // console.log(\"userservice: \" + this.userService);\n if(this.configService.log_httptrafic > 1){\n console.log({log: \"token-http-interceptor request\", request: req});\n }\n // if (!req.headers.has(\"Access-Control-Allow-Origin\")) {\n // req = req.clone({\n // headers: req.headers.set(\"Access-Control-Allow-Origin\", \"*\")\n // });\n // }\n\n const language: string = this.configService.CurrentLanguage;\n \n if (language && !req.headers.has(\"Language\")) {\n req = req.clone({\n headers: req.headers.set(\"Language\", language)\n });\n }\n if (language && !req.headers.has(\"Application\")) {\n req = req.clone({\n headers: req.headers.set(\"Application\", this.configService._app_name)\n });\n } \n if(this.configService.log_httptrafic > 1){\n console.log(req); \n }\n if(this.coreService && this.coreService.isAuthenticated()){\n if(this.coreService.isTokenExpired) {\n if(this.configService.log_httptrafic > 0)\n console.warn({log: \"token is expired (silent signin)\", tokenValidUntil: this.coreService.tokenValidUntil, tokenExpiresAt: this.coreService.tokenExpiresAt, is: this.coreService.isTokenExpired, auth_header: this.coreService.authorizationHeader, user: this.coreService.user} );\n return from(this.coreService.signInSilent()).pipe(\n switchMap((user) => {\n if(this.configService.log_httptrafic > 0)\n console.log({log: \"token renewed (adding new token)\", tokenValidUntil: this.coreService?.tokenValidUntil, tokenExpiresAt: this.coreService?.tokenExpiresAt, is: this.coreService?.isTokenExpired, auth_header: this.coreService?.authorizationHeader, user: this.coreService?.user} );\n req = req.clone({headers: req.headers.set(\"Authorization\", this.coreService?.authorizationHeader ?? '')}); \n\n // if(this.coreService && this.coreService.isMasterUserAuthenticated() && this.coreService.require_Organization && !req.headers.has(\"OrganizationId\")){\n if(this.coreService && this.coreService.require_Organization && !req.headers.has(\"OrganizationId\")){ \n var strMasterOrganizationId = this.coreService.getMasterOrganization();\n if(strMasterOrganizationId && strMasterOrganizationId.length > 0){\n req = req.clone({headers: req.headers.set(\"OrganizationId\", strMasterOrganizationId)});\n }\n } \n\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){\n if(this.coreService && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){ \n var strMasterCustomerId = this.coreService.getMasterCustomer();\n if(strMasterCustomerId && strMasterCustomerId.length > 0){\n req = req.clone({headers: req.headers.set(\"CustomerId\", strMasterCustomerId)});\n }\n }\n\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){\n if(this.coreService && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){ \n var strMasterVendorId = this.coreService.getMasterVendor();\n if(strMasterVendorId && strMasterVendorId.length > 0){\n req = req.clone({headers: req.headers.set(\"VendorId\", strMasterVendorId)});\n }\n } \n\n return next.handle(req);\n })\n );\n } \n else{\n if(this.configService.log_httptrafic > 0)\n console.log({log: \"token not expired\", tokenValidUntil: this.coreService.tokenValidUntil, tokenExpiresAt: this.coreService.tokenExpiresAt, is: this.coreService.isTokenExpired, auth_header: this.coreService.authorizationHeader, user: this.coreService.user} );\n if (!req.headers.has(\"Authorization\")) {\n req = req.clone({headers: req.headers.set(\"Authorization\", this.coreService.authorizationHeader ?? '')}); \n }\n // if(this.coreService.isMasterUserAuthenticated() && !req.headers.has(\"OrganizationId\")){\n if(this.coreService && this.coreService.require_Organization && !req.headers.has(\"OrganizationId\")){\n var strMasterOrganizationId = this.coreService.getMasterOrganization();\n if(strMasterOrganizationId && strMasterOrganizationId.length > 0){\n req = req.clone({headers: req.headers.set(\"OrganizationId\", strMasterOrganizationId)});\n }\n }\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){\n if(this.coreService && this.coreService.require_Customer && !req.headers.has(\"CustomerId\")){ \n var strMasterCustomerId = this.coreService.getMasterCustomer();\n if(strMasterCustomerId && strMasterCustomerId.length > 0){\n req = req.clone({headers: req.headers.set(\"CustomerId\", strMasterCustomerId)});\n }\n }\n\n // if(this.coreService && this.coreService.isMasterEmployeeAuthenticated() && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){\n if(this.coreService && this.coreService.require_Vendor && !req.headers.has(\"VendorId\")){ \n var strMasterVendorId = this.coreService.getMasterVendor();\n if(strMasterVendorId && strMasterVendorId.length > 0){\n req = req.clone({headers: req.headers.set(\"VendorId\", strMasterVendorId)});\n }\n } \n return next.handle(req);\n }\n }\n else{\n if(this.configService.log_httptrafic > 0)\n console.log({log: \"user not athenticated\", tokenValidUntil: this.coreService.tokenValidUntil, tokenExpiresAt: this.coreService.tokenExpiresAt, is: this.coreService.isTokenExpired, auth_header: this.coreService.authorizationHeader, user: this.coreService.user} );\n return next.handle(req); \n } \n } \n else{\n if(this.configService.log_httptrafic > 1)\n console.log(\"not app request: \", req);\n return next.handle(req);\n } \n } \n}\n","import '@angular/localize/init';\nimport { Injectable } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { Observable, throwError, firstValueFrom } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { catchError, map, timeout } from 'rxjs/operators';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable()\nexport class UsernameValidator {\n\n currentUserId: string |undefined;\n debouncer: any |undefined;\n\n constructor(protected httpClient: HttpClient, public coreService: MobicloudCoreService){ \n } \n \n checkUsername(control: UntypedFormControl): any {\n\n clearTimeout(this.debouncer);\n \n return new Promise(resolve => {\n \n this.debouncer = setTimeout(() => {\n let parameterString = `?username=${control.value}`;\n if(this.currentUserId){\n parameterString += `&currentUserId=${this.currentUserId}`;\n }\n this.executeFunction<boolean>(parameterString).then(response => {\n response.subscribe((result) => {\n if(result){\n // console.log(\"user taken\");\n resolve({ \n \"usernametaken\": true\n });\n } else{\n // console.log(\"user not taken\");\n resolve(null);\n } \n });\n }),\n (err:any) => { \n resolve({'usernametaken': true});\n }\n }, 1000); \n \n });\n }\n\n async executeFunction<T>(parameterString: string = '', requestTimeout: number = 30000) : Promise<Observable<T>>{\n console.log(`${this.coreService.configService.getMobiManagementDataUrl()}Employee/UsernameTaken()${parameterString}`);\n return this.httpClient.get<any>(`${this.coreService.configService.getMobiManagementDataUrl()}Employee/UsernameTaken()${parameterString}`)\n .pipe(timeout(requestTimeout), catchError(this.handleError))\n .pipe(map(result => result['value'])); \n }\n \n handleError(error:any) {\n let errorMessage = '';\n if (error && error.error && error.error.error){\n //Get Json error\n errorMessage = error.error.error;\n }\n else if(error && error.error instanceof ErrorEvent) {\n // Get client-side error\n errorMessage = error.error.message;\n } \n else {\n // Get server-side error\n errorMessage = `Error Code: ${error.status}\\nMessage: ${error.message}`;\n }\n\n return throwError(() => errorMessage);\n } \n\n async usernameValidation_devextreme(username: string, currentUserId?: string): Promise<void> {\n const params = new URLSearchParams();\n params.set('username', username);\n if (currentUserId) {\n params.set('currentUserId', currentUserId);\n }\n \n const url = `${this.coreService.configService.getMobiManagementDataUrl()}Employee/UsernameTaken()?${params}`;\n \n try {\n const res: any = await firstValueFrom(this.httpClient.get(url));\n \n res.isValid = !res.value;\n if (res.isValid) {\n res.message = $localize`:@@ValidationText-UsernameAvailable:Username is available`;\n return res;\n } else {\n throw $localize`:@@ErrorText-UsernameTaken:Username is not available`;\n }\n } catch (error) {\n console.error(error);\n throw \"Error: Unable to validate username\";\n }\n }\n \n async usernameValidation_customer_devextreme(customerId: string, username: string, currentUserId?: string): Promise<void> {\n const params = new URLSearchParams();\n params.set('username', username);\n if (currentUserId) {\n params.set('currentUserId', currentUserId);\n }\n \n const url = `${this.coreService.configService.getMobiManagementDataUrl()}Customer(${customerId})/UsernameTaken()?${params}`;\n \n try {\n const res: any = await firstValueFrom(this.httpClient.get(url));\n \n res.isValid = !res.value;\n if (res.isValid) {\n res.message = $localize`:@@ValidationText-UsernameAvailable:Username is available`;\n return res;\n } else {\n throw $localize`:@@ErrorText-UsernameTaken:Username is not available`;\n }\n } catch (error) {\n console.error(error);\n throw \"Error: Unable to validate username\";\n }\n } \n \n async usernameValidation_vendor_devextreme(vendorId: string, username: string, currentUserId?: string): Promise<void> {\n const params = new URLSearchParams();\n params.set('username', username);\n if (currentUserId) {\n params.set('currentUserId', currentUserId);\n }\n \n const url = `${this.coreService.configService.getMobiManagementDataUrl()}Vendor(${vendorId})/UsernameTaken()?${params}`;\n \n try {\n const res: any = await firstValueFrom(this.httpClient.get(url));\n \n res.isValid = !res.value;\n if (res.isValid) {\n res.message = $localize`:@@ValidationText-UsernameAvailable:Username is available`;\n return res;\n } else {\n throw $localize`:@@ErrorText-UsernameTaken:Username is not available`;\n }\n } catch (error) {\n console.error(error);\n throw \"Error: Unable to validate username\";\n }\n }\n\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { MobicloudCoreComponent } from './mobicloud-core.component';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { TokenHttpInterceptor } from \"./token-http-interceptor\";\nimport { MobicloudConfigService } from \"./services/mobicloud-config.service\";\nimport { UsernameValidator } from \"./validators/username-validator\";\n\n@NgModule({\n declarations: [MobicloudCoreComponent],\n imports: [\n ],\n exports: [MobicloudCoreComponent]\n})\nexport class MobicloudCoreModule {\n\n static forRoot(): ModuleWithProviders<MobicloudCoreModule> {\n return {\n ngModule: MobicloudCoreModule,\n providers: [\n {provide: HTTP_INTERCEPTORS, useClass: TokenHttpInterceptor, deps: [MobicloudConfigService], multi: true},\n UsernameValidator\n ]\n };\n } \n }\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isAuthenticated()) {\n return true;\n }\n\n this.coreService.signIn(state.url);\n return false;\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiOrganizationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n \n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n return new Observable<boolean>((observer) => {\n this.coreService.requireEmployeePermission(userProfile, (valid: boolean) => {\n if (valid && this.coreService.isAuthenticated()) {\n observer.next(true);\n observer.complete();\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiMasterUserGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n return new Observable<boolean>((observer) => {\n this.coreService.requireMasterPermission(userProfile, (valid: boolean) => {\n if (valid && this.coreService.isAuthenticated()) {\n observer.next(true);\n observer.complete();\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiMasterAdminGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n return new Observable<boolean>((observer) => {\n this.coreService.requireMasterAdminPermission(userProfile, (valid: boolean) => {\n if (valid && this.coreService.isAuthenticated()) {\n observer.next(true);\n observer.complete();\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}\n\n//-------\n@Injectable({\n providedIn: 'root'\n})\nexport class MasterOrganizationGuard implements CanActivate {\n constructor(\n private router: Router, \n private coreService: MobicloudCoreService\n ) {}\n\n canActivate(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n const userProfile = this.coreService.mobiUserProfile();\n \n if (!userProfile) {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n return false;\n }\n\n // Convert the callback-based method to an Observable\n return new Observable<boolean>((observer) => {\n this.coreService.requireEmployeePermission(userProfile, (valid: boolean) => {\n \n if (valid && this.coreService.isAuthenticated()) {\n if (this.coreService.isMasterUserAuthenticated()) {\n const strMasterOrganizationId = localStorage.getItem(\"MasterOrganizationId\");\n \n if (strMasterOrganizationId && strMasterOrganizationId.length > 0) {\n observer.next(true);\n observer.complete();\n } else {\n this.router.navigateByUrl('/selectorganization');\n observer.next(false);\n observer.complete();\n }\n } else {\n observer.next(true);\n observer.complete();\n }\n } else {\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n observer.next(false);\n observer.complete();\n }\n });\n });\n }\n}","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';\nimport { Observable } from 'rxjs';\n\nimport { MobicloudCoreService } from \"../services/mobicloud-core.service\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiB2BAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isB2BAuthenticated()) {\n return true;\n }\n\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n \n return false;\n }\n\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiCustomerUserAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isCustomerUserAuthenticated()) {\n return true;\n }\n\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n \n return false;\n }\n\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobiVendorUserAuthenticationGuard implements CanActivate {\n\n constructor(private router: Router, private coreService: MobicloudCoreService) { }\n\n canActivate(\n next: ActivatedRouteSnapshot,\n state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n\n if (this.coreService.isVendorUserAuthenticated()) {\n return true;\n }\n\n if (!this.coreService.isAuthenticated()) {\n this.coreService.signIn(state.url);\n }\n \n return false;\n }\n\n}","export function convertToISODates_ODataValues (values: any, value_names: string[]){\n for (const key in value_names) {\n if(values[value_names[key]]){\n if(!(values[value_names[key]] instanceof Date)){\n values[value_names[key]] = new Date(values[value_names[key]]);\n }\n values[value_names[key]] = new Date(values[value_names[key]]).toISOString();\n }\n } \n}\n\nexport function setZeroTime_ODataValues (values: any, value_names: string[]){\n for (const key in value_names) {\n if(values[value_names[key]]){\n if(!(values[value_names[key]] instanceof Date)){\n values[value_names[key]] = new Date(values[value_names[key]]);\n }\n // console.log(values[value_names[key]]);\n values[value_names[key]].setUTCFullYear(values[value_names[key]].getFullYear());\n values[value_names[key]].setUTCMonth(values[value_names[key]].getMonth());\n values[value_names[key]].setUTCDate(values[value_names[key]].getDate());\n values[value_names[key]].setUTCHours(0); \n values[value_names[key]].setUTCMinutes(0); \n values[value_names[key]].setUTCSeconds(0); \n values[value_names[key]].setUTCMilliseconds(0); \n \n // console.log(values[value_names[key]]); \n values[value_names[key]] = new Date(values[value_names[key]]).toISOString();\n }\n } \n}\n\nexport function setZeroTime_ODataValues_original (values: any, value_names: string[]){\n for (const key in value_names) {\n if(values[value_names[key]]){\n if(!(values[value_names[key]] instanceof Date)){\n values[value_names[key]] = new Date(values[value_names[key]]);\n }\n // console.log(values[value_names[key]]);\n values[value_names[key]].setFullYear(values[value_names[key]].getFullYear());\n values[value_names[key]].setMonth(values[value_names[key]].getMonth());\n values[value_names[key]].setDate(values[value_names[key]].getDate());\n values[value_names[key]].setHours(0); \n values[value_names[key]].setMinutes(0); \n values[value_names[key]].setSeconds(0); \n values[value_names[key]].setMilliseconds(0); \n \n // console.log(values[value_names[key]].toISOString());\n }\n } \n}\n\nexport function ensureDateEqual(date1: Date, date2: any) : Date|undefined{\n if(date1){\n if(!(date1 instanceof Date)){\n date1 = new Date(date1);\n }\n\n if(date2){\n if(!(date2 instanceof Date)){\n date2 = new Date(date2);\n }\n var start = new Date(date2); \n start.setFullYear(date1.getFullYear());\n start.setMonth(date1.getMonth());\n start.setDate(date1.getDate());\n return start;\n }\n }\n return undefined;\n}\n\n//--- Grouping, Sorting and Filtering helper function\nexport function fullNameFilterExpression_Employee(this:any, filterValue: any, selectedFilterOperation: any, field: string | undefined) {\n let column:any = this as any;\n let filterExpression : any[]|undefined;\n\n if(filterValue){\n switch(selectedFilterOperation) { \n case 'contains': {\n if(field)\n filterExpression = [[`${field}/FirstName`, selectedFilterOperation, filterValue], \"or\", [`${field}/LastName`, selectedFilterOperation, filterValue]]; \n else\n filterExpression = [[`FirstName`, selectedFilterOperation, filterValue], \"or\", [`LastName`, selectedFilterOperation, filterValue]]; \n break; \n } \n case 'notcontains': {\n if(field)\n filterExpression = [[`${field}/FirstName`, selectedFilterOperation, filterValue], \"and\", [`${field}/LastName`, selectedFilterOperation, filterValue]]; \n else\n filterExpression = [[`FirstName`, selectedFilterOperation, filterValue], \"and\", [`LastName`, selectedFilterOperation, filterValue]]; \n break; \n }\n case 'startswith': {\n if(field)\n filterExpression = [`${field}/FirstName`, selectedFilterOperation, filterValue];\n else\n filterExpression = [`FirstName`, selectedFilterOperation, filterValue];\n break; \n } \n case 'endswith': {\n if(field)\n filterExpression = [`${field}/LastName`, selectedFilterOperation, filterValue]; \n else\n filterExpression = [`LastName`, selectedFilterOperation, filterValue]; \n break; \n } \n default: { \n break; \n } \n } \n}\n\n if(!filterExpression){\n filterExpression = column.defaultCalculateFilterExpression.apply(column, arguments);\n }\n\n return filterExpression;\n}\n\n\nexport function dateFunctionFilterExpression(this:any, filterValue: any, selectedFilterOperation: any, field: string|undefined, odata_Function: string|undefined) {\n let column:any = this as any;\n let filterExpression : any[]|undefined;\n\n if(filterValue){\n switch(selectedFilterOperation) { \n case '=': {\n filterExpression = [[`${odata_Function}(${field})`, selectedFilterOperation, filterValue]]; \n break; \n } \n case '<>': {\n filterExpression = [[`${odata_Function}(${field})`, selectedFilterOperation, filterValue]]; \n break; \n }\n case '<': {\n //Less than\n filterExpression = [`${odata_Function}(${field})`, selectedFilterOperation, filterValue];\n break; \n } \n case '>': {\n //Greater than\n filterExpression = [`${odata_Function}(${field})`, selectedFilterOperation, filterValue]; \n break; \n } \n default: { \n break; \n } \n } \n}\n\n if(!filterExpression){\n filterExpression = column.defaultCalculateFilterExpression.apply(column, arguments);\n }\n\n // console.log(\"date filter: \", filterExpression);\n return filterExpression;\n}\n\nexport function getBlobUrl(storageAccountName: string, blobPath: string) : string{\n const delim = blobPath.startsWith('/') ? '' : '/';\n return `https://${storageAccountName}.blob.core.windows.net${delim}${blobPath}`;\n}\n\nexport function getProfileImageUrl(storageAccountName: string|undefined, blobContainerName: string|undefined, blobName: string|undefined) : string{\n if(storageAccountName && blobContainerName && blobName){\n return getBlobUrl(storageAccountName, blobContainerName + blobName);\n }\n return './assets/png/no-profile-img-32.png';\n}\n","export class LanguageInfo {\n LocaleId?: string; \n LanguageName?: string;\n FlagCode?: string;\n}","export class ThemeInfo {\n ThemeName?: string; \n ThemeCaption?: string;\n Svg?: string;\n}","export class Country {\n Id?: number; \n Enabled?: boolean;\n Code3?: string;\n Code2?: string;\n Name?: string;\n NameOfficial?: string;\n LocalName?: string;\n LocalNameOfficial?: string; \n Flag_32?: string;\n Flag_128?: string;\n Latitude?: number;\n Longitude?: number;\n zoom?: number;\n TradeArea?: string;\n Language?: string;\n Shipping_Require_State?: boolean; \n}\n\nexport class CountryState {\n Id?: number; \n Name?: string;\n Name_Native?: string;\n\n CountryId?: number; \n CountryCode?: string;\n CountryName?: string;\n CountryLocalName?: string;\n\n StateCode?: string;\n Type?: string;\n\n Latitude?: number;\n Longitude?: number;\n}\n\nexport class CountryCity {\n Id?: number; \n Name?: string;\n\n StateId?: number; \n StateCode?: string;\n StateName?: string;\n StateName_Native?: string;\n \n CountryId?: number; \n CountryCode?: string;\n CountryName?: string;\n CountryLocalName?: string;\n\n Latitude?: number;\n Longitude?: number;\n}\n\nexport class CountryPostalCode {\n Id?: number; \n Name?: string;\n PostalCode?: string;\n\n CountryId?: number; \n CountryCode?: string;\n CountryName?: string;\n CountryLocalName?: string;\n\n AdminName1?: string;\n AdminName1_Native?: string; \n AdminCode1?: string;\n AdminName2?: string;\n AdminCode2?: string;\n AdminName3?: string;\n AdminCode3?: string;\n\n Latitude?: number;\n Longitude?: number;\n}","export class OrganizationInfo {\n OrganizationId: string | undefined;\n Name: string | undefined;\n Email: string | undefined; \n AccountNumber: string | undefined;\n\n HashedPasswords: boolean | undefined;\n CertificateLogin: boolean | undefined;\n Demo: boolean | undefined;\n Active: boolean | undefined;\n\n PartnerId: string | undefined;\n PartnerName: string | undefined;\n\n StorageAccount: StorageAccountInfo | undefined;\n}\n\nexport class StorageAccountInfo {\n Key: string | undefined;\n Name: string | undefined;\n}","export interface IToolbarItem {\n name?: string;\n caption: string;\n svg: string;\n link?: string|undefined;\n linkstate?: any|undefined;\n click?: string|undefined;\n click_paramters?: any[]|undefined;\n children?: IToolbarItem[]|undefined;\n cssClass?: string | undefined;\n cssClass_Icon?: string | undefined;\n itemtype?: string | undefined;\n }\n \n export interface IMenuNode {\n name?: string;\n caption: string;\n svg: string;\n svg_active: string;\n link?: string|undefined;\n linkstate?: any|undefined;\n click?: string|undefined;\n click_paramters?: any[]|undefined; \n children?: IMenuNode[]|undefined;\n }\n\n export enum MenuState {\n OpenedNormal = \"OpenNormal\",\n OpenCollapsed = \"OpenCollapsed\",\n Closed = \"Closed\"\n }"],"names":["i2.MobicloudConfigService","i1.MobicloudConfigService","i2.MobicloudCoreService","i1"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mobicloud-core.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/mobicloud-core.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mobicloud-core.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/mobicloud-core.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mobicloud-core",
3
- "version": "1.17.21",
3
+ "version": "1.17.22",
4
4
  "author": "Brian Bugge",
5
5
  "dependencies": {
6
6
  "@angular/cdk": "^17.3.10",
@@ -43,18 +43,18 @@
43
43
  "esm": "./esm2022/api/mobicloud-core-api.mjs",
44
44
  "default": "./fesm2022/mobicloud-core-api.mjs"
45
45
  },
46
- "./devextreme": {
47
- "types": "./devextreme/index.d.ts",
48
- "esm2022": "./esm2022/devextreme/mobicloud-core-devextreme.mjs",
49
- "esm": "./esm2022/devextreme/mobicloud-core-devextreme.mjs",
50
- "default": "./fesm2022/mobicloud-core-devextreme.mjs"
51
- },
52
46
  "./components": {
53
47
  "types": "./components/index.d.ts",
54
48
  "esm2022": "./esm2022/components/mobicloud-core-components.mjs",
55
49
  "esm": "./esm2022/components/mobicloud-core-components.mjs",
56
50
  "default": "./fesm2022/mobicloud-core-components.mjs"
57
51
  },
52
+ "./devextreme": {
53
+ "types": "./devextreme/index.d.ts",
54
+ "esm2022": "./esm2022/devextreme/mobicloud-core-devextreme.mjs",
55
+ "esm": "./esm2022/devextreme/mobicloud-core-devextreme.mjs",
56
+ "default": "./fesm2022/mobicloud-core-devextreme.mjs"
57
+ },
58
58
  "./icons": {
59
59
  "types": "./icons/index.d.ts",
60
60
  "esm2022": "./esm2022/icons/mobicloud-core-icons.mjs",