@posiwise/smart-crm 0.0.53 → 0.0.55

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.
Files changed (69) hide show
  1. package/fesm2022/posiwise-smart-crm.mjs +244 -246
  2. package/fesm2022/posiwise-smart-crm.mjs.map +1 -1
  3. package/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.d.ts +1 -0
  4. package/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.d.ts +1 -1
  5. package/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.d.ts +1 -0
  6. package/package.json +3 -5
  7. package/esm2022/index.mjs +0 -52
  8. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component.mjs +0 -210
  9. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component.mjs +0 -191
  10. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component.mjs +0 -612
  11. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component.mjs +0 -71
  12. package/esm2022/lib/private/components/smart-crm-accounts/smart-crm-accounts.component.mjs +0 -361
  13. package/esm2022/lib/private/components/smart-crm-actions/smart-crm-actions.component.mjs +0 -267
  14. package/esm2022/lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component.mjs +0 -12
  15. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component.mjs +0 -103
  16. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component.mjs +0 -126
  17. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-configuration.component.mjs +0 -35
  18. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component.mjs +0 -88
  19. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component.mjs +0 -120
  20. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component.mjs +0 -79
  21. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component.mjs +0 -107
  22. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component.mjs +0 -97
  23. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component.mjs +0 -156
  24. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component.mjs +0 -99
  25. package/esm2022/lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component.mjs +0 -125
  26. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component.mjs +0 -197
  27. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component.mjs +0 -481
  28. package/esm2022/lib/private/components/smart-crm-contacts/smart-crm-contacts.component.mjs +0 -301
  29. package/esm2022/lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component.mjs +0 -12
  30. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component.mjs +0 -314
  31. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component.mjs +0 -104
  32. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component.mjs +0 -105
  33. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-insight.component.mjs +0 -27
  34. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component.mjs +0 -80
  35. package/esm2022/lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component.mjs +0 -160
  36. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component.mjs +0 -227
  37. package/esm2022/lib/private/components/smart-crm-leads/smart-crm-leads.component.mjs +0 -146
  38. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component.mjs +0 -79
  39. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component.mjs +0 -269
  40. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component.mjs +0 -157
  41. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component.mjs +0 -60
  42. package/esm2022/lib/private/components/smart-crm-marketing/smart-crm-marketing.component.mjs +0 -18
  43. package/esm2022/lib/private/components/smart-crm-media/smart-crm-social-media/smart-crm-social-media.component.mjs +0 -12
  44. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component.mjs +0 -236
  45. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component.mjs +0 -376
  46. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component.mjs +0 -483
  47. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component.mjs +0 -256
  48. package/esm2022/lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component.mjs +0 -14
  49. package/esm2022/lib/private/components/smart-crm-tabs/smart-crm-tabs.component.mjs +0 -99
  50. package/esm2022/lib/private/smart-crm-private.module.mjs +0 -356
  51. package/esm2022/lib/private/smart-crm-private.routing.module.mjs +0 -318
  52. package/esm2022/lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component.mjs +0 -56
  53. package/esm2022/lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component.mjs +0 -57
  54. package/esm2022/lib/public/components/smart-crm-signup/smart-crm-signup.component.mjs +0 -38
  55. package/esm2022/lib/public/smart-crm-public.module.mjs +0 -46
  56. package/esm2022/lib/public/smart-crm-public.routing.module.mjs +0 -44
  57. package/esm2022/lib/shared/interface/crm-account.interface.mjs +0 -2
  58. package/esm2022/lib/shared/interface/crm-action.interface.mjs +0 -2
  59. package/esm2022/lib/shared/interface/crm-contact.interface.mjs +0 -2
  60. package/esm2022/lib/shared/interface/crm-lead.interface.mjs +0 -2
  61. package/esm2022/lib/shared/interface/crm-newsletter.interface.mjs +0 -2
  62. package/esm2022/lib/shared/interface/crm-opportunity.interface.mjs +0 -2
  63. package/esm2022/lib/shared/interface/crm-source.interface.mjs +0 -2
  64. package/esm2022/lib/shared/interface/crm-stages.interface.mjs +0 -2
  65. package/esm2022/lib/shared/interface/crm-widget.interface.mjs +0 -2
  66. package/esm2022/lib/shared/interface/smart-crm-module.interface.mjs +0 -2
  67. package/esm2022/lib/shared/models/smart-crm.model.mjs +0 -191
  68. package/esm2022/lib/shared/routers/routers.mjs +0 -24
  69. package/esm2022/posiwise-smart-crm.mjs +0 -5
@@ -40,6 +40,7 @@ export declare class SmartCrmCompaniesComponent extends AppBaseComponent impleme
40
40
  accountActivities: any[];
41
41
  loading: boolean;
42
42
  hasAccess: boolean;
43
+ canViewMrr: boolean;
43
44
  isLoaded: boolean;
44
45
  routers: {
45
46
  accounts: string;
@@ -9,6 +9,7 @@ export declare class SmartCrmAccountInsightComponent extends AppBaseComponent im
9
9
  userId: number;
10
10
  user: User;
11
11
  hasAccess: boolean;
12
+ canViewMrr: boolean;
12
13
  signedUpLastThirtyDays: signedUpLastThirtyDays[];
13
14
  activeOpportunities: activeOpportunities[];
14
15
  accountAtRisk: any;
@@ -94,7 +95,6 @@ export declare class SmartCrmAccountInsightComponent extends AppBaseComponent im
94
95
  private getAccountInsights;
95
96
  private getAccountGeography;
96
97
  checkPermission(permission: string): boolean;
97
- getMainCurrencyForTable(items: unknown[]): string;
98
98
  ngOnDestroy(): void;
99
99
  static ɵfac: i0.ɵɵFactoryDeclaration<SmartCrmAccountInsightComponent, never>;
100
100
  static ɵcmp: i0.ɵɵComponentDeclaration<SmartCrmAccountInsightComponent, "pw-smart-crm-account-insight", never, {}, {}, never, never, false, never>;
@@ -33,6 +33,7 @@ export declare class SmartCrmOpportunitiesListComponent extends AppBaseComponent
33
33
  loading: boolean;
34
34
  isLoaded: boolean;
35
35
  hasAccess: boolean;
36
+ canViewMrr: boolean;
36
37
  routers: {
37
38
  accounts: string;
38
39
  contacts: string;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@posiwise/smart-crm",
3
- "version": "0.0.53",
3
+ "version": "0.0.55",
4
4
  "peerDependencies": {
5
- "@angular/common": "17.3.11",
6
- "@angular/core": "17.3.11"
5
+ "@angular/common": "^19.2.18",
6
+ "@angular/core": "^19.2.18"
7
7
  },
8
8
  "dependencies": {
9
9
  "tslib": "^2.6.2"
@@ -17,8 +17,6 @@
17
17
  },
18
18
  ".": {
19
19
  "types": "./index.d.ts",
20
- "esm2022": "./esm2022/posiwise-smart-crm.mjs",
21
- "esm": "./esm2022/posiwise-smart-crm.mjs",
22
20
  "default": "./fesm2022/posiwise-smart-crm.mjs"
23
21
  }
24
22
  }
package/esm2022/index.mjs DELETED
@@ -1,52 +0,0 @@
1
- // Private components
2
- export * from './lib/private/components/smart-crm-accounts/smart-crm-account-details/smart-crm-account-details.component';
3
- export * from './lib/private/components/smart-crm-accounts/smart-crm-account-files/smart-crm-account-files.component';
4
- export * from './lib/private/components/smart-crm-accounts/smart-crm-account-info/smart-crm-account-info.component';
5
- export * from './lib/private/components/smart-crm-accounts/smart-crm-accounts.component';
6
- export * from './lib/private/components/smart-crm-competition/smart-crm-competition/smart-crm-competition.component';
7
- export * from './lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions-details/smart-crm-actions-details.component';
8
- export * from './lib/private/components/smart-crm-configuration/smart-crm-actions/smart-crm-actions.component';
9
- export * from './lib/private/components/smart-crm-configuration/smart-crm-configuration.component';
10
- export * from './lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories-details/smart-crm-opportunity-categories-details.component';
11
- export * from './lib/private/components/smart-crm-configuration/smart-crm-opportunity-categories/smart-crm-opportunity-categories.component';
12
- export * from './lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source-details/smart-crm-source-details.component';
13
- export * from './lib/private/components/smart-crm-configuration/smart-crm-source/smart-crm-source.component';
14
- export * from './lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stage-details/smart-crm-stage-details.component';
15
- export * from './lib/private/components/smart-crm-configuration/smart-crm-stages/smart-crm-stages.component';
16
- export * from './lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets-details/smart-crm-widgets-details.component';
17
- export * from './lib/private/components/smart-crm-configuration/smart-crm-widgets/smart-crm-widgets.component';
18
- export * from './lib/private/components/smart-crm-contacts/smart-crm-contact-details/smart-crm-contact-details.component';
19
- export * from './lib/private/components/smart-crm-contacts/smart-crm-contact-info/smart-crm-contact-info.component';
20
- export * from './lib/private/components/smart-crm-contacts/smart-crm-contacts.component';
21
- export * from './lib/private/components/smart-crm-customer/smart-crm-customer-success/smart-crm-customer-success.component';
22
- export * from './lib/private/components/smart-crm-media/smart-crm-social-media/smart-crm-social-media.component';
23
- export * from './lib/private/components/smart-crm-insight/smart-crm-insight.component';
24
- export * from './lib/private/components/smart-crm-accounts/smart-crm-account-invoices/smart-crm-account-invoices.component';
25
- export * from './lib/private/components/smart-crm-insight/smart-crm-contact-insight/smart-crm-contact-insight.component';
26
- export * from './lib/private/components/smart-crm-insight/smart-crm-account-insight/smart-crm-account-insight.component';
27
- export * from './lib/private/components/smart-crm-insight/smart-crm-opportunities-insight/smart-crm-opportunities-insight.component';
28
- export * from './lib/private/components/smart-crm-insight/smart-crm-analysis-insight/smart-crm-analysis.component';
29
- export * from './lib/private/components/smart-crm-insight/smart-crm-marketing-insight/smart-crm-marketing-insight.component';
30
- export * from './lib/private/components/smart-crm-leads/smart-crm-leads-details/smart-crm-leads-details.component';
31
- export * from './lib/private/components/smart-crm-leads/smart-crm-leads.component';
32
- export * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-contacts/smart-crm-marketing-contacts.component';
33
- export * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-details/smart-crm-marketing-details.component';
34
- export * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-list.component';
35
- export * from './lib/private/components/smart-crm-marketing/smart-crm-marketing-list/smart-crm-marketing-view-details/smart-crm-marketing-view-details.component';
36
- export * from './lib/private/components/smart-crm-marketing/smart-crm-marketing.component';
37
- export * from './lib/private/components/smart-crm-opportunities/smart-crm-board/smart-crm-board.component';
38
- export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-details/smart-crm-opportunities-details.component';
39
- export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-info/smart-crm-opportunities-info.component';
40
- export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities-list/smart-crm-opportunities-list.component';
41
- export * from './lib/private/components/smart-crm-opportunities/smart-crm-opportunities.component';
42
- export * from './lib/private/components/smart-crm-actions/smart-crm-actions.component';
43
- export * from './lib/private/components/smart-crm-tabs/smart-crm-tabs.component';
44
- export * from './lib/private/smart-crm-private.routing.module';
45
- export * from './lib/private/smart-crm-private.module';
46
- // Public
47
- export * from './lib/public/components/smart-crm-newsletter-confirmation/smart-crm-newsletter-confirmation.component';
48
- export * from './lib/public/components/smart-crm-newsletter-unsubscribe/smart-crm-newsletter-unsubscribe.component';
49
- export * from './lib/public/components/smart-crm-signup/smart-crm-signup.component';
50
- export * from './lib/public/smart-crm-public.routing.module';
51
- export * from './lib/public/smart-crm-public.module';
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLGNBQWMsMkdBQTJHLENBQUM7QUFDMUgsY0FBYyx1R0FBdUcsQ0FBQztBQUN0SCxjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsMEVBQTBFLENBQUM7QUFDekYsY0FBYyxzR0FBc0csQ0FBQztBQUNySCxjQUFjLGtJQUFrSSxDQUFDO0FBQ2pKLGNBQWMsZ0dBQWdHLENBQUM7QUFDL0csY0FBYyxvRkFBb0YsQ0FBQztBQUNuRyxjQUFjLCtLQUErSyxDQUFDO0FBQzlMLGNBQWMsOEhBQThILENBQUM7QUFDN0ksY0FBYywrSEFBK0gsQ0FBQztBQUM5SSxjQUFjLDhGQUE4RixDQUFDO0FBQzdHLGNBQWMsNkhBQTZILENBQUM7QUFDNUksY0FBYyw4RkFBOEYsQ0FBQztBQUM3RyxjQUFjLGtJQUFrSSxDQUFDO0FBQ2pKLGNBQWMsZ0dBQWdHLENBQUM7QUFDL0csY0FBYywyR0FBMkcsQ0FBQztBQUMxSCxjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsMEVBQTBFLENBQUM7QUFDekYsY0FBYyw2R0FBNkcsQ0FBQztBQUM1SCxjQUFjLGtHQUFrRyxDQUFDO0FBQ2pILGNBQWMsd0VBQXdFLENBQUM7QUFDdkYsY0FBYyw2R0FBNkcsQ0FBQztBQUM1SCxjQUFjLDBHQUEwRyxDQUFDO0FBQ3pILGNBQWMsMEdBQTBHLENBQUM7QUFDekgsY0FBYyxzSEFBc0gsQ0FBQztBQUNySSxjQUFjLG9HQUFvRyxDQUFDO0FBQ25ILGNBQWMsOEdBQThHLENBQUM7QUFDN0gsY0FBYyxvR0FBb0csQ0FBQztBQUNuSCxjQUFjLG9FQUFvRSxDQUFDO0FBQ25GLGNBQWMsMklBQTJJLENBQUM7QUFDMUosY0FBYyx5SUFBeUksQ0FBQztBQUN4SixjQUFjLDBHQUEwRyxDQUFDO0FBQ3pILGNBQWMsbUpBQW1KLENBQUM7QUFDbEssY0FBYyw0RUFBNEUsQ0FBQztBQUMzRixjQUFjLDRGQUE0RixDQUFDO0FBQzNHLGNBQWMseUpBQXlKLENBQUM7QUFDeEssY0FBYyxtSkFBbUosQ0FBQztBQUNsSyxjQUFjLHNIQUFzSCxDQUFDO0FBQ3JJLGNBQWMsb0ZBQW9GLENBQUM7QUFDbkcsY0FBYyx3RUFBd0UsQ0FBQztBQUN2RixjQUFjLGtFQUFrRSxDQUFDO0FBQ2pGLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxTQUFTO0FBQ1QsY0FBYyx1R0FBdUcsQ0FBQztBQUN0SCxjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMscUVBQXFFLENBQUM7QUFDcEYsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHNDQUFzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUHJpdmF0ZSBjb21wb25lbnRzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWFjY291bnRzL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMvc21hcnQtY3JtLWFjY291bnQtZGV0YWlscy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1maWxlcy9zbWFydC1jcm0tYWNjb3VudC1maWxlcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1pbmZvL3NtYXJ0LWNybS1hY2NvdW50LWluZm8uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnRzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbXBldGl0aW9uL3NtYXJ0LWNybS1jb21wZXRpdGlvbi9zbWFydC1jcm0tY29tcGV0aXRpb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy1kZXRhaWxzL3NtYXJ0LWNybS1hY3Rpb25zLWRldGFpbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uL3NtYXJ0LWNybS1jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMtZGV0YWlscy9zbWFydC1jcm0tb3Bwb3J0dW5pdHktY2F0ZWdvcmllcy1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXR5LWNhdGVnb3JpZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc291cmNlL3NtYXJ0LWNybS1zb3VyY2UtZGV0YWlscy9zbWFydC1jcm0tc291cmNlLWRldGFpbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc291cmNlL3NtYXJ0LWNybS1zb3VyY2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29uZmlndXJhdGlvbi9zbWFydC1jcm0tc3RhZ2VzL3NtYXJ0LWNybS1zdGFnZS1kZXRhaWxzL3NtYXJ0LWNybS1zdGFnZS1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXN0YWdlcy9zbWFydC1jcm0tc3RhZ2VzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMtZGV0YWlscy9zbWFydC1jcm0td2lkZ2V0cy1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbmZpZ3VyYXRpb24vc21hcnQtY3JtLXdpZGdldHMvc21hcnQtY3JtLXdpZGdldHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY29udGFjdHMvc21hcnQtY3JtLWNvbnRhY3QtZGV0YWlscy9zbWFydC1jcm0tY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWNvbnRhY3RzL3NtYXJ0LWNybS1jb250YWN0LWluZm8vc21hcnQtY3JtLWNvbnRhY3QtaW5mby5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1jb250YWN0cy9zbWFydC1jcm0tY29udGFjdHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tY3VzdG9tZXIvc21hcnQtY3JtLWN1c3RvbWVyLXN1Y2Nlc3Mvc21hcnQtY3JtLWN1c3RvbWVyLXN1Y2Nlc3MuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWVkaWEvc21hcnQtY3JtLXNvY2lhbC1tZWRpYS9zbWFydC1jcm0tc29jaWFsLW1lZGlhLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWluc2lnaHQvc21hcnQtY3JtLWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtaW52b2ljZXMvc21hcnQtY3JtLWFjY291bnQtaW52b2ljZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tY29udGFjdC1pbnNpZ2h0L3NtYXJ0LWNybS1jb250YWN0LWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tYWNjb3VudC1pbnNpZ2h0L3NtYXJ0LWNybS1hY2NvdW50LWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbnNpZ2h0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWluc2lnaHQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tYW5hbHlzaXMtaW5zaWdodC9zbWFydC1jcm0tYW5hbHlzaXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0taW5zaWdodC9zbWFydC1jcm0tbWFya2V0aW5nLWluc2lnaHQvc21hcnQtY3JtLW1hcmtldGluZy1pbnNpZ2h0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWxlYWRzL3NtYXJ0LWNybS1sZWFkcy1kZXRhaWxzL3NtYXJ0LWNybS1sZWFkcy1kZXRhaWxzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLWxlYWRzL3NtYXJ0LWNybS1sZWFkcy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctY29udGFjdHMvc21hcnQtY3JtLW1hcmtldGluZy1jb250YWN0cy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy1saXN0L3NtYXJ0LWNybS1tYXJrZXRpbmctZGV0YWlscy9zbWFydC1jcm0tbWFya2V0aW5nLWRldGFpbHMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tbWFya2V0aW5nL3NtYXJ0LWNybS1tYXJrZXRpbmctbGlzdC9zbWFydC1jcm0tbWFya2V0aW5nLXZpZXctZGV0YWlscy9zbWFydC1jcm0tbWFya2V0aW5nLXZpZXctZGV0YWlscy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1tYXJrZXRpbmcvc21hcnQtY3JtLW1hcmtldGluZy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1ib2FyZC9zbWFydC1jcm0tYm9hcmQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0L3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWRldGFpbHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtZGV0YWlscy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzL3NtYXJ0LWNybS1vcHBvcnR1bml0aWVzLWxpc3Qvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtaW5mby9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1pbmZvLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMtbGlzdC9zbWFydC1jcm0tb3Bwb3J0dW5pdGllcy1saXN0LmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL2NvbXBvbmVudHMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMvc21hcnQtY3JtLW9wcG9ydHVuaXRpZXMuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWN0aW9ucy9zbWFydC1jcm0tYWN0aW9ucy5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS10YWJzL3NtYXJ0LWNybS10YWJzLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcml2YXRlL3NtYXJ0LWNybS1wcml2YXRlLnJvdXRpbmcubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ByaXZhdGUvc21hcnQtY3JtLXByaXZhdGUubW9kdWxlJztcblxuLy8gUHVibGljXG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvY29tcG9uZW50cy9zbWFydC1jcm0tbmV3c2xldHRlci1jb25maXJtYXRpb24vc21hcnQtY3JtLW5ld3NsZXR0ZXItY29uZmlybWF0aW9uLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvY29tcG9uZW50cy9zbWFydC1jcm0tbmV3c2xldHRlci11bnN1YnNjcmliZS9zbWFydC1jcm0tbmV3c2xldHRlci11bnN1YnNjcmliZS5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHVibGljL2NvbXBvbmVudHMvc21hcnQtY3JtLXNpZ251cC9zbWFydC1jcm0tc2lnbnVwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvc21hcnQtY3JtLXB1YmxpYy5yb3V0aW5nLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wdWJsaWMvc21hcnQtY3JtLXB1YmxpYy5tb2R1bGUnO1xuIl19
@@ -1,210 +0,0 @@
1
- import { Component, Injector } from '@angular/core';
2
- import { AppBaseComponent } from '@posiwise/app-base-component';
3
- import { CommonService, GeoService, SubscriptionService } from '@posiwise/common-services';
4
- import { PAGE_SIZE } from '@posiwise/common-utilities';
5
- import { HelperService } from '@posiwise/helper-service';
6
- import { CrmService } from '@posiwise/smart-crm-shared';
7
- import { AppSmartCrm } from '../../../../shared/models/smart-crm.model';
8
- import { ROUTERS } from '../../../../shared/routers/routers';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@posiwise/common-services";
11
- import * as i2 from "@posiwise/smart-crm-shared";
12
- import * as i3 from "@angular/common";
13
- import * as i4 from "@angular/forms";
14
- import * as i5 from "@posiwise/directives";
15
- import * as i6 from "@angular-magic/ngx-gp-autocomplete";
16
- import * as i7 from "primeng/dropdown";
17
- import * as i8 from "primeng/progressspinner";
18
- import * as i9 from "primeng/autocomplete";
19
- import * as i10 from "@posiwise/shared-components";
20
- import * as i11 from "@jsverse/transloco";
21
- export class SmartCrmCompanyDetailsComponent extends AppBaseComponent {
22
- constructor(injector, subscriptionService, crmService, commonService, geoService) {
23
- super(injector);
24
- this.subscriptionService = subscriptionService;
25
- this.crmService = crmService;
26
- this.commonService = commonService;
27
- this.geoService = geoService;
28
- this.countryNames = [];
29
- this.subscriptionMembers = [];
30
- this.status = [];
31
- this.priority = [];
32
- this.source = [];
33
- this.isLoading = true;
34
- this.onEdit = false;
35
- this.submitted = false;
36
- this.buttonBusy = false;
37
- this.form = AppSmartCrm.getAccountsForm();
38
- }
39
- onSearchOwner(event) {
40
- let values = [];
41
- if (event.query) {
42
- values = this.allSubscriptionMembers?.filter((x) => {
43
- return x.first_name.toLowerCase().includes(event.query.toLowerCase());
44
- });
45
- }
46
- else {
47
- this.allSubscriptionMembers?.forEach(item => {
48
- values.push(item);
49
- });
50
- }
51
- this.filteredOwners = values.map(owner => {
52
- return {
53
- ...owner,
54
- displayName: HelperService.formatDisplayName(owner)
55
- };
56
- });
57
- }
58
- ngOnInit() {
59
- this.organizationTypes$ = this.commonService.getOrganizationTypes();
60
- this.organizationSizes$ = this.commonService.getOrganizationSizes();
61
- this.organizationIndustries$ = this.commonService.getOrganizationIndustries();
62
- this.countries$ = this.geoService.getCountries();
63
- this.countries$.subscribe(res => {
64
- this.countryNames = res;
65
- });
66
- this.route.params.subscribe(data => {
67
- if (Number(data['id'])) {
68
- this.id = Number(data['id']);
69
- }
70
- else {
71
- this.isLoading = false;
72
- }
73
- });
74
- this.getUserSubscription().subscribe(response => {
75
- this.subscription = response;
76
- if (this.subscription?.id) {
77
- this.hasAccess = this.hasAdminAccess(this.subscription?.id);
78
- this.getUserInfo(this.subscription?.id, this.hasAccess);
79
- this.accountDefaultValues(this.subscription?.id);
80
- this.form.get('subscription_id').setValue(this.subscription?.id);
81
- }
82
- });
83
- }
84
- /** Function to call account default values */
85
- accountDefaultValues(id) {
86
- this.crmService.getCrmAccountDefaultValues(id).subscribe(response => {
87
- this.status = response.status;
88
- this.priority = response.priority;
89
- this.source = response.source;
90
- });
91
- }
92
- /** Function to get subscription members */
93
- getAllSubscriptionMembers(id) {
94
- this.subscriptionService
95
- .getEnrolledSubscription(id, { page_size: PAGE_SIZE })
96
- .subscribe(response => {
97
- this.allSubscriptionMembers = response.members;
98
- if (this.id) {
99
- this.onEdit = true;
100
- this.getAccountDetail();
101
- }
102
- else {
103
- this.onEdit = false;
104
- }
105
- if (this.id === 0) {
106
- const currentUser = this.allSubscriptionMembers.find(x => x.id === this.user.id);
107
- this.form.get('owner_id').setValue({
108
- ...currentUser,
109
- displayName: HelperService.formatDisplayName(currentUser)
110
- });
111
- }
112
- });
113
- }
114
- // /** Function to get user info */
115
- getUserInfo(subscriptionId, hasAccess) {
116
- this.userStore().subscribe(user => {
117
- this.user = {
118
- ...user,
119
- displayName: HelperService.formatDisplayName(user)
120
- };
121
- if (hasAccess) {
122
- this.form.get('owner_id').setValue(this.user);
123
- this.getAllSubscriptionMembers(subscriptionId);
124
- }
125
- else {
126
- this.form.get('owner_id').setValue(this.user);
127
- }
128
- });
129
- }
130
- /** Function to get form controls */
131
- get f() {
132
- return this.form.controls;
133
- }
134
- /** Function to execute on form submit */
135
- onSave() {
136
- this.buttonBusy = true;
137
- this.submitted = true;
138
- if (this.form.valid) {
139
- this.form.get('owner_id').setValue(this.form.get('owner_id').value.id);
140
- this.form.get('country').setValue(this.form.get('country').value?.code ?? null);
141
- const sub$ = this.id
142
- ? this.crmService.updateAccount(this.subscription?.id, this.id, this.form.value)
143
- : this.crmService.postAccount(this.form.value, this.subscription?.id);
144
- sub$.subscribe(response => {
145
- this.toast.success(this.translation.translate('Crm.AccountMessage.UpdatedMessage'));
146
- this.router.navigate([
147
- `/${this.subscription?.slug}${ROUTERS.accountInfo}${response.id}`
148
- ]);
149
- }).add(() => {
150
- this.buttonBusy = false;
151
- });
152
- }
153
- }
154
- /** Function to execute on location select */
155
- handleAddressChange(event) {
156
- this.form.get('location').setValue(event.formatted_address);
157
- }
158
- /** Function to get account detail on edit form */
159
- getAccountDetail() {
160
- this.isLoading = true;
161
- this.crmService.getAccountDetail(this.subscription?.id, this.id).subscribe(res => {
162
- this.form.patchValue(res);
163
- this.data = res;
164
- this.allSubscriptionMembers.forEach(member => {
165
- if (this.data.owner_id === member.id) {
166
- this.form.get('owner_id').patchValue({
167
- ...member,
168
- displayName: HelperService.formatDisplayName(member)
169
- });
170
- }
171
- });
172
- this.countryNames.forEach(x => {
173
- if (x['code'] === res['country']) {
174
- this.form.get('country').patchValue(x);
175
- }
176
- });
177
- this.isLoading = false;
178
- this.subscriptionService
179
- .getEnrolledSubscription(this.subscription?.id, { page_size: PAGE_SIZE })
180
- .subscribe({
181
- next: response => {
182
- this.subscriptionMembers = response.members;
183
- },
184
- error: error => this.toast.showToast(error)
185
- });
186
- });
187
- }
188
- onSearchCountry(event) {
189
- let values = [];
190
- if (event.query) {
191
- values = this.countryNames.filter((x) => {
192
- return x.name.toLowerCase().includes(event.query.toLowerCase());
193
- });
194
- }
195
- this.countryNames.forEach(item => {
196
- values.push(item);
197
- });
198
- this.filteredCountries = values;
199
- }
200
- ngOnDestroy() {
201
- super.ngOnDestroy();
202
- }
203
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmCompanyDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.SubscriptionService }, { token: i2.CrmService }, { token: i1.CommonService }, { token: i1.GeoService }], target: i0.ɵɵFactoryTarget.Component }); }
204
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SmartCrmCompanyDetailsComponent, selector: "pw-company-details", usesInheritance: true, ngImport: i0, template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\" for=\"Owner\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"displayName\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <p-dropdown\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\"\n [placeholder]=\"'Select Organization Type'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <p-dropdown\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\"\n [placeholder]=\"'Select Organization Industry'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <p-dropdown\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\"\n [placeholder]=\"'Select Organization Size'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <p-dropdown\n [options]=\"status\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\"\n [placeholder]=\"'Select Status'\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <p-dropdown\n [options]=\"priority\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\"\n [placeholder]=\"'Select Priority'\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <p-dropdown\n [options]=\"source\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\"\n [placeholder]=\"'Select Source'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.user-info .label{color:#777;font-size:14px;text-transform:capitalize}.user-info .user-value{border:0;border-bottom:1px solid rgb(119,119,119)}.user-info .user-value:focus{box-shadow:none}.user-info .user-value.is-invalid{border-color:#ff586b}.control-btns{display:none}::ng-deep .p-overlay{width:100%!important;min-width:100%!important;max-width:100%!important;left:0!important}::ng-deep .p-autocomplete-items li{white-space:nowrap!important;overflow:auto!important;text-overflow:ellipsis!important}::ng-deep .p-autocomplete-items li:hover{text-overflow:clip!important}.name-block{width:85%}.comment-field{border:0;border-bottom:1px solid rgb(242,242,242);color:#1769e1;display:none;font-size:15px;min-height:100px;padding:2px 5px!important}.comment-field:focus{border:1px solid rgb(23,105,225)!important;border-bottom:0;box-shadow:none}p{max-width:85%;white-space:pre-wrap}.auto-complete{display:none;margin-top:10px}.show-controls .comment-field,.show-controls .auto-complete,.show-controls .control-btns{display:block}.show-controls p,.show-controls .edit-btn,.show-controls .action-owner{display:none}select{appearance:none}textarea{resize:none}.clear-both{clear:both}.isDisabled input[type=text],.isDisabled input,.isDisabled textarea,.isDisabled p-dropdown,.isDisabled select{pointer-events:none}.isDisabled select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none!important}.timeline-card.card{min-height:auto}@media (max-width: 768px){.completed-toggle{padding-top:10px}}.when-btn:focus{border:0;box-shadow:none}.no-actions{clear:both}.timeline-container{height:700px;overflow-y:scroll}.action-btn.active{color:#fff!important;background-color:var(--first)}.form-action-buttons{margin-bottom:14px;margin-top:15px}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgxGpAutocompleteDirective, selector: "[ngx-gp-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }, { kind: "component", type: i7.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i8.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i9.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i10.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i11.TranslocoPipe, name: "transloco" }] }); }
205
- }
206
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartCrmCompanyDetailsComponent, decorators: [{
207
- type: Component,
208
- args: [{ selector: 'pw-company-details', template: "<div class=\"me-auto col-xs-6\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>{{ 'Crm.AccountMessage.Account' | transloco }}:\n {{ data?.name ? data?.name : ('Label.AddNew' | transloco) }}</span>\n </h3>\n</div>\n<div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n</div>\n<div class=\"p-2 mt-3\" *ngIf=\"!isLoading\">\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Name' | transloco\"\n name=\"name\"\n [errorMsg]=\"'User.Account.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n id=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Location' | transloco\"\n [errorMsg]=\"'Crm.AccountMessage.LocationErrorMessage' | transloco\"\n name=\"location\">\n <input ngx-gp-autocomplete\n class=\"form-control\"\n #places=\"ngx-places\"\n formControlName=\"location\"\n (onAddressChange)=\"handleAddressChange($event)\"\n [ngClass]=\"{ 'is-invalid': submitted && f['location'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\">\n <label class=\"mb-2\" for=\"Country\">{{ 'Crm.AccountMessage.Country' | transloco }}</label>\n <p-autoComplete formControlName=\"country\"\n [suggestions]=\"filteredCountries\"\n (completeMethod)=\"onSearchCountry($event)\"\n dataKey=\"code\"\n field=\"name\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Country\"\n [dropdown]=\"true\"\n [inputStyle]=\"\n submitted && f['country'].errors\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Tel' | transloco\"\n name=\"tel\"\n [errorMsg]=\"'Crm.AccountMessage.TelErrorMessage' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"tel\"\n id=\"tel\"\n [ngClass]=\"{ 'is-invalid': submitted && f['tel'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"ui-fluid skills-modal col-sm-4\"\n [class.d-none]=\"!hasAccess\">\n <label class=\"mb-2\" for=\"Owner\">{{ 'Crm.AccountMessage.Owner' | transloco\n }}<span class=\"text-danger required-icon\">*</span></label>\n <p-autoComplete formControlName=\"owner_id\"\n [suggestions]=\"filteredOwners\"\n (completeMethod)=\"onSearchOwner($event)\"\n dataKey=\"id\"\n field=\"displayName\"\n [multiple]=\"false\"\n styleClass=\"w-100\"\n placeholder=\"Search Owner\"\n [dropdown]=\"true\">\n </p-autoComplete>\n </div>\n <div class=\"col-12 col-sm-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.CompanyUrl' | transloco\"\n name=\"company_url\">\n <input type=\"url\"\n class=\"form-control\"\n formControlName=\"company_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['company_url'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationType' | transloco\"\n name=\"organization_type_id\"\n *ngIf=\"organizationTypes$ | async as types\">\n <p-dropdown\n [options]=\"types['organization_types']\"\n formControlName=\"organization_type_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_type_id'].errors }\"\n [placeholder]=\"'Select Organization Type'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Organization.OrganizationIndustry' | transloco\"\n name=\"organization_industry_id\"\n *ngIf=\"organizationIndustries$ | async as industries\">\n <p-dropdown\n [options]=\"industries['organization_industries']\"\n formControlName=\"organization_industry_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_industry_id'].errors }\"\n [placeholder]=\"'Select Organization Industry'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Size' | transloco\"\n name=\"organization_size_id\"\n *ngIf=\"organizationSizes$ | async as sizes\">\n <p-dropdown\n [options]=\"sizes['organization_sizes']\"\n formControlName=\"organization_size_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['organization_size_id'].errors }\"\n [placeholder]=\"'Select Organization Size'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Status' | transloco\"\n name=\"status\">\n <p-dropdown\n [options]=\"status\"\n formControlName=\"status\"\n [ngClass]=\"{ 'is-invalid': submitted && f['status'].errors }\"\n [placeholder]=\"'Select Status'\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Priority' | transloco\"\n name=\"priority\">\n <p-dropdown\n [options]=\"priority\"\n formControlName=\"priority\"\n [ngClass]=\"{ 'is-invalid': submitted && f['priority'].errors }\"\n [placeholder]=\"'Select Priority'\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-4 col-lg-4\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Source' | transloco\"\n name=\"crm_source_id\">\n <p-dropdown\n [options]=\"source\"\n formControlName=\"crm_source_id\"\n [ngClass]=\"{ 'is-invalid': submitted && f['crm_source_id'].errors }\"\n [placeholder]=\"'Select Source'\"\n optionValue=\"id\"\n optionLabel=\"name\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-sm-12 mt-2\">\n <pw-input-container [label]=\"'Crm.AccountMessage.Description' | transloco\"\n name=\"description\">\n <textarea rows=\"5\"\n type=\"text\"\n class=\"form-control\"\n formControlName=\"description\"\n id=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\"></textarea>\n </pw-input-container>\n </div>\n <div class=\"col-12 text-end mt-3\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"buttonBusy\"\n class=\"btn btn-primary\"\n [disabled]=\"form.invalid\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.user-info .label{color:#777;font-size:14px;text-transform:capitalize}.user-info .user-value{border:0;border-bottom:1px solid rgb(119,119,119)}.user-info .user-value:focus{box-shadow:none}.user-info .user-value.is-invalid{border-color:#ff586b}.control-btns{display:none}::ng-deep .p-overlay{width:100%!important;min-width:100%!important;max-width:100%!important;left:0!important}::ng-deep .p-autocomplete-items li{white-space:nowrap!important;overflow:auto!important;text-overflow:ellipsis!important}::ng-deep .p-autocomplete-items li:hover{text-overflow:clip!important}.name-block{width:85%}.comment-field{border:0;border-bottom:1px solid rgb(242,242,242);color:#1769e1;display:none;font-size:15px;min-height:100px;padding:2px 5px!important}.comment-field:focus{border:1px solid rgb(23,105,225)!important;border-bottom:0;box-shadow:none}p{max-width:85%;white-space:pre-wrap}.auto-complete{display:none;margin-top:10px}.show-controls .comment-field,.show-controls .auto-complete,.show-controls .control-btns{display:block}.show-controls p,.show-controls .edit-btn,.show-controls .action-owner{display:none}select{appearance:none}textarea{resize:none}.clear-both{clear:both}.isDisabled input[type=text],.isDisabled input,.isDisabled textarea,.isDisabled p-dropdown,.isDisabled select{pointer-events:none}.isDisabled select{appearance:none;-webkit-appearance:none;-moz-appearance:none;background-image:none!important}.timeline-card.card{min-height:auto}@media (max-width: 768px){.completed-toggle{padding-top:10px}}.when-btn:focus{border:0;box-shadow:none}.no-actions{clear:both}.timeline-container{height:700px;overflow-y:scroll}.action-btn.active{color:#fff!important;background-color:var(--first)}.form-action-buttons{margin-bottom:14px;margin-top:15px}\n"] }]
209
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.SubscriptionService }, { type: i2.CrmService }, { type: i1.CommonService }, { type: i1.GeoService }] });
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY3JtLWFjY291bnQtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NtYXJ0LWNybS9zcmMvbGliL3ByaXZhdGUvY29tcG9uZW50cy9zbWFydC1jcm0tYWNjb3VudHMvc21hcnQtY3JtLWFjY291bnQtZGV0YWlscy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc21hcnQtY3JtL3NyYy9saWIvcHJpdmF0ZS9jb21wb25lbnRzL3NtYXJ0LWNybS1hY2NvdW50cy9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzL3NtYXJ0LWNybS1hY2NvdW50LWRldGFpbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0YsT0FBTyxFQUFXLFNBQVMsRUFBc0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBV3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPN0QsTUFBTSxPQUFPLCtCQUFnQyxTQUFRLGdCQUFnQjtJQWdDakUsWUFDSSxRQUFrQixFQUNELG1CQUF3QyxFQUN4QyxVQUFzQixFQUN0QixhQUE0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O2dCQUM3QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUNwRSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0F2TlEsK0JBQStCO21HQUEvQiwrQkFBK0IsaUZDMUI1Qyw4c1FBcU1BOzs0RkQzS2EsK0JBQStCO2tCQUwzQyxTQUFTOytCQUNJLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlLCBHZW9TZXJ2aWNlLCBTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb3VudHJ5LCBQQUdFX1NJWkUsIFN1YnNjcmlwdGlvbiwgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgQ3JtU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9zbWFydC1jcm0tc2hhcmVkJztcblxuaW1wb3J0IHtcbiAgICBPcmdhbml6YXRpb25JbmR1c3RyeSxcbiAgICBPcmdhbml6YXRpb25TaXplLFxuICAgIE9yZ2FuaXphdGlvblR5cGUsXG4gICAgU3Vic2NyaXB0aW9uTWVtYmVyXG59IGZyb20gJ2xpYnMvc21hcnQtY3JtL3NyYy9saWIvc2hhcmVkL2ludGVyZmFjZS9zbWFydC1jcm0tbW9kdWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENybUFjY291bnQgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL2NybS1hY2NvdW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBTbWFydENybSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9tb2RlbHMvc21hcnQtY3JtLm1vZGVsJztcbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1jb21wYW55LWRldGFpbHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1jcm0tYWNjb3VudC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi4vc21hcnQtY3JtLWFjY291bnQtaW5mby9zbWFydC1jcm0tYWNjb3VudC1pbmZvLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRDcm1Db21wYW55RGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBjb3VudHJpZXMkOiBPYnNlcnZhYmxlPENvdW50cnlbXT47XG4gICAgcHJpdmF0ZSBjb3VudHJ5TmFtZXMgPSBbXTtcblxuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICB1c2VyOiBVc2VyO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgaWQ6IG51bWJlcjtcblxuICAgIGRhdGE6IENybUFjY291bnQ7XG4gICAgYWxsU3Vic2NyaXB0aW9uTWVtYmVyczogU3Vic2NyaXB0aW9uTWVtYmVyW107XG4gICAgc3Vic2NyaXB0aW9uTWVtYmVyczogW10gPSBbXTtcbiAgICBmaWx0ZXJlZE93bmVyczogU3Vic2NyaXB0aW9uTWVtYmVyW107XG5cbiAgICBvcmdhbml6YXRpb25TaXplcyQ6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uU2l6ZVtdPjtcbiAgICBvcmdhbml6YXRpb25UeXBlcyQ6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uVHlwZVtdPjtcbiAgICBvcmdhbml6YXRpb25JbmR1c3RyaWVzJDogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25JbmR1c3RyeVtdPjtcblxuICAgIGZpbHRlcmVkQ291bnRyaWVzOiBDb3VudHJ5W107XG5cbiAgICBzdGF0dXMgPSBbXTtcbiAgICBwcmlvcml0eSA9IFtdO1xuICAgIHNvdXJjZSA9IFtdO1xuXG4gICAgaGFzQWNjZXNzOiBib29sZWFuO1xuICAgIGlzTG9hZGluZyA9IHRydWU7XG4gICAgb25FZGl0ID0gZmFsc2U7XG4gICAgc3VibWl0dGVkID0gZmFsc2U7XG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25TZXJ2aWNlOiBTdWJzY3JpcHRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNybVNlcnZpY2U6IENybVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBnZW9TZXJ2aWNlOiBHZW9TZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwU21hcnRDcm0uZ2V0QWNjb3VudHNGb3JtKCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hPd25lcihldmVudCkge1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzPy5maWx0ZXIoKHg6IFN1YnNjcmlwdGlvbk1lbWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LmZpcnN0X25hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxTdWJzY3JpcHRpb25NZW1iZXJzPy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWx0ZXJlZE93bmVycyA9IHZhbHVlcy5tYXAob3duZXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5vd25lcixcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogSGVscGVyU2VydmljZS5mb3JtYXREaXNwbGF5TmFtZShvd25lcilcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblR5cGVzJCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRPcmdhbml6YXRpb25UeXBlcygpO1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNpemVzJCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRPcmdhbml6YXRpb25TaXplcygpO1xuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbkluZHVzdHJpZXMkID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkluZHVzdHJpZXMoKTtcbiAgICAgICAgdGhpcy5jb3VudHJpZXMkID0gdGhpcy5nZW9TZXJ2aWNlLmdldENvdW50cmllcygpO1xuICAgICAgICB0aGlzLmNvdW50cmllcyQuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvdW50cnlOYW1lcyA9IHJlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChOdW1iZXIoZGF0YVsnaWQnXSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gTnVtYmVyKGRhdGFbJ2lkJ10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRVc2VyU3Vic2NyaXB0aW9uKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNBY2Nlc3MgPSB0aGlzLmhhc0FkbWluQWNjZXNzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRVc2VySW5mbyh0aGlzLnN1YnNjcmlwdGlvbj8uaWQsIHRoaXMuaGFzQWNjZXNzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjY291bnREZWZhdWx0VmFsdWVzKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc3Vic2NyaXB0aW9uX2lkJykuc2V0VmFsdWUodGhpcy5zdWJzY3JpcHRpb24/LmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGNhbGwgYWNjb3VudCBkZWZhdWx0IHZhbHVlcyAqL1xuICAgIHByaXZhdGUgYWNjb3VudERlZmF1bHRWYWx1ZXMoaWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLmNybVNlcnZpY2UuZ2V0Q3JtQWNjb3VudERlZmF1bHRWYWx1ZXMoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgIHRoaXMucHJpb3JpdHkgPSByZXNwb25zZS5wcmlvcml0eTtcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gcmVzcG9uc2Uuc291cmNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gZ2V0IHN1YnNjcmlwdGlvbiBtZW1iZXJzICovXG4gICAgcHJpdmF0ZSBnZXRBbGxTdWJzY3JpcHRpb25NZW1iZXJzKGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0RW5yb2xsZWRTdWJzY3JpcHRpb24oaWQsIHsgcGFnZV9zaXplOiBQQUdFX1NJWkUgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsU3Vic2NyaXB0aW9uTWVtYmVycyA9IHJlc3BvbnNlLm1lbWJlcnM7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVkaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFjY291bnREZXRhaWwoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRWRpdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYWxsU3Vic2NyaXB0aW9uTWVtYmVycy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgeCA9PiB4LmlkID09PSB0aGlzLnVzZXIuaWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnb3duZXJfaWQnKS5zZXRWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50VXNlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBIZWxwZXJTZXJ2aWNlLmZvcm1hdERpc3BsYXlOYW1lKGN1cnJlbnRVc2VyKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyAvKiogRnVuY3Rpb24gdG8gZ2V0IHVzZXIgaW5mbyAqL1xuICAgIHByaXZhdGUgZ2V0VXNlckluZm8oc3Vic2NyaXB0aW9uSWQ6IG51bWJlciwgaGFzQWNjZXNzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMudXNlclN0b3JlKCkuc3Vic2NyaWJlKHVzZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VyID0ge1xuICAgICAgICAgICAgICAgIC4uLnVzZXIsXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IEhlbHBlclNlcnZpY2UuZm9ybWF0RGlzcGxheU5hbWUodXNlcilcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaGFzQWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnb3duZXJfaWQnKS5zZXRWYWx1ZSh0aGlzLnVzZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsU3Vic2NyaXB0aW9uTWVtYmVycyhzdWJzY3JpcHRpb25JZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ293bmVyX2lkJykuc2V0VmFsdWUodGhpcy51c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBmb3JtIGNvbnRyb2xzICovXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZm9ybSBzdWJtaXQgKi9cbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnb3duZXJfaWQnKS5zZXRWYWx1ZSh0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnZhbHVlLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2NvdW50cnknKS5zZXRWYWx1ZSh0aGlzLmZvcm0uZ2V0KCdjb3VudHJ5JykudmFsdWU/LmNvZGUgPz8gbnVsbCk7XG4gICAgICAgICAgICBjb25zdCBzdWIkID0gdGhpcy5pZFxuICAgICAgICAgICAgICAgID8gdGhpcy5jcm1TZXJ2aWNlLnVwZGF0ZUFjY291bnQodGhpcy5zdWJzY3JpcHRpb24/LmlkLCB0aGlzLmlkLCB0aGlzLmZvcm0udmFsdWUpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNybVNlcnZpY2UucG9zdEFjY291bnQodGhpcy5mb3JtLnZhbHVlLCB0aGlzLnN1YnNjcmlwdGlvbj8uaWQpO1xuICAgICAgICAgICAgc3ViJC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQ3JtLkFjY291bnRNZXNzYWdlLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcbiAgICAgICAgICAgICAgICAgICAgYC8ke3RoaXMuc3Vic2NyaXB0aW9uPy5zbHVnfSR7Uk9VVEVSUy5hY2NvdW50SW5mb30ke3Jlc3BvbnNlLmlkfWBcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH0pLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25CdXN5ID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBleGVjdXRlIG9uIGxvY2F0aW9uIHNlbGVjdCAqL1xuICAgIGhhbmRsZUFkZHJlc3NDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnbG9jYXRpb24nKS5zZXRWYWx1ZShldmVudC5mb3JtYXR0ZWRfYWRkcmVzcyk7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGdldCBhY2NvdW50IGRldGFpbCBvbiBlZGl0IGZvcm0gKi9cbiAgICBwcml2YXRlIGdldEFjY291bnREZXRhaWwoKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jcm1TZXJ2aWNlLmdldEFjY291bnREZXRhaWwodGhpcy5zdWJzY3JpcHRpb24/LmlkLCB0aGlzLmlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHJlcyk7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLmFsbFN1YnNjcmlwdGlvbk1lbWJlcnMuZm9yRWFjaChtZW1iZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEub3duZXJfaWQgPT09IG1lbWJlci5pZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdvd25lcl9pZCcpLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ubWVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IEhlbHBlclNlcnZpY2UuZm9ybWF0RGlzcGxheU5hbWUobWVtYmVyKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY291bnRyeU5hbWVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHhbJ2NvZGUnXSA9PT0gcmVzWydjb3VudHJ5J10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnY291bnRyeScpLnBhdGNoVmFsdWUoeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgLmdldEVucm9sbGVkU3Vic2NyaXB0aW9uKHRoaXMuc3Vic2NyaXB0aW9uPy5pZCwgeyBwYWdlX3NpemU6IFBBR0VfU0laRSB9KVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbk1lbWJlcnMgPSByZXNwb25zZS5tZW1iZXJzO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgPT4gdGhpcy50b2FzdC5zaG93VG9hc3QoZXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ291bnRyeShldmVudCkge1xuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmIChldmVudC5xdWVyeSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdGhpcy5jb3VudHJ5TmFtZXMuZmlsdGVyKCh4OiBDb3VudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHgubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvdW50cnlOYW1lcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpbHRlcmVkQ291bnRyaWVzID0gdmFsdWVzO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtZS1hdXRvIGNvbC14cy02XCI+XG4gIDxhIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byBUYXJnZXRcIlxuICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gIDxoMyBjbGFzcz1cIm0tc3ViaGVhZGVyX190aXRsZSBtLXN1YmhlYWRlcl9fdGl0bGUtLXNlcGFyYXRvclwiPlxuICAgIDxzcGFuPnt7ICdDcm0uQWNjb3VudE1lc3NhZ2UuQWNjb3VudCcgfCB0cmFuc2xvY28gfX06XG4gICAgICB7eyBkYXRhPy5uYW1lID8gZGF0YT8ubmFtZSA6ICgnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbykgfX08L3NwYW4+XG4gIDwvaDM+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwicC0yIG10LTNcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJuYW1lXCJcbiAgICAgICAgICBbZXJyb3JNc2ddPVwiJ1VzZXIuQWNjb3VudC5WYWxpZGF0aW9uLk5hbWUnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxuICAgICAgICAgICAgaWQ9XCJuYW1lXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbmFtZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5Mb2NhdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIFtlcnJvck1zZ109XCInQ3JtLkFjY291bnRNZXNzYWdlLkxvY2F0aW9uRXJyb3JNZXNzYWdlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImxvY2F0aW9uXCI+XG4gICAgICAgICAgPGlucHV0IG5neC1ncC1hdXRvY29tcGxldGVcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICNwbGFjZXM9XCJuZ3gtcGxhY2VzXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgIChvbkFkZHJlc3NDaGFuZ2UpPVwiaGFuZGxlQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbG9jYXRpb24nXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidWktZmx1aWQgc2tpbGxzLW1vZGFsIGNvbC1zbS00XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIiBmb3I9XCJDb3VudHJ5XCI+e3sgJ0NybS5BY2NvdW50TWVzc2FnZS5Db3VudHJ5JyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgIDxwLWF1dG9Db21wbGV0ZSBmb3JtQ29udHJvbE5hbWU9XCJjb3VudHJ5XCJcbiAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwiZmlsdGVyZWRDb3VudHJpZXNcIlxuICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJvblNlYXJjaENvdW50cnkoJGV2ZW50KVwiXG4gICAgICAgICAgZGF0YUtleT1cImNvZGVcIlxuICAgICAgICAgIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cImZhbHNlXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIENvdW50cnlcIlxuICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCJcbiAgICAgICAgICBbaW5wdXRTdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdHRlZCAmJiBmWydjb3VudHJ5J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGJvcmRlcjogJzFweCBzb2xpZCAjZmY1ODZiJyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7IGJvcmRlcjogJzFweCBzb2xpZCBncmF5JyB9XG4gICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuVGVsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cInRlbFwiXG4gICAgICAgICAgW2Vycm9yTXNnXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuVGVsRXJyb3JNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0ZWxcIlxuICAgICAgICAgICAgaWQ9XCJ0ZWxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0ZWwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidWktZmx1aWQgc2tpbGxzLW1vZGFsIGNvbC1zbS00XCJcbiAgICAgICAgW2NsYXNzLmQtbm9uZV09XCIhaGFzQWNjZXNzXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTJcIiBmb3I9XCJPd25lclwiPnt7ICdDcm0uQWNjb3VudE1lc3NhZ2UuT3duZXInIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciByZXF1aXJlZC1pY29uXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICA8cC1hdXRvQ29tcGxldGUgZm9ybUNvbnRyb2xOYW1lPVwib3duZXJfaWRcIlxuICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJmaWx0ZXJlZE93bmVyc1wiXG4gICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cIm9uU2VhcmNoT3duZXIoJGV2ZW50KVwiXG4gICAgICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgICAgICBmaWVsZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggT3duZXJcIlxuICAgICAgICAgIFtkcm9wZG93bl09XCJ0cnVlXCI+XG4gICAgICAgIDwvcC1hdXRvQ29tcGxldGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5Db21wYW55VXJsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cImNvbXBhbnlfdXJsXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ1cmxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGFueV91cmxcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjb21wYW55X3VybCddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ09yZ2FuaXphdGlvbi5Pcmdhbml6YXRpb25UeXBlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm9yZ2FuaXphdGlvbl90eXBlX2lkXCJcbiAgICAgICAgICAqbmdJZj1cIm9yZ2FuaXphdGlvblR5cGVzJCB8IGFzeW5jIGFzIHR5cGVzXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgIFtvcHRpb25zXT1cInR5cGVzWydvcmdhbml6YXRpb25fdHlwZXMnXVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbml6YXRpb25fdHlwZV9pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ29yZ2FuaXphdGlvbl90eXBlX2lkJ10uZXJyb3JzIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgT3JnYW5pemF0aW9uIFR5cGUnXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCI+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInT3JnYW5pemF0aW9uLk9yZ2FuaXphdGlvbkluZHVzdHJ5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cIm9yZ2FuaXphdGlvbl9pbmR1c3RyeV9pZFwiXG4gICAgICAgICAgKm5nSWY9XCJvcmdhbml6YXRpb25JbmR1c3RyaWVzJCB8IGFzeW5jIGFzIGluZHVzdHJpZXNcIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgW29wdGlvbnNdPVwiaW5kdXN0cmllc1snb3JnYW5pemF0aW9uX2luZHVzdHJpZXMnXVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbml6YXRpb25faW5kdXN0cnlfaWRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydvcmdhbml6YXRpb25faW5kdXN0cnlfaWQnXS5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBPcmdhbml6YXRpb24gSW5kdXN0cnknXCJcbiAgICAgICAgICAgIG9wdGlvblZhbHVlPVwiaWRcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCI+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLlNpemUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwib3JnYW5pemF0aW9uX3NpemVfaWRcIlxuICAgICAgICAgICpuZ0lmPVwib3JnYW5pemF0aW9uU2l6ZXMkIHwgYXN5bmMgYXMgc2l6ZXNcIj5cbiAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgW29wdGlvbnNdPVwic2l6ZXNbJ29yZ2FuaXphdGlvbl9zaXplcyddXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXphdGlvbl9zaXplX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnb3JnYW5pemF0aW9uX3NpemVfaWQnXS5lcnJvcnMgfVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBPcmdhbml6YXRpb24gU2l6ZSdcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIj5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS00IGNvbC1sZy00XCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuU3RhdHVzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgbmFtZT1cInN0YXR1c1wiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICBbb3B0aW9uc109XCJzdGF0dXNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnc3RhdHVzJ10uZXJyb3JzIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgU3RhdHVzJ1wiPlxuICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLXNtLTQgY29sLWxnLTRcIj5cbiAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0NybS5BY2NvdW50TWVzc2FnZS5Qcmlvcml0eScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJwcmlvcml0eVwiPlxuICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICBbb3B0aW9uc109XCJwcmlvcml0eVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcmlvcml0eVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3ByaW9yaXR5J10uZXJyb3JzIH1cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgUHJpb3JpdHknXCI+XG4gICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tNCBjb2wtbGctNFwiPlxuICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQ3JtLkFjY291bnRNZXNzYWdlLlNvdXJjZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgIG5hbWU9XCJjcm1fc291cmNlX2lkXCI+XG4gICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgIFtvcHRpb25zXT1cInNvdXJjZVwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjcm1fc291cmNlX2lkXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY3JtX3NvdXJjZV9pZCddLmVycm9ycyB9XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IFNvdXJjZSdcIlxuICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJpZFwiXG4gICAgICAgICAgICBvcHRpb25MYWJlbD1cIm5hbWVcIj5cbiAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1zbS0xMiBtdC0yXCI+XG4gICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidDcm0uQWNjb3VudE1lc3NhZ2UuRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICA8dGV4dGFyZWEgcm93cz1cIjVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgaWQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Rlc2NyaXB0aW9uJ10uZXJyb3JzIH1cIj48L3RleHRhcmVhPlxuICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWVuZCBtdC0zXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAoY2xpY2spPVwiYmFjaygpXCI+XG4gICAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIFtidXR0b25CdXN5XT1cImJ1dHRvbkJ1c3lcIlxuICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+XG4gICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PlxuIl19