@esfaenza/core 16.2.27 → 17.3.17
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.
- package/components/back-top/back-top.component.d.ts +12 -12
- package/components/base/base.component.d.ts +26 -26
- package/components/base/embedding.component.d.ts +22 -22
- package/components/base/reactive.component.d.ts +9 -9
- package/components/breadcrumb/breadcrumb.component.d.ts +26 -26
- package/components/components.module.d.ts +32 -32
- package/components/error/404/pagenotfound.component.d.ts +15 -15
- package/components/error/500/servererror.component.d.ts +20 -20
- package/components/error/Angular/angularerror.component.d.ts +25 -25
- package/components/es-image-cropper/es-image-cropper.component.d.ts +25 -25
- package/components/es-modal/es-modal-head/es-modal-head.component.d.ts +11 -11
- package/components/es-modal/es-modal.component.d.ts +18 -18
- package/components/external-page/external_pages.component.d.ts +21 -21
- package/components/index.d.ts +5 -5
- package/components/jace-login/jace-login.component.d.ts +8 -8
- package/components/jace-resource/jace-resource.component.d.ts +25 -25
- package/components/labeled-span/labeled-span.component.d.ts +11 -11
- package/components/navbar/navbar.component.d.ts +58 -58
- package/components/navbar/navbar.component.loc.d.ts +8 -8
- package/components/page/pages.component.d.ts +23 -23
- package/components/public-api.d.ts +21 -21
- package/components/redirecter/redirecter.component.d.ts +23 -23
- package/components/sidebar/sidebar.component.d.ts +64 -64
- package/components/sidebar/sidebar.component.loc.d.ts +8 -8
- package/components/user_infos/user_infos.component.d.ts +50 -50
- package/components/user_infos/user_infos.component.loc.d.ts +8 -8
- package/directives/componentHost/componentHost.directive.d.ts +12 -12
- package/directives/directives.module.d.ts +12 -12
- package/directives/draggable/draggable.directive.d.ts +13 -13
- package/directives/es-modal/es-modal.directive.d.ts +20 -20
- package/directives/es-routerLink/es-routerLink.directive.d.ts +13 -13
- package/directives/index.d.ts +5 -5
- package/directives/public-api.d.ts +7 -7
- package/directives/slim-scroll/slim-scroll.directive.d.ts +15 -15
- package/directives/widget/widget.directive.d.ts +9 -9
- package/domain/index.d.ts +5 -5
- package/domain/models/core/ApplicationJob.d.ts +12 -12
- package/domain/models/core/ApplicationMenu.d.ts +16 -16
- package/domain/models/core/ApplicationRoutes.d.ts +2 -2
- package/domain/models/core/EnvOptions.d.ts +15 -15
- package/domain/models/core/GenericItem.d.ts +10 -10
- package/domain/models/core/KeyValue.d.ts +5 -5
- package/domain/models/global_search/SaerchResultContainer.d.ts +5 -5
- package/domain/models/global_search/SearchResult.d.ts +10 -10
- package/domain/models/jace/AccountScope.d.ts +9 -9
- package/domain/models/jace/ActiveModuleView.d.ts +11 -11
- package/domain/models/jace/CategoriesWithModules.d.ts +6 -6
- package/domain/models/jace/JaceAccount.d.ts +17 -17
- package/domain/models/jace/JaceIdentity.d.ts +17 -17
- package/domain/models/jace/JaceModule.d.ts +8 -8
- package/domain/models/jace/JacePermission.d.ts +10 -10
- package/domain/models/jace/JaceRole.d.ts +13 -13
- package/domain/models/jace/JaceUser.d.ts +9 -9
- package/domain/models/user/UpdateAccountRecoverySettingsDto.d.ts +5 -5
- package/domain/models/user/UpdatePasswordDto.d.ts +9 -9
- package/domain/models/user/UpdateProfilePictureDto.d.ts +4 -4
- package/domain/models/user/UserAccount.d.ts +23 -23
- package/domain/public-api.d.ts +22 -22
- package/domain/tokens.d.ts +22 -22
- package/esm2022/components/back-top/back-top.component.mjs +42 -42
- package/esm2022/components/base/base.component.mjs +67 -67
- package/esm2022/components/base/embedding.component.mjs +64 -64
- package/esm2022/components/base/reactive.component.mjs +27 -27
- package/esm2022/components/breadcrumb/breadcrumb.component.mjs +80 -80
- package/esm2022/components/components.module.mjs +96 -96
- package/esm2022/components/error/404/pagenotfound.component.mjs +35 -35
- package/esm2022/components/error/500/servererror.component.mjs +46 -46
- package/esm2022/components/error/Angular/angularerror.component.mjs +62 -62
- package/esm2022/components/es-image-cropper/es-image-cropper.component.mjs +82 -82
- package/esm2022/components/es-modal/es-modal-head/es-modal-head.component.mjs +22 -22
- package/esm2022/components/es-modal/es-modal.component.mjs +40 -40
- package/esm2022/components/esfaenza-core-components.mjs +4 -4
- package/esm2022/components/external-page/external_pages.component.mjs +48 -48
- package/esm2022/components/jace-login/jace-login.component.mjs +31 -31
- package/esm2022/components/jace-resource/jace-resource.component.mjs +68 -68
- package/esm2022/components/labeled-span/labeled-span.component.mjs +25 -25
- package/esm2022/components/navbar/navbar.component.loc.mjs +40 -40
- package/esm2022/components/navbar/navbar.component.mjs +223 -223
- package/esm2022/components/page/pages.component.mjs +60 -60
- package/esm2022/components/public-api.mjs +21 -21
- package/esm2022/components/redirecter/redirecter.component.mjs +65 -65
- package/esm2022/components/sidebar/sidebar.component.loc.mjs +38 -38
- package/esm2022/components/sidebar/sidebar.component.mjs +286 -286
- package/esm2022/components/user_infos/user_infos.component.loc.mjs +42 -42
- package/esm2022/components/user_infos/user_infos.component.mjs +148 -148
- package/esm2022/directives/componentHost/componentHost.directive.mjs +29 -29
- package/esm2022/directives/directives.module.mjs +20 -20
- package/esm2022/directives/draggable/draggable.directive.mjs +49 -49
- package/esm2022/directives/es-modal/es-modal.directive.mjs +79 -79
- package/esm2022/directives/es-routerLink/es-routerLink.directive.mjs +55 -55
- package/esm2022/directives/esfaenza-core-directives.mjs +4 -4
- package/esm2022/directives/public-api.mjs +7 -7
- package/esm2022/directives/slim-scroll/slim-scroll.directive.mjs +41 -41
- package/esm2022/directives/widget/widget.directive.mjs +37 -37
- package/esm2022/domain/esfaenza-core-domain.mjs +4 -4
- package/esm2022/domain/models/core/ApplicationJob.mjs +2 -2
- package/esm2022/domain/models/core/ApplicationMenu.mjs +25 -25
- package/esm2022/domain/models/core/ApplicationRoutes.mjs +2 -2
- package/esm2022/domain/models/core/EnvOptions.mjs +12 -12
- package/esm2022/domain/models/core/GenericItem.mjs +11 -11
- package/esm2022/domain/models/core/KeyValue.mjs +14 -14
- package/esm2022/domain/models/global_search/SaerchResultContainer.mjs +5 -5
- package/esm2022/domain/models/global_search/SearchResult.mjs +7 -7
- package/esm2022/domain/models/jace/AccountScope.mjs +7 -7
- package/esm2022/domain/models/jace/ActiveModuleView.mjs +5 -5
- package/esm2022/domain/models/jace/CategoriesWithModules.mjs +6 -6
- package/esm2022/domain/models/jace/JaceAccount.mjs +2 -2
- package/esm2022/domain/models/jace/JaceIdentity.mjs +15 -15
- package/esm2022/domain/models/jace/JaceModule.mjs +9 -9
- package/esm2022/domain/models/jace/JacePermission.mjs +2 -2
- package/esm2022/domain/models/jace/JaceRole.mjs +8 -8
- package/esm2022/domain/models/jace/JaceUser.mjs +2 -2
- package/esm2022/domain/models/user/UpdateAccountRecoverySettingsDto.mjs +6 -6
- package/esm2022/domain/models/user/UpdatePasswordDto.mjs +10 -10
- package/esm2022/domain/models/user/UpdateProfilePictureDto.mjs +5 -5
- package/esm2022/domain/models/user/UserAccount.mjs +2 -2
- package/esm2022/domain/public-api.mjs +22 -22
- package/esm2022/domain/tokens.mjs +16 -16
- package/esm2022/esfaenza-core.mjs +4 -4
- package/esm2022/helpers/classes/ResizeListener.mjs +38 -38
- package/esm2022/helpers/esfaenza-core-helpers.mjs +4 -4
- package/esm2022/helpers/public-api.mjs +1 -1
- package/esm2022/lib/app.component.mjs +34 -34
- package/esm2022/lib/core.module.mjs +258 -258
- package/esm2022/modules/classes/_base.module.mjs +31 -31
- package/esm2022/modules/classes/_embedding.module.mjs +26 -26
- package/esm2022/modules/classes/_shared.module.mjs +46 -46
- package/esm2022/modules/classes/t_c.module.mjs +85 -85
- package/esm2022/modules/esfaenza-core-modules.mjs +4 -4
- package/esm2022/modules/public-api.mjs +4 -4
- package/esm2022/pipes/classes/included_in.pipe.mjs +19 -19
- package/esm2022/pipes/classes/safe_html.pipe.mjs +20 -20
- package/esm2022/pipes/classes/safe_script.pipe.mjs +20 -20
- package/esm2022/pipes/classes/safe_style.pipe.mjs +20 -20
- package/esm2022/pipes/classes/safe_url.pipe.mjs +20 -20
- package/esm2022/pipes/esfaenza-core-pipes.mjs +4 -4
- package/esm2022/pipes/pipes.module.mjs +19 -19
- package/esm2022/pipes/public-api.mjs +6 -6
- package/esm2022/public-api.mjs +2 -2
- package/esm2022/services/classes/app.accesstoken.mjs +1041 -1041
- package/esm2022/services/classes/app.completedjobredirection.mjs +17 -17
- package/esm2022/services/classes/app.errorhandler.mjs +41 -41
- package/esm2022/services/classes/app.event.mjs +26 -26
- package/esm2022/services/classes/app.globalsearch.mjs +33 -33
- package/esm2022/services/classes/app.httpextensions.loc.mjs +14 -14
- package/esm2022/services/classes/app.httpextensions.mjs +90 -90
- package/esm2022/services/classes/app.menufilter.mjs +20 -20
- package/esm2022/services/classes/app.routeguard.mjs +22 -22
- package/esm2022/services/classes/app.session.mjs +40 -40
- package/esm2022/services/classes/app.state.mjs +229 -229
- package/esm2022/services/classes/preferences/app.cache.persistor.mjs +94 -94
- package/esm2022/services/classes/preferences/app.preference.persistor.mjs +94 -94
- package/esm2022/services/classes/preferences/user/app.userpreferences.base.mjs +101 -101
- package/esm2022/services/esfaenza-core-services.mjs +4 -4
- package/esm2022/services/public-api.mjs +13 -13
- package/fesm2022/esfaenza-core-components.mjs +1479 -1479
- package/fesm2022/esfaenza-core-components.mjs.map +1 -1
- package/fesm2022/esfaenza-core-directives.mjs +269 -269
- package/fesm2022/esfaenza-core-directives.mjs.map +1 -1
- package/fesm2022/esfaenza-core-domain.mjs +153 -153
- package/fesm2022/esfaenza-core-domain.mjs.map +1 -1
- package/fesm2022/esfaenza-core-helpers.mjs +38 -38
- package/fesm2022/esfaenza-core-helpers.mjs.map +1 -1
- package/fesm2022/esfaenza-core-modules.mjs +132 -132
- package/fesm2022/esfaenza-core-modules.mjs.map +1 -1
- package/fesm2022/esfaenza-core-pipes.mjs +96 -96
- package/fesm2022/esfaenza-core-pipes.mjs.map +1 -1
- package/fesm2022/esfaenza-core-services.mjs +1754 -1754
- package/fesm2022/esfaenza-core-services.mjs.map +1 -1
- package/fesm2022/esfaenza-core.mjs +225 -225
- package/fesm2022/esfaenza-core.mjs.map +1 -1
- package/helpers/classes/ResizeListener.d.ts +12 -12
- package/helpers/index.d.ts +5 -5
- package/helpers/public-api.d.ts +1 -1
- package/index.d.ts +5 -5
- package/lib/app.component.d.ts +13 -13
- package/lib/core.module.d.ts +86 -86
- package/modules/classes/_base.module.d.ts +4 -4
- package/modules/classes/_embedding.module.d.ts +11 -11
- package/modules/classes/_shared.module.d.ts +29 -29
- package/modules/classes/t_c.module.d.ts +19 -19
- package/modules/index.d.ts +5 -5
- package/modules/public-api.d.ts +4 -4
- package/package.json +50 -50
- package/pipes/classes/included_in.pipe.d.ts +7 -7
- package/pipes/classes/safe_html.pipe.d.ts +10 -10
- package/pipes/classes/safe_script.pipe.d.ts +10 -10
- package/pipes/classes/safe_style.pipe.d.ts +10 -10
- package/pipes/classes/safe_url.pipe.d.ts +10 -10
- package/pipes/index.d.ts +5 -5
- package/pipes/pipes.module.d.ts +11 -11
- package/pipes/public-api.d.ts +6 -6
- package/public-api.d.ts +2 -2
- package/services/classes/app.accesstoken.d.ts +17 -17
- package/services/classes/app.completedjobredirection.d.ts +12 -12
- package/services/classes/app.errorhandler.d.ts +11 -11
- package/services/classes/app.event.d.ts +10 -10
- package/services/classes/app.globalsearch.d.ts +25 -25
- package/services/classes/app.httpextensions.d.ts +34 -34
- package/services/classes/app.httpextensions.loc.d.ts +8 -8
- package/services/classes/app.menufilter.d.ts +14 -14
- package/services/classes/app.routeguard.d.ts +10 -10
- package/services/classes/app.session.d.ts +15 -15
- package/services/classes/app.state.d.ts +55 -55
- package/services/classes/preferences/app.cache.persistor.d.ts +25 -25
- package/services/classes/preferences/app.preference.persistor.d.ts +25 -25
- package/services/classes/preferences/user/app.userpreferences.base.d.ts +25 -25
- package/services/index.d.ts +5 -5
- package/services/public-api.d.ts +13 -13
- package/theme/initial.scss +13 -4
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
// Angular
|
|
2
|
-
import { NgModule, ErrorHandler, LOCALE_ID, APP_INITIALIZER, isDevMode } from "@angular/core";
|
|
3
|
-
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
4
|
-
import { RouterModule, NoPreloading, ROUTES } from "@angular/router";
|
|
5
|
-
import { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core";
|
|
6
|
-
import { EVENT_MANAGER_PLUGINS } from "@angular/platform-browser";
|
|
7
|
-
import { ServiceWorkerModule } from "@angular/service-worker";
|
|
8
|
-
import { HttpClientModule } from "@angular/common/http";
|
|
9
|
-
import "@angular/common/locales/global/it";
|
|
10
|
-
// Plugins
|
|
11
|
-
import { NgxMatDateAdapter, NGX_MAT_DATE_FORMATS } from "@angular-material-components/datetime-picker";
|
|
12
|
-
import { CookieService } from "ngx-cookie-service";
|
|
13
|
-
import { ToastrModule } from "ngx-toastr";
|
|
14
|
-
import "widgster/widgster.js";
|
|
15
|
-
// ES
|
|
16
|
-
import { PreferencesModule, PREF_DEBUG_MODE, PreferencesPersistor, LocalStoragePreferencesPersistor, CachePersistor, LocalStorageCachePersistor } from "@esfaenza/preferences";
|
|
17
|
-
import { LocalizationModule, LocalizationService, LocalizationMissingPolicy, LOC_DEBUG_MODE, BaseLocalization } from "@esfaenza/localizations";
|
|
18
|
-
import { HttpserviceModule, HttpServiceExtensions, HTTPService, HTTP_DEBUG_MODE, HTTP_INVALIDATION } from "@esfaenza/httpservice";
|
|
19
|
-
import { SignalrNotificationsModule, SGR_DEBUG_MODE, BaseMessageService } from "@esfaenza/signalr-notifications";
|
|
20
|
-
import { FormsAndValidationsModule, NgxExpandedDayJsDateAdapter } from "@esfaenza/forms-and-validations";
|
|
21
|
-
import { AccessControlModule, AccessControlService, ACC_DEBUG_MODE } from "@esfaenza/access-control";
|
|
22
|
-
import { BaseAdapter, EsChartsModule, ESC_DEBUG_MODE } from "@esfaenza/es-charts";
|
|
23
|
-
import { ExtensionsModule, EXT_DEBUG_MODE } from "@esfaenza/extensions";
|
|
24
|
-
import { ContextMenuModule } from "@esfaenza/ngx-contextmenu";
|
|
25
|
-
import { DragulaModule } from '@esfaenza/ngx-dragula';
|
|
26
|
-
import { EsTableModule } from "@esfaenza/es-table";
|
|
27
|
-
import { TAB_DEBUG_MODE } from "@esfaenza/tabber";
|
|
28
|
-
// Core
|
|
29
|
-
import { APPErrorHandler, HTTPServiceExtensions, ApplicationPreferencesPersistor, ApplicationCachePersistor, SessionRetriever, OutZoneEventPlugin, TokenService, GlobalSearchService, CompletedJobRedirectionService, MenuFilteringService, UserPreferencesService } from "@esfaenza/core/services";
|
|
30
|
-
import { PageNotFoundComponent, ServerErrorComponent, AngularErrorComponent, ExternalPagesComponent, JaceLoginComponent, PagesComponent, RedirecterComponent, ComponentsModule, UserInfosComponent } from "@esfaenza/core/components";
|
|
31
|
-
import { MENU, MENU_LOCALIZATION, REDIRECT_MAP, USE_FAKE_ACCESS_TOKEN, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY, ANONYMOUS_MODE } from "@esfaenza/core/domain";
|
|
32
|
-
import { ROUTE, EMBEDDED_ROUTE } from "@esfaenza/core/domain";
|
|
33
|
-
import { TemplateCommon } from "@esfaenza/core/modules";
|
|
34
|
-
// RxJs
|
|
35
|
-
import { catchError, switchMap, take, tap } from "rxjs/operators";
|
|
36
|
-
import { forkJoin, of } from "rxjs";
|
|
37
|
-
// Bootstrap
|
|
38
|
-
import { ProgressbarModule } from "ngx-bootstrap/progressbar";
|
|
39
|
-
import { TimepickerModule } from "ngx-bootstrap/timepicker";
|
|
40
|
-
import { BsDropdownModule } from "ngx-bootstrap/dropdown";
|
|
41
|
-
import { TooltipModule } from "ngx-bootstrap/tooltip";
|
|
42
|
-
import { ModalModule } from "ngx-bootstrap/modal";
|
|
43
|
-
// Applicazione
|
|
44
|
-
import { AppComponent } from "./app.component";
|
|
45
|
-
import * as i0 from "@angular/core";
|
|
46
|
-
import * as i1 from "@angular/service-worker";
|
|
47
|
-
import * as i2 from "@angular/router";
|
|
48
|
-
import * as i3 from "@esfaenza/es-table";
|
|
49
|
-
import * as i4 from "@esfaenza/forms-and-validations";
|
|
50
|
-
import * as i5 from "@esfaenza/extensions";
|
|
51
|
-
import * as i6 from "@esfaenza/localizations";
|
|
52
|
-
import * as i7 from "@esfaenza/access-control";
|
|
53
|
-
import * as i8 from "@esfaenza/httpservice";
|
|
54
|
-
import * as i9 from "@esfaenza/signalr-notifications";
|
|
55
|
-
import * as i10 from "@esfaenza/preferences";
|
|
56
|
-
import * as i11 from "@esfaenza/es-charts";
|
|
57
|
-
import * as i12 from "ngx-bootstrap/tooltip";
|
|
58
|
-
import * as i13 from "ngx-bootstrap/modal";
|
|
59
|
-
import * as i14 from "ngx-bootstrap/progressbar";
|
|
60
|
-
import * as i15 from "ngx-bootstrap/dropdown";
|
|
61
|
-
import * as i16 from "ngx-toastr";
|
|
62
|
-
import * as i17 from "ngx-bootstrap/timepicker";
|
|
63
|
-
import * as i18 from "@esfaenza/ngx-contextmenu";
|
|
64
|
-
import * as i19 from "@esfaenza/ngx-dragula";
|
|
65
|
-
// Repositories
|
|
66
|
-
const GET_Jace_GetAccountScope = "/api/Jace/GetAccountScope";
|
|
67
|
-
const GET_AppConfig_GetAppConfig = "/api/AppConfig/GetAppConfig";
|
|
68
|
-
const baseAppRoutes = [
|
|
69
|
-
{ path: "", redirectTo: "pages/{emptyRouteRedirect}", pathMatch: "full" },
|
|
70
|
-
{ path: EMBEDDED_ROUTE, component: ExternalPagesComponent },
|
|
71
|
-
{ path: ROUTE, component: PagesComponent },
|
|
72
|
-
{ path: "rd", component: RedirecterComponent },
|
|
73
|
-
{ path: "rd/:tenant", component: RedirecterComponent },
|
|
74
|
-
{ path: "login", component: JaceLoginComponent },
|
|
75
|
-
{ path: "iserr", component: ServerErrorComponent },
|
|
76
|
-
{ path: "anerr", component: AngularErrorComponent },
|
|
77
|
-
{ path: "**", component: PageNotFoundComponent },
|
|
78
|
-
];
|
|
79
|
-
const MODULES = [
|
|
80
|
-
BrowserAnimationsModule,
|
|
81
|
-
HttpClientModule,
|
|
82
|
-
TemplateCommon,
|
|
83
|
-
ComponentsModule,
|
|
84
|
-
// Attenzione a lasciarlo attivo in ng serve: https://github.com/angular/angular/issues/47455
|
|
85
|
-
ServiceWorkerModule.register('ngsw-worker.js', { enabled: !isDevMode() }),
|
|
86
|
-
RouterModule.forRoot([], { useHash: true, preloadingStrategy: NoPreloading, onSameUrlNavigation: "reload" }),
|
|
87
|
-
// ES
|
|
88
|
-
EsTableModule.forRoot(),
|
|
89
|
-
FormsAndValidationsModule.forRoot({ acocustom: "O", sliderMode: true }),
|
|
90
|
-
ExtensionsModule.forRoot(),
|
|
91
|
-
LocalizationModule.forRoot({ localizationMissingPolicy: LocalizationMissingPolicy.PrintSource, defaultLocale: 'it-IT' }),
|
|
92
|
-
AccessControlModule.forRoot({ contextAwareKey: "O", defaultCondition: '(R:Jace Admin || R:Jace Support)' }),
|
|
93
|
-
HttpserviceModule.forRoot(),
|
|
94
|
-
SignalrNotificationsModule.forRoot({ endpointUrl: 'notify', useMessagePack: true }),
|
|
95
|
-
PreferencesModule.forRoot({ retrieveAllAtStart: true, sessionRetriever: SessionRetriever, preferencePersistor: ApplicationPreferencesPersistor, cachePersistor: ApplicationCachePersistor }),
|
|
96
|
-
EsChartsModule.forRoot(),
|
|
97
|
-
// Bootstrap
|
|
98
|
-
TooltipModule.forRoot(),
|
|
99
|
-
ModalModule.forRoot(),
|
|
100
|
-
ProgressbarModule.forRoot(),
|
|
101
|
-
BsDropdownModule.forRoot(),
|
|
102
|
-
ToastrModule.forRoot(),
|
|
103
|
-
TimepickerModule.forRoot(),
|
|
104
|
-
ContextMenuModule.forRoot(),
|
|
105
|
-
DragulaModule.forRoot()
|
|
106
|
-
];
|
|
107
|
-
// Generatore dei formati data
|
|
108
|
-
var formats = (style) => {
|
|
109
|
-
return {
|
|
110
|
-
parse: { dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : '') },
|
|
111
|
-
display: {
|
|
112
|
-
dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),
|
|
113
|
-
monthYearLabel: 'MM YYYY',
|
|
114
|
-
dateA11yLabel: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),
|
|
115
|
-
monthYearA11yLabel: 'MM YYYY',
|
|
116
|
-
}
|
|
117
|
-
};
|
|
118
|
-
};
|
|
119
|
-
const localeFactory = (loc) => loc.SmallLocale;
|
|
120
|
-
const PROVIDERS = [
|
|
121
|
-
CookieService,
|
|
122
|
-
// Providers applicativi
|
|
123
|
-
{ provide: ErrorHandler, useClass: APPErrorHandler },
|
|
124
|
-
{ provide: EVENT_MANAGER_PLUGINS, useExisting: OutZoneEventPlugin, multi: true },
|
|
125
|
-
{ provide: HttpServiceExtensions, useClass: HTTPServiceExtensions },
|
|
126
|
-
// Locale e gestioni delle date
|
|
127
|
-
{ provide: LOCALE_ID, useFactory: localeFactory, deps: [LocalizationService] },
|
|
128
|
-
{ provide: MAT_DATE_LOCALE, useFactory: localeFactory, deps: [LocalizationService] },
|
|
129
|
-
{ provide: MAT_DATE_FORMATS, useValue: formats('short') },
|
|
130
|
-
// Questi due sono providati dal FormsAndValidationModule stesso, però quest'ultimo è definito in forRoot solo lato componenti shared,
|
|
131
|
-
// quindi per rendere questi provider disponibili anche a moduli esterni devo riprovidarli anche qui
|
|
132
|
-
{ provide: NGX_MAT_DATE_FORMATS, useValue: formats('long') },
|
|
133
|
-
{ provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter }
|
|
134
|
-
];
|
|
135
|
-
export class EsFaenzaCoreModule {
|
|
136
|
-
static forRoot(config) {
|
|
137
|
-
if (config.routes) {
|
|
138
|
-
// Aggiunta della route di embedding se non dichiarata, lato aggiunta faccio in modo che l'embedding sia disponibile solo da route interne (pages OK, pages_ext NON OK)
|
|
139
|
-
if (!config.routes.find(t => t.path.startsWith("embed")))
|
|
140
|
-
config.routes = [...config.routes, { path: "embed/:module", loadChildren: () => import('@esfaenza/core/modules').then(m => m.EmbeddingModule) }];
|
|
141
|
-
baseAppRoutes[0].redirectTo = ["pages", "pages_ext"].map(t => (config.emptyRouteRedirect || '').startsWith(t)).some(t => !!t) ? "/" + config.emptyRouteRedirect : `pages/${config.emptyRouteRedirect || 'dashboard'}`;
|
|
142
|
-
baseAppRoutes.filter(t => ["pages", "pages_ext"].includes(t.path)).forEach(path => {
|
|
143
|
-
path.children = [
|
|
144
|
-
{ path: "profile", component: UserInfosComponent, data: { InternalNavigation: true, title: "profilo" } },
|
|
145
|
-
...config.routes.filter(r => !path.path.includes("pages_ext") || !r.path.startsWith("embed"))
|
|
146
|
-
];
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
config.debugMode = (!isDevMode() && !config.forceDebugModeForProdBuilds) ? DebugFlags.None : (config.debugMode || DebugFlags.All);
|
|
150
|
-
let mergedAppInitializer = (http, bts, aac, loc) => {
|
|
151
|
-
return () => {
|
|
152
|
-
if (config.anonymousMode) {
|
|
153
|
-
console.log("%c[APP_INITIALIZER] Loading AppConfig...", "background-color: yellow");
|
|
154
|
-
return http.get(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))).pipe(tap((appConfig) => {
|
|
155
|
-
myconfig = appConfig;
|
|
156
|
-
console.log("%c[APP_INITIALIZER] appConfig registered", "background-color: yellow");
|
|
157
|
-
aac.initializeIdentity(null);
|
|
158
|
-
}), switchMap(_ => {
|
|
159
|
-
if (!config.initializerFunction)
|
|
160
|
-
return of();
|
|
161
|
-
console.log("%c[APP_INITIALIZER] Loading custom application initialization", "background-color: yellow");
|
|
162
|
-
return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {
|
|
163
|
-
console.log("%c[APP_INITIALIZER] Initialization is over", "background-color: yellow");
|
|
164
|
-
}));
|
|
165
|
-
}));
|
|
166
|
-
}
|
|
167
|
-
console.log("%c[APP_INITIALIZER] Loading AppConfig and Account Scope...", "background-color: yellow");
|
|
168
|
-
let realObservable = forkJoin({
|
|
169
|
-
appConfig: http.get(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))),
|
|
170
|
-
scope: http.get(GET_Jace_GetAccountScope, null, null, false).pipe(catchError(_ => of(null))),
|
|
171
|
-
locale: loc.Locale.pipe(take(1), catchError(_ => of('it-IT'))),
|
|
172
|
-
});
|
|
173
|
-
let usedObservable = config.optionsAndScopeProvider || realObservable;
|
|
174
|
-
return usedObservable.pipe(tap((res) => {
|
|
175
|
-
myconfig = res.appConfig;
|
|
176
|
-
http.setAppConfig(myconfig);
|
|
177
|
-
// L'account scope lo prendo dalla Query a backend solo se non uso il Fake token
|
|
178
|
-
if (!bts.USE_FAKE_ACCESS_TOKEN)
|
|
179
|
-
bts.accountScope = res.scope;
|
|
180
|
-
console.log("%c[APP_INITIALIZER] appConfig and scope registered", "background-color: yellow");
|
|
181
|
-
var identtity = bts.getJaceIdentity();
|
|
182
|
-
if (bts.accountScope)
|
|
183
|
-
aac.initializeIdentity(identtity);
|
|
184
|
-
}), switchMap(_ => {
|
|
185
|
-
if (!config.initializerFunction)
|
|
186
|
-
return of();
|
|
187
|
-
console.log("%c[APP_INITIALIZER] Loading custom application initialization", "background-color: yellow");
|
|
188
|
-
return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {
|
|
189
|
-
console.log("%c[APP_INITIALIZER] Initialization is over", "background-color: yellow");
|
|
190
|
-
}));
|
|
191
|
-
}));
|
|
192
|
-
};
|
|
193
|
-
};
|
|
194
|
-
return {
|
|
195
|
-
ngModule: EsFaenzaCoreModule,
|
|
196
|
-
providers: [
|
|
197
|
-
// *************************** Provider statici ***************************
|
|
198
|
-
...PROVIDERS,
|
|
199
|
-
// ************************ Provider customizzabili ************************
|
|
200
|
-
...(!config.redirectionMap ? [] : [{ provide: REDIRECT_MAP, useValue: config.redirectionMap }]),
|
|
201
|
-
{ provide: APP_INITIALIZER, useFactory: mergedAppInitializer, deps: [HTTPService, TokenService, AccessControlService, BaseLocalization], multi: true },
|
|
202
|
-
{ provide: ROUTES, useValue: baseAppRoutes, multi: true },
|
|
203
|
-
{ provide: LOC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Localizations) == DebugFlags.Localizations : false },
|
|
204
|
-
{ provide: EXT_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Extensions) == DebugFlags.Extensions : false },
|
|
205
|
-
{ provide: ACC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.AccessControl) == DebugFlags.AccessControl : false },
|
|
206
|
-
{ provide: HTTP_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Http) == DebugFlags.Http : false },
|
|
207
|
-
{ provide: HTTP_INVALIDATION, useValue: config?.httpInvalidationCache },
|
|
208
|
-
{ provide: TAB_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Tabber) == DebugFlags.Tabber : false },
|
|
209
|
-
{ provide: SGR_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.SignalR) == DebugFlags.SignalR : false },
|
|
210
|
-
{ provide: PREF_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Preferences) == DebugFlags.Preferences : false },
|
|
211
|
-
{ provide: ESC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Charts) == DebugFlags.Charts : false },
|
|
212
|
-
{ provide: LOGIN_URL_LEGACY, useValue: config.legacyLogin !== null && config.legacyLogin !== undefined ? config.legacyLogin : false },
|
|
213
|
-
{ provide: NAVBAR_EXTENSIONS, useValue: config.navbarExtensions ? config.navbarExtensions : [] },
|
|
214
|
-
{ provide: ANONYMOUS_MODE, useValue: config.anonymousMode ? config.anonymousMode : false },
|
|
215
|
-
{ provide: BaseAdapter, useClass: config?.chartsAdapter || BaseAdapter },
|
|
216
|
-
{ provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },
|
|
217
|
-
{ provide: GlobalSearchService, useClass: config?.globalSearchService || GlobalSearchService },
|
|
218
|
-
{ provide: CompletedJobRedirectionService, useClass: config?.completedJobRedirectionService || CompletedJobRedirectionService },
|
|
219
|
-
{ provide: MenuFilteringService, useClass: config?.menuFilteringService || MenuFilteringService },
|
|
220
|
-
{ provide: UserPreferencesService, useClass: config?.userPreferencesProvider || UserPreferencesService },
|
|
221
|
-
{ provide: MENU_LOCALIZATION, useValue: config.menuLoc || null },
|
|
222
|
-
{ provide: MENU, useValue: config.menu },
|
|
223
|
-
{ provide: USE_FAKE_ACCESS_TOKEN, useValue: !!config.fakeAccessToken },
|
|
224
|
-
{ provide: PreferencesPersistor, useClass: config.fakeAccessToken ? LocalStoragePreferencesPersistor : ApplicationPreferencesPersistor },
|
|
225
|
-
{ provide: CachePersistor, useClass: config.fakeAccessToken ? LocalStorageCachePersistor : ApplicationCachePersistor }
|
|
226
|
-
]
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
230
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
231
|
-
HttpClientModule,
|
|
232
|
-
TemplateCommon,
|
|
233
|
-
ComponentsModule, i1.ServiceWorkerModule, i2.RouterModule, i3.EsTableModule, i4.FormsAndValidationsModule, i5.ExtensionsModule, i6.LocalizationModule, i7.AccessControlModule, i8.HttpserviceModule, i9.SignalrNotificationsModule, i10.PreferencesModule, i11.EsChartsModule, i12.TooltipModule, i13.ModalModule, i14.ProgressbarModule, i15.BsDropdownModule, i16.ToastrModule, i17.TimepickerModule, i18.ContextMenuModule, i19.DragulaModule] }); }
|
|
234
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
235
|
-
}
|
|
236
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
237
|
-
type: NgModule,
|
|
238
|
-
args: [{
|
|
239
|
-
declarations: [AppComponent],
|
|
240
|
-
imports: [...MODULES]
|
|
241
|
-
}]
|
|
242
|
-
}] });
|
|
243
|
-
export class EsFaenzaCoreModuleConfig {
|
|
244
|
-
}
|
|
245
|
-
export var DebugFlags;
|
|
246
|
-
(function (DebugFlags) {
|
|
247
|
-
DebugFlags[DebugFlags["None"] = 0] = "None";
|
|
248
|
-
DebugFlags[DebugFlags["Localizations"] = 1] = "Localizations";
|
|
249
|
-
DebugFlags[DebugFlags["Extensions"] = 2] = "Extensions";
|
|
250
|
-
DebugFlags[DebugFlags["AccessControl"] = 4] = "AccessControl";
|
|
251
|
-
DebugFlags[DebugFlags["Http"] = 8] = "Http";
|
|
252
|
-
DebugFlags[DebugFlags["SignalR"] = 16] = "SignalR";
|
|
253
|
-
DebugFlags[DebugFlags["Preferences"] = 32] = "Preferences";
|
|
254
|
-
DebugFlags[DebugFlags["Charts"] = 64] = "Charts";
|
|
255
|
-
DebugFlags[DebugFlags["Tabber"] = 128] = "Tabber";
|
|
256
|
-
DebugFlags[DebugFlags["All"] = 255] = "All";
|
|
257
|
-
})(DebugFlags || (DebugFlags = {}));
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQTZCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQVUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxzQkFBc0IsQ0FBQztBQUU5QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGdC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QUFDLENBQUMsS0FBSyxFQUFFO2dCQUMzSSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMxSCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFO2dCQUN2RSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM3SCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMvSCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUN4SSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM3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bnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBOZ01vZHVsZSwgRXJyb3JIYW5kbGVyLCBMT0NBTEVfSUQsIEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgVHlwZSwgaXNEZXZNb2RlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlck1vZHVsZSwgTm9QcmVsb2FkaW5nLCBST1VURVMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IEVWRU5UX01BTkFHRVJfUExVR0lOUyB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VXb3JrZXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvc2VydmljZS13b3JrZXJcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgXCJAYW5ndWxhci9jb21tb24vbG9jYWxlcy9nbG9iYWwvaXRcIjtcclxuXHJcbi8vIFBsdWdpbnNcclxuaW1wb3J0IHsgTmd4TWF0RGF0ZUFkYXB0ZXIsIE5HWF9NQVRfREFURV9GT1JNQVRTIH0gZnJvbSBcIkBhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyXCI7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tIFwibmd4LWNvb2tpZS1zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRvYXN0ck1vZHVsZSB9IGZyb20gXCJuZ3gtdG9hc3RyXCI7XHJcbmltcG9ydCBcIndpZGdzdGVyL3dpZGdzdGVyLmpzXCI7XHJcblxyXG4vLyBFU1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc01vZHVsZSwgUFJFRl9ERUJVR19NT0RFLCBQcmVmZXJlbmNlc1BlcnNpc3RvciwgTG9jYWxTdG9yYWdlUHJlZmVyZW5jZXNQZXJzaXN0b3IsIENhY2hlUGVyc2lzdG9yLCBMb2NhbFN0b3JhZ2VDYWNoZVBlcnNpc3RvciB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uTW9kdWxlLCBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMb2NhbGl6YXRpb25NaXNzaW5nUG9saWN5LCBMT0NfREVCVUdfTU9ERSwgQmFzZUxvY2FsaXphdGlvbiB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBIdHRwc2VydmljZU1vZHVsZSwgSHR0cFNlcnZpY2VFeHRlbnNpb25zLCBIVFRQU2VydmljZSwgSFRUUF9ERUJVR19NT0RFLCBIVFRQX0lOVkFMSURBVElPTiB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUsIFNHUl9ERUJVR19NT0RFLCBCYXNlTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3NpZ25hbHItbm90aWZpY2F0aW9uc1wiO1xyXG5pbXBvcnQgeyBGb3Jtc0FuZFZhbGlkYXRpb25zTW9kdWxlLCBOZ3hFeHBhbmRlZERheUpzRGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGVzZmFlbnphL2Zvcm1zLWFuZC12YWxpZGF0aW9uc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlLCBBY2Nlc3NDb250cm9sU2VydmljZSwgQUNDX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IEJhc2VBZGFwdGVyLCBFc0NoYXJ0c01vZHVsZSwgRVNDX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2VzLWNoYXJ0c1wiO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25zTW9kdWxlLCBFWFRfREVCVUdfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudU1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvbmd4LWNvbnRleHRtZW51XCI7XHJcbmltcG9ydCB7IERyYWd1bGFNb2R1bGUgfSBmcm9tICdAZXNmYWVuemEvbmd4LWRyYWd1bGEnO1xyXG5pbXBvcnQgeyBFc1RhYmxlTW9kdWxlIH0gZnJvbSBcIkBlc2ZhZW56YS9lcy10YWJsZVwiO1xyXG5pbXBvcnQgeyBUQUJfREVCVUdfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvdGFiYmVyXCI7XHJcblxyXG4vLyBDb3JlXHJcbmltcG9ydCB7IEFQUEVycm9ySGFuZGxlciwgSFRUUFNlcnZpY2VFeHRlbnNpb25zLCBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yLCBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yLCBTZXNzaW9uUmV0cmlldmVyLCBPdXRab25lRXZlbnRQbHVnaW4sIFRva2VuU2VydmljZSwgR2xvYmFsU2VhcmNoU2VydmljZSwgQ29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlLCBNZW51RmlsdGVyaW5nU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBQYWdlTm90Rm91bmRDb21wb25lbnQsIFNlcnZlckVycm9yQ29tcG9uZW50LCBBbmd1bGFyRXJyb3JDb21wb25lbnQsIEV4dGVybmFsUGFnZXNDb21wb25lbnQsIEphY2VMb2dpbkNvbXBvbmVudCwgUGFnZXNDb21wb25lbnQsIFJlZGlyZWN0ZXJDb21wb25lbnQsIENvbXBvbmVudHNNb2R1bGUsIFVzZXJJbmZvc0NvbXBvbmVudCB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9jb21wb25lbnRzXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uTWVudSwgRW52T3B0aW9ucywgQWNjb3VudFNjb3BlLCBNRU5VLCBNRU5VX0xPQ0FMSVpBVElPTiwgUkVESVJFQ1RfTUFQLCBVU0VfRkFLRV9BQ0NFU1NfVE9LRU4sIE5BVkJBUl9FWFRFTlNJT05TLCBMT0dJTl9VUkxfTEVHQUNZLCBBTk9OWU1PVVNfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIlxyXG5pbXBvcnQgeyBST1VURSwgRU1CRURERURfUk9VVEUgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCJcclxuaW1wb3J0IHsgVGVtcGxhdGVDb21tb24gfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvbW9kdWxlc1wiO1xyXG5cclxuLy8gUnhKc1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLy8gQm9vdHN0cmFwXHJcbmltcG9ydCB7IFByb2dyZXNzYmFyTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXJcIjtcclxuaW1wb3J0IHsgVGltZXBpY2tlck1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL3RpbWVwaWNrZXJcIjtcclxuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC90b29sdGlwXCI7XHJcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tIFwiLi9hcHAuY29tcG9uZW50XCI7XHJcblxyXG4vLyBSZXBvc2l0b3JpZXNcclxuY29uc3QgR0VUX0phY2VfR2V0QWNjb3VudFNjb3BlOiBzdHJpbmcgPSBcIi9hcGkvSmFjZS9HZXRBY2NvdW50U2NvcGVcIjtcclxuY29uc3QgR0VUX0FwcENvbmZpZ19HZXRBcHBDb25maWc6IHN0cmluZyA9IFwiL2FwaS9BcHBDb25maWcvR2V0QXBwQ29uZmlnXCI7XHJcblxyXG5kZWNsYXJlIHZhciBteWNvbmZpZzogRW52T3B0aW9ucztcclxuXHJcbmNvbnN0IGJhc2VBcHBSb3V0ZXM6IFJvdXRlcyA9IFtcclxuICAgIHsgcGF0aDogXCJcIiwgcmVkaXJlY3RUbzogXCJwYWdlcy97ZW1wdHlSb3V0ZVJlZGlyZWN0fVwiLCBwYXRoTWF0Y2g6IFwiZnVsbFwiIH0sXHJcbiAgICB7IHBhdGg6IEVNQkVEREVEX1JPVVRFLCBjb21wb25lbnQ6IEV4dGVybmFsUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogUk9VVEUsIGNvbXBvbmVudDogUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZFwiLCBjb21wb25lbnQ6IFJlZGlyZWN0ZXJDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZC86dGVuYW50XCIsIGNvbXBvbmVudDogUmVkaXJlY3RlckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImxvZ2luXCIsIGNvbXBvbmVudDogSmFjZUxvZ2luQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiaXNlcnJcIiwgY29tcG9uZW50OiBTZXJ2ZXJFcnJvckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImFuZXJyXCIsIGNvbXBvbmVudDogQW5ndWxhckVycm9yQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiKipcIiwgY29tcG9uZW50OiBQYWdlTm90Rm91bmRDb21wb25lbnQgfSxcclxuXHJcbl07XHJcblxyXG5jb25zdCBNT0RVTEVTID0gW1xyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXHJcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgVGVtcGxhdGVDb21tb24sXHJcbiAgICBDb21wb25lbnRzTW9kdWxlLFxyXG5cclxuICAgIC8vIEF0dGVuemlvbmUgYSBsYXNjaWFybG8gYXR0aXZvIGluIG5nIHNlcnZlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy80NzQ1NVxyXG4gICAgU2VydmljZVdvcmtlck1vZHVsZS5yZWdpc3Rlcignbmdzdy13b3JrZXIuanMnLCB7IGVuYWJsZWQ6ICFpc0Rldk1vZGUoKSB9KSxcclxuICAgIFJvdXRlck1vZHVsZS5mb3JSb290KFtdLCB7IHVzZUhhc2g6IHRydWUsIHByZWxvYWRpbmdTdHJhdGVneTogTm9QcmVsb2FkaW5nLCBvblNhbWVVcmxOYXZpZ2F0aW9uOiBcInJlbG9hZFwiIH0pLFxyXG5cclxuICAgIC8vIEVTXHJcbiAgICBFc1RhYmxlTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEZvcm1zQW5kVmFsaWRhdGlvbnNNb2R1bGUuZm9yUm9vdCh7IGFjb2N1c3RvbTogXCJPXCIsIHNsaWRlck1vZGU6IHRydWUgfSksXHJcbiAgICBFeHRlbnNpb25zTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIExvY2FsaXphdGlvbk1vZHVsZS5mb3JSb290KHsgbG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeTogTG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeS5QcmludFNvdXJjZSwgZGVmYXVsdExvY2FsZTogJ2l0LUlUJyB9KSxcclxuICAgIEFjY2Vzc0NvbnRyb2xNb2R1bGUuZm9yUm9vdCh7IGNvbnRleHRBd2FyZUtleTogXCJPXCIsIGRlZmF1bHRDb25kaXRpb246ICcoUjpKYWNlIEFkbWluIHx8IFI6SmFjZSBTdXBwb3J0KScgfSksXHJcbiAgICBIdHRwc2VydmljZU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBTaWduYWxyTm90aWZpY2F0aW9uc01vZHVsZS5mb3JSb290KHsgZW5kcG9pbnRVcmw6ICdub3RpZnknLCB1c2VNZXNzYWdlUGFjazogdHJ1ZSB9KSxcclxuICAgIFByZWZlcmVuY2VzTW9kdWxlLmZvclJvb3QoeyByZXRyaWV2ZUFsbEF0U3RhcnQ6IHRydWUsIHNlc3Npb25SZXRyaWV2ZXI6IFNlc3Npb25SZXRyaWV2ZXIsIHByZWZlcmVuY2VQZXJzaXN0b3I6IEFwcGxpY2F0aW9uUHJlZmVyZW5jZXNQZXJzaXN0b3IsIGNhY2hlUGVyc2lzdG9yOiBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yIH0pLFxyXG4gICAgRXNDaGFydHNNb2R1bGUuZm9yUm9vdCgpLFxyXG5cclxuICAgIC8vIEJvb3RzdHJhcFxyXG4gICAgVG9vbHRpcE1vZHVsZS5mb3JSb290KCksXHJcbiAgICBNb2RhbE1vZHVsZS5mb3JSb290KCksXHJcbiAgICBQcm9ncmVzc2Jhck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIFRvYXN0ck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBUaW1lcGlja2VyTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIENvbnRleHRNZW51TW9kdWxlLmZvclJvb3QoKSxcclxuICAgIERyYWd1bGFNb2R1bGUuZm9yUm9vdCgpXHJcbl07XHJcblxyXG4vLyBHZW5lcmF0b3JlIGRlaSBmb3JtYXRpIGRhdGFcclxudmFyIGZvcm1hdHMgPSAoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFyc2U6IHsgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpIH0sXHJcbiAgICAgICAgZGlzcGxheToge1xyXG4gICAgICAgICAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZJyArIChzdHlsZSA9PT0gJ2xvbmcnID8gJyBISDptbTpzcycgOiAnJyksXHJcbiAgICAgICAgICAgIG1vbnRoWWVhckxhYmVsOiAnTU0gWVlZWScsXHJcbiAgICAgICAgICAgIGRhdGVBMTF5TGFiZWw6ICdERC9NTS9ZWVlZJyArIChzdHlsZSA9PT0gJ2xvbmcnID8gJyBISDptbTpzcycgOiAnJyksXHJcbiAgICAgICAgICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NIFlZWVknLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IGxvY2FsZUZhY3RvcnkgPSAobG9jOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSA9PiBsb2MuU21hbGxMb2NhbGU7XHJcblxyXG5jb25zdCBQUk9WSURFUlMgPSBbXHJcbiAgICBDb29raWVTZXJ2aWNlLFxyXG5cclxuICAgIC8vIFByb3ZpZGVycyBhcHBsaWNhdGl2aVxyXG4gICAgeyBwcm92aWRlOiBFcnJvckhhbmRsZXIsIHVzZUNsYXNzOiBBUFBFcnJvckhhbmRsZXIgfSxcclxuICAgIHsgcHJvdmlkZTogRVZFTlRfTUFOQUdFUl9QTFVHSU5TLCB1c2VFeGlzdGluZzogT3V0Wm9uZUV2ZW50UGx1Z2luLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBIdHRwU2VydmljZUV4dGVuc2lvbnMsIHVzZUNsYXNzOiBIVFRQU2VydmljZUV4dGVuc2lvbnMgfSxcclxuXHJcbiAgICAvLyBMb2NhbGUgZSBnZXN0aW9uaSBkZWxsZSBkYXRlXHJcbiAgICB7IHByb3ZpZGU6IExPQ0FMRV9JRCwgdXNlRmFjdG9yeTogbG9jYWxlRmFjdG9yeSwgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlRmFjdG9yeTogbG9jYWxlRmFjdG9yeSwgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBmb3JtYXRzKCdzaG9ydCcpIH0sXHJcblxyXG4gICAgLy8gUXVlc3RpIGR1ZSBzb25vIHByb3ZpZGF0aSBkYWwgRm9ybXNBbmRWYWxpZGF0aW9uTW9kdWxlIHN0ZXNzbywgcGVyw7IgcXVlc3QndWx0aW1vIMOoIGRlZmluaXRvIGluIGZvclJvb3Qgc29sbyBsYXRvIGNvbXBvbmVudGkgc2hhcmVkLCBcclxuICAgIC8vIHF1aW5kaSBwZXIgcmVuZGVyZSBxdWVzdGkgcHJvdmlkZXIgZGlzcG9uaWJpbGkgYW5jaGUgYSBtb2R1bGkgZXN0ZXJuaSBkZXZvIHJpcHJvdmlkYXJsaSBhbmNoZSBxdWlcclxuICAgIHsgcHJvdmlkZTogTkdYX01BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBmb3JtYXRzKCdsb25nJykgfSxcclxuICAgIHsgcHJvdmlkZTogTmd4TWF0RGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBOZ3hFeHBhbmRlZERheUpzRGF0ZUFkYXB0ZXIgfVxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbLi4uTU9EVUxFU11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVzRmFlbnphQ29yZU1vZHVsZSB7XHJcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBFc0ZhZW56YUNvcmVNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEVzRmFlbnphQ29yZU1vZHVsZT4ge1xyXG4gICAgICAgIGlmIChjb25maWcucm91dGVzKSB7XHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bnRhIGRlbGxhIHJvdXRlIGRpIGVtYmVkZGluZyBzZSBub24gZGljaGlhcmF0YSwgbGF0byBhZ2dpdW50YSBmYWNjaW8gaW4gbW9kbyBjaGUgbCdlbWJlZGRpbmcgc2lhIGRpc3BvbmliaWxlIHNvbG8gZGEgcm91dGUgaW50ZXJuZSAocGFnZXMgT0ssIHBhZ2VzX2V4dCBOT04gT0spXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLnJvdXRlcy5maW5kKHQgPT4gdC5wYXRoLnN0YXJ0c1dpdGgoXCJlbWJlZFwiKSkpXHJcbiAgICAgICAgICAgICAgICBjb25maWcucm91dGVzID0gWy4uLmNvbmZpZy5yb3V0ZXMsIHsgcGF0aDogXCJlbWJlZC86bW9kdWxlXCIsIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCdAZXNmYWVuemEvY29yZS9tb2R1bGVzJykudGhlbihtID0+IG0uRW1iZWRkaW5nTW9kdWxlKSB9XVxyXG5cclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlc1swXS5yZWRpcmVjdFRvID0gW1wicGFnZXNcIiwgXCJwYWdlc19leHRcIl0ubWFwKHQgPT4gKGNvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJycpLnN0YXJ0c1dpdGgodCkpLnNvbWUodCA9PiAhIXQpID8gXCIvXCIgKyBjb25maWcuZW1wdHlSb3V0ZVJlZGlyZWN0IDogIGBwYWdlcy8ke2NvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJ2Rhc2hib2FyZCd9YDtcclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlcy5maWx0ZXIodCA9PiBbXCJwYWdlc1wiLCBcInBhZ2VzX2V4dFwiXS5pbmNsdWRlcyh0LnBhdGgpKS5mb3JFYWNoKHBhdGggPT4ge1xyXG4gICAgICAgICAgICAgICAgcGF0aC5jaGlsZHJlbiA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHBhdGg6IFwicHJvZmlsZVwiLCBjb21wb25lbnQ6IFVzZXJJbmZvc0NvbXBvbmVudCwgZGF0YTogeyBJbnRlcm5hbE5hdmlnYXRpb246IHRydWUsIHRpdGxlOiBcInByb2ZpbG9cIiB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLnJvdXRlcy5maWx0ZXIociA9PiAhcGF0aC5wYXRoLmluY2x1ZGVzKFwicGFnZXNfZXh0XCIpIHx8ICFyLnBhdGguc3RhcnRzV2l0aChcImVtYmVkXCIpKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbmZpZy5kZWJ1Z01vZGUgPSAoIWlzRGV2TW9kZSgpICYmICFjb25maWcuZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzKSA/IERlYnVnRmxhZ3MuTm9uZSA6IChjb25maWcuZGVidWdNb2RlIHx8IERlYnVnRmxhZ3MuQWxsKTtcclxuXHJcbiAgICAgICAgbGV0IG1lcmdlZEFwcEluaXRpYWxpemVyID0gKGh0dHA6IEhUVFBTZXJ2aWNlLCBidHM6IFRva2VuU2VydmljZSwgYWFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgbG9jOiBCYXNlTG9jYWxpemF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFub255bW91c01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gTG9hZGluZyBBcHBDb25maWcuLi5cIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2V0PEVudk9wdGlvbnM+KEdFVF9BcHBDb25maWdfR2V0QXBwQ29uZmlnLCBudWxsLCBudWxsLCBmYWxzZSkucGlwZShjYXRjaEVycm9yKF8gPT4gb2Yoe30pKSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChhcHBDb25maWc6IEVudk9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gYXBwQ29uZmlnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBhcHBDb25maWcgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhYy5pbml0aWFsaXplSWRlbnRpdHkobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5pbml0aWFsaXplckZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIGN1c3RvbSBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvblwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbihodHRwLCBidHMsIGFhYykoKS5waXBlKHRhcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIEFwcENvbmZpZyBhbmQgQWNjb3VudCBTY29wZS4uLlwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCByZWFsT2JzZXJ2YWJsZSA9IGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ29uZmlnOiBodHRwLmdldDxFbnZPcHRpb25zPihHRVRfQXBwQ29uZmlnX0dldEFwcENvbmZpZywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKHt9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogaHR0cC5nZXQ8QWNjb3VudFNjb3BlPihHRVRfSmFjZV9HZXRBY2NvdW50U2NvcGUsIG51bGwsIG51bGwsIGZhbHNlKS5waXBlKGNhdGNoRXJyb3IoXyA9PiBvZihudWxsKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvYy5Mb2NhbGUucGlwZSh0YWtlKDEpLCBjYXRjaEVycm9yKF8gPT4gb2YoJ2l0LUlUJykpKSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlZE9ic2VydmFibGUgPSBjb25maWcub3B0aW9uc0FuZFNjb3BlUHJvdmlkZXIgfHwgcmVhbE9ic2VydmFibGU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZWRPYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwKChyZXM6IHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gcmVzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC5zZXRBcHBDb25maWcobXljb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMJ2FjY291bnQgc2NvcGUgbG8gcHJlbmRvIGRhbGxhIFF1ZXJ5IGEgYmFja2VuZCBzb2xvIHNlIG5vbiB1c28gaWwgRmFrZSB0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ0cy5VU0VfRkFLRV9BQ0NFU1NfVE9LRU4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidHMuYWNjb3VudFNjb3BlID0gcmVzLnNjb3BlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIGFwcENvbmZpZyBhbmQgc2NvcGUgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZGVudHRpdHkgPSBidHMuZ2V0SmFjZUlkZW50aXR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidHMuYWNjb3VudFNjb3BlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFjLmluaXRpYWxpemVJZGVudGl0eShpZGVudHRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIExvYWRpbmcgY3VzdG9tIGFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uXCIsIFwiYmFja2dyb3VuZC1jb2xvcjogeWVsbG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmluaXRpYWxpemVyRnVuY3Rpb24oaHR0cCwgYnRzLCBhYWMpKCkucGlwZSh0YXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEVzRmFlbnphQ29yZU1vZHVsZSxcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdmlkZXIgc3RhdGljaSAqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgICAgICAuLi5QUk9WSURFUlMsXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqIFByb3ZpZGVyIGN1c3RvbWl6emFiaWxpICoqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgICAgICAgICAgLi4uKCFjb25maWcucmVkaXJlY3Rpb25NYXAgPyBbXSA6IFt7IHByb3ZpZGU6IFJFRElSRUNUX01BUCwgdXNlVmFsdWU6IGNvbmZpZy5yZWRpcmVjdGlvbk1hcCB9XSksXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUiwgdXNlRmFjdG9yeTogbWVyZ2VkQXBwSW5pdGlhbGl6ZXIsIGRlcHM6IFtIVFRQU2VydmljZSwgVG9rZW5TZXJ2aWNlLCBBY2Nlc3NDb250cm9sU2VydmljZSwgQmFzZUxvY2FsaXphdGlvbl0sIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFJPVVRFUywgdXNlVmFsdWU6IGJhc2VBcHBSb3V0ZXMsIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExPQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5Mb2NhbGl6YXRpb25zKSA9PSBEZWJ1Z0ZsYWdzLkxvY2FsaXphdGlvbnMgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBFWFRfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuRXh0ZW5zaW9ucykgPT0gRGVidWdGbGFncy5FeHRlbnNpb25zIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQUNDX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkFjY2Vzc0NvbnRyb2wpID09IERlYnVnRmxhZ3MuQWNjZXNzQ29udHJvbCA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEhUVFBfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuSHR0cCkgPT0gRGVidWdGbGFncy5IdHRwIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogSFRUUF9JTlZBTElEQVRJT04sIHVzZVZhbHVlOiBjb25maWc/Lmh0dHBJbnZhbGlkYXRpb25DYWNoZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBUQUJfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuVGFiYmVyKSA9PSBEZWJ1Z0ZsYWdzLlRhYmJlciA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFNHUl9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5TaWduYWxSKSA9PSBEZWJ1Z0ZsYWdzLlNpZ25hbFIgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBQUkVGX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLlByZWZlcmVuY2VzKSA9PSBEZWJ1Z0ZsYWdzLlByZWZlcmVuY2VzIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRVNDX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkNoYXJ0cykgPT0gRGVidWdGbGFncy5DaGFydHMgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMT0dJTl9VUkxfTEVHQUNZLCB1c2VWYWx1ZTogY29uZmlnLmxlZ2FjeUxvZ2luICE9PSBudWxsICYmIGNvbmZpZy5sZWdhY3lMb2dpbiAhPT0gdW5kZWZpbmVkID8gY29uZmlnLmxlZ2FjeUxvZ2luIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkFWQkFSX0VYVEVOU0lPTlMsIHVzZVZhbHVlOiBjb25maWcubmF2YmFyRXh0ZW5zaW9ucyA/IGNvbmZpZy5uYXZiYXJFeHRlbnNpb25zIDogW10gfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQU5PTllNT1VTX01PREUsIHVzZVZhbHVlOiBjb25maWcuYW5vbnltb3VzTW9kZSA/IGNvbmZpZy5hbm9ueW1vdXNNb2RlIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQmFzZUFkYXB0ZXIsIHVzZUNsYXNzOiBjb25maWc/LmNoYXJ0c0FkYXB0ZXIgfHwgQmFzZUFkYXB0ZXIgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQmFzZU1lc3NhZ2VTZXJ2aWNlLCB1c2VDbGFzczogY29uZmlnPy5tZXNzYWdlU2VydmljZSB8fCBCYXNlTWVzc2FnZVNlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogR2xvYmFsU2VhcmNoU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8uZ2xvYmFsU2VhcmNoU2VydmljZSB8fCBHbG9iYWxTZWFyY2hTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8uY29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlIHx8IENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBNZW51RmlsdGVyaW5nU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8ubWVudUZpbHRlcmluZ1NlcnZpY2UgfHwgTWVudUZpbHRlcmluZ1NlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogVXNlclByZWZlcmVuY2VzU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8udXNlclByZWZlcmVuY2VzUHJvdmlkZXIgfHwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBNRU5VX0xPQ0FMSVpBVElPTiwgdXNlVmFsdWU6IGNvbmZpZy5tZW51TG9jIHx8IG51bGwgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTUVOVSwgdXNlVmFsdWU6IGNvbmZpZy5tZW51IH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFVTRV9GQUtFX0FDQ0VTU19UT0tFTiwgdXNlVmFsdWU6ICEhY29uZmlnLmZha2VBY2Nlc3NUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBQcmVmZXJlbmNlc1BlcnNpc3RvciwgdXNlQ2xhc3M6IGNvbmZpZy5mYWtlQWNjZXNzVG9rZW4gPyBMb2NhbFN0b3JhZ2VQcmVmZXJlbmNlc1BlcnNpc3RvciA6IEFwcGxpY2F0aW9uUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQ2FjaGVQZXJzaXN0b3IsIHVzZUNsYXNzOiBjb25maWcuZmFrZUFjY2Vzc1Rva2VuID8gTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IgOiBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFc0ZhZW56YUNvcmVNb2R1bGVDb25maWcge1xyXG4gICAgLyogUm91dGUgYXBwbGljYXRpdmUsIHNvbG8gcXVlbGxlIGRlbnRybyBhICoqcGFnZXMqKiAqL1xyXG4gICAgcm91dGVzITogUm91dGVzO1xyXG4gICAgLyogTWVuw7kgZGVsbGEgc2lkZWJhciBkZWxsJ2FwcGxpY2F6aW9uZSAqL1xyXG4gICAgbWVudTogQXBwbGljYXRpb25NZW51W107XHJcbiAgICAvKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBsJ2FjY2VzcyB0b2tlbiBmaW50byAqL1xyXG4gICAgZmFrZUFjY2Vzc1Rva2VuPzogYm9vbGVhbjtcclxuICAgIC8qIFRpcG8gZGEgdXNhcmUgcGVyIGdlbmVyYXJlIGxlIGxvY2FsaXp6YWl6b25pIGRlbCBtZW7DuSAqL1xyXG4gICAgbWVudUxvYz86IFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT47XHJcbiAgICAvKiBSZWRpcmVjdCBwZXIgbGEgcm9vdCBkZWxsJ2FwcGxpY2F6aW9uZSwgZGkgZGVmYXVsdCDDqCBpbXBvc3RhdG8gYSAqKmRhc2hib2FyZCoqLiBTZSBhbGwnaW50ZXJubyBkZWxsZSAqKnJvdXRlcyoqIG5vbiBlc2lzdGUgbGEgcm91dGUgKipkYXNoYm9hcmQqKiDDqCBkYSBpbXBvc3RhcmUgYWRlZ3VhdGFtZW50ZSAqL1xyXG4gICAgZW1wdHlSb3V0ZVJlZGlyZWN0Pzogc3RyaW5nO1xyXG4gICAgLyogU2Ugbm9uIHNwZWNpZmljYXRhIHZpZW5lIGltcG9zdGF0YSBhdXRvbWF0aWNhbWVudGUgYWQgXCJBbGxcIiBpbiBmYXNlIGRpIGRlYnVnLCBcIk5vbmVcIiBpbiBwcm9kdXppb25lIChxdWVzdCd1bHRpbW8gYSBwcmVzY2luZGVyZSwgYSBtZW5vIGNoZSAqKmZvcmNlRGVidWdNb2RlRm9yUHJvZEJ1aWxkcyoqIG5vbiBzaWEgdHJ1ZSkqL1xyXG4gICAgZGVidWdNb2RlPzogRGVidWdGbGFncztcclxuICAgIC8qIFBlcm1ldHRlIGRpIGZvcnphcmUgbGEgbW9kYWxpdMOgIGRpIGRlYnVnIHNwZWNpZmljYXRhIGFuY2hlIHBlciBsZSBidWlsZCBkaSBwcm9kdXppb25lLCAqKk5PTiBJTVBPU1RBUkUgQSBUUlVFKiogYSBtZW5vIGRpIHJhcmlzc2ltaXNzaW1pc3NpbWkgY2FzaSAqL1xyXG4gICAgZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzPzogYm9vbGVhbjtcclxuICAgIC8qIENhY2hlIGRpIGludmFsaWRhemlvbmUgcGVyIGxlIGNoaWFtYXRlIGh0dHAgKi9cclxuICAgIGh0dHBJbnZhbGlkYXRpb25DYWNoZT86IGFueTtcclxuICAgIC8qIEZ1bnppb25lIGRpIGluaXppYWxpenphemlvbmUgQVBQX0lOSVRJQUxJWkVSLWxpa2UgY2hlIHZpZW5lIHJpY2hpYW1hdGEgZG9wbyBhbGxhIGZ1bnppb25lIGRpIGluaXppYWxpenphemlvbmUgZGkgZGVmYXVsdCAqL1xyXG4gICAgaW5pdGlhbGl6ZXJGdW5jdGlvbj86IChodHRwOiBIVFRQU2VydmljZSwgYnRzOiBUb2tlblNlcnZpY2UsIGFhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UpID0+ICgpID0+IE9ic2VydmFibGU8YW55PjtcclxuICAgIC8qIE1hcHBhIGRpIHJlZGlyZWN0IHBlciBwZXJtZXR0ZXJlIGFsICoqUmVkaXJlY3RlckNvbXBvbmVudCoqIGRpIHNhcGVyZSBkb3ZlIG5hdmlnYXJlIGluIGJhc2UgYSBPZ2dldHRvLVBhcmFtZXRyaSAqL1xyXG4gICAgcmVkaXJlY3Rpb25NYXA/OiB7IFtpbmRleDogc3RyaW5nXTogeyB1cmw6IHN0cmluZywgcGFyYW1zOiBzdHJpbmdbXSB9IH07XHJcbiAgICAvKiBBZGF0dGF0b3JlIGRlaSBncmFmaWNpIG5lbCBjYXNvIHVuIHByb2dldHRvIGZvc3NlIHZlY2NoaW8gKFJpbXVvdmliaWxlIHF1YW5kbyB0dXR0aSBpIHByb2dldHRpIHVzYW5vIG5hdGl2YW1lbnRlIGVzLWNoYXJ0cykgKi9cclxuICAgIGNoYXJ0c0FkYXB0ZXI/OiBUeXBlPEJhc2VBZGFwdGVyPjtcclxuICAgIC8qIFNlcnZpemlvIGNoZSBlc3BvbmUgaSBtZXNzYWdnaSBkaXNwb25pYmlsaSBzdSBTaWduYWxyICovXHJcbiAgICBtZXNzYWdlU2VydmljZT86IFR5cGU8QmFzZU1lc3NhZ2VTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIHBlciBsYSBzZWFyY2ggZ2xvYmFsZSBkZWwgbW9kdWxvICovXHJcbiAgICBnbG9iYWxTZWFyY2hTZXJ2aWNlPzogVHlwZTxHbG9iYWxTZWFyY2hTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIHBlciBmaWx0cmFyZSBsZSB2b2NpIGRpIG1lbsO5ICovXHJcbiAgICBtZW51RmlsdGVyaW5nU2VydmljZT86IFR5cGU8TWVudUZpbHRlcmluZ1NlcnZpY2U+O1xyXG4gICAgLyogU2Vydml6aW8gZGkgcmlkaXJlemlvbmUgcGVyIGpvYiBjb21wbGV0YXRpICovXHJcbiAgICBjb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2U/OiBUeXBlPENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZT47XHJcbiAgICAvKiBGdW56aW9uZSBkaSBvdmVycmlkZSBwZXIgcmVjdXBlcmFyZSBhY2NvdW50IHNjb3BlIGUgZW52b3B0aW9ucy4gUHXDsiBhbmNoZSBlc3NlcmUgdXRpbGl6emF0YSBwZXIgZm9ybmlyZSBtb2RlbGxpIGZpbnRpIGZpbm8gYWQgaW1wbGVtZW50YXppb25lICovXHJcbiAgICBvcHRpb25zQW5kU2NvcGVQcm92aWRlcj86IE9ic2VydmFibGU8eyBhcHBDb25maWc6IEVudk9wdGlvbnMsIHNjb3BlOiBBY2NvdW50U2NvcGUsIGxvY2FsZTogc3RyaW5nIH0+O1xyXG4gICAgLyogTGlzdGEgZGVpIGNvbXBvbmVudGkgY29uIGN1aSBlc3BhbmRlcmUgbGEgbmF2YmFyICovXHJcbiAgICBuYXZiYXJFeHRlbnNpb25zPzogVHlwZTxhbnk+W107XHJcbiAgICAvKiBTZXJ2aXppbyBkaSByZWN1cGVyby9tb2RpZmljYSBwcmVmZXJlbnplIHV0ZW50ZSAqL1xyXG4gICAgdXNlclByZWZlcmVuY2VzUHJvdmlkZXI/OiBUeXBlPFVzZXJQcmVmZXJlbmNlc1NlcnZpY2U+O1xyXG4gICAgLyogaWRlbnRpZmljYSBzZSB1dGlsaXp6YXJlIGxhIHZlcnNpb25lIHZlY2NoaWEgZGVsbCd1cmwgZGkgYXV0aCAoJHtteWNvbmZpZy5BVVRIX1VSTH0vbG9naW4vZm9ybT9jbGllbnQ9JHtteWNvbmZpZy5DTElFTlRfTkFNRX0pIGludmVjZSBjaGUgbGEgbnVvdmEgKCR7bXljb25maWcuQVVUSF9VUkx9L2xvZ2luO2NsaWVudD0ke215Y29uZmlnLkNMSUVOVF9OQU1FfSkgKi9cclxuICAgIGxlZ2FjeUxvZ2luPzogYm9vbGVhbjtcclxuICAgIC8qIEluZGljYSBzZSBpbCBzZXJ2aXppbyBkaSBhdXRlbnRpY2F6aW9uZSBkZXZlIGZ1bnppb25hcmUgaW4gYW5vbmltbyBsYXRvIEZyb250ZW5kLiBEZXYnZXNzZXJlIHV0aWxpenphdG8gaW5zaWVtZSBhbCB0YWcgXCJBdXRoXCIgaW4gY29kZSBiZWhpbmQgKi9cclxuICAgIGFub255bW91c01vZGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBEZWJ1Z0ZsYWdzIHtcclxuICAgIE5vbmUgPSAwLFxyXG4gICAgTG9jYWxpemF0aW9ucyA9IDEgPDwgMCxcclxuICAgIEV4dGVuc2lvbnMgPSAxIDw8IDEsXHJcbiAgICBBY2Nlc3NDb250cm9sID0gMSA8PCAyLFxyXG4gICAgSHR0cCA9IDEgPDwgMyxcclxuICAgIFNpZ25hbFIgPSAxIDw8IDQsXHJcbiAgICBQcmVmZXJlbmNlcyA9IDEgPDwgNSxcclxuICAgIENoYXJ0cyA9IDEgPDwgNixcclxuICAgIFRhYmJlciA9IDEgPDwgNyxcclxuICAgIEFsbCA9IH4ofjAgPDwgOClcclxufSJdfQ==
|
|
1
|
+
// Angular
|
|
2
|
+
import { NgModule, ErrorHandler, LOCALE_ID, APP_INITIALIZER, isDevMode } from "@angular/core";
|
|
3
|
+
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
4
|
+
import { RouterModule, NoPreloading, ROUTES } from "@angular/router";
|
|
5
|
+
import { MAT_DATE_FORMATS, MAT_DATE_LOCALE } from "@angular/material/core";
|
|
6
|
+
import { EVENT_MANAGER_PLUGINS } from "@angular/platform-browser";
|
|
7
|
+
import { ServiceWorkerModule } from "@angular/service-worker";
|
|
8
|
+
import { HttpClientModule } from "@angular/common/http";
|
|
9
|
+
import "@angular/common/locales/global/it";
|
|
10
|
+
// Plugins
|
|
11
|
+
import { NgxMatDateAdapter, NGX_MAT_DATE_FORMATS } from "@angular-material-components/datetime-picker";
|
|
12
|
+
import { CookieService } from "ngx-cookie-service";
|
|
13
|
+
import { ToastrModule } from "ngx-toastr";
|
|
14
|
+
import "widgster/widgster.js";
|
|
15
|
+
// ES
|
|
16
|
+
import { PreferencesModule, PREF_DEBUG_MODE, PreferencesPersistor, LocalStoragePreferencesPersistor, CachePersistor, LocalStorageCachePersistor } from "@esfaenza/preferences";
|
|
17
|
+
import { LocalizationModule, LocalizationService, LocalizationMissingPolicy, LOC_DEBUG_MODE, BaseLocalization } from "@esfaenza/localizations";
|
|
18
|
+
import { HttpserviceModule, HttpServiceExtensions, HTTPService, HTTP_DEBUG_MODE, HTTP_INVALIDATION } from "@esfaenza/httpservice";
|
|
19
|
+
import { SignalrNotificationsModule, SGR_DEBUG_MODE, BaseMessageService } from "@esfaenza/signalr-notifications";
|
|
20
|
+
import { FormsAndValidationsModule, NgxExpandedDayJsDateAdapter } from "@esfaenza/forms-and-validations";
|
|
21
|
+
import { AccessControlModule, AccessControlService, ACC_DEBUG_MODE } from "@esfaenza/access-control";
|
|
22
|
+
import { BaseAdapter, EsChartsModule, ESC_DEBUG_MODE } from "@esfaenza/es-charts";
|
|
23
|
+
import { ExtensionsModule, EXT_DEBUG_MODE } from "@esfaenza/extensions";
|
|
24
|
+
import { ContextMenuModule } from "@esfaenza/ngx-contextmenu";
|
|
25
|
+
import { DragulaModule } from '@esfaenza/ngx-dragula';
|
|
26
|
+
import { EsTableModule } from "@esfaenza/es-table";
|
|
27
|
+
import { TAB_DEBUG_MODE } from "@esfaenza/tabber";
|
|
28
|
+
// Core
|
|
29
|
+
import { APPErrorHandler, HTTPServiceExtensions, ApplicationPreferencesPersistor, ApplicationCachePersistor, SessionRetriever, OutZoneEventPlugin, TokenService, GlobalSearchService, CompletedJobRedirectionService, MenuFilteringService, UserPreferencesService } from "@esfaenza/core/services";
|
|
30
|
+
import { PageNotFoundComponent, ServerErrorComponent, AngularErrorComponent, ExternalPagesComponent, JaceLoginComponent, PagesComponent, RedirecterComponent, ComponentsModule, UserInfosComponent } from "@esfaenza/core/components";
|
|
31
|
+
import { MENU, MENU_LOCALIZATION, REDIRECT_MAP, USE_FAKE_ACCESS_TOKEN, NAVBAR_EXTENSIONS, LOGIN_URL_LEGACY, ANONYMOUS_MODE } from "@esfaenza/core/domain";
|
|
32
|
+
import { ROUTE, EMBEDDED_ROUTE } from "@esfaenza/core/domain";
|
|
33
|
+
import { TemplateCommon } from "@esfaenza/core/modules";
|
|
34
|
+
// RxJs
|
|
35
|
+
import { catchError, switchMap, take, tap } from "rxjs/operators";
|
|
36
|
+
import { forkJoin, of } from "rxjs";
|
|
37
|
+
// Bootstrap
|
|
38
|
+
import { ProgressbarModule } from "ngx-bootstrap/progressbar";
|
|
39
|
+
import { TimepickerModule } from "ngx-bootstrap/timepicker";
|
|
40
|
+
import { BsDropdownModule } from "ngx-bootstrap/dropdown";
|
|
41
|
+
import { TooltipModule } from "ngx-bootstrap/tooltip";
|
|
42
|
+
import { ModalModule } from "ngx-bootstrap/modal";
|
|
43
|
+
// Applicazione
|
|
44
|
+
import { AppComponent } from "./app.component";
|
|
45
|
+
import * as i0 from "@angular/core";
|
|
46
|
+
import * as i1 from "@angular/service-worker";
|
|
47
|
+
import * as i2 from "@angular/router";
|
|
48
|
+
import * as i3 from "@esfaenza/es-table";
|
|
49
|
+
import * as i4 from "@esfaenza/forms-and-validations";
|
|
50
|
+
import * as i5 from "@esfaenza/extensions";
|
|
51
|
+
import * as i6 from "@esfaenza/localizations";
|
|
52
|
+
import * as i7 from "@esfaenza/access-control";
|
|
53
|
+
import * as i8 from "@esfaenza/httpservice";
|
|
54
|
+
import * as i9 from "@esfaenza/signalr-notifications";
|
|
55
|
+
import * as i10 from "@esfaenza/preferences";
|
|
56
|
+
import * as i11 from "@esfaenza/es-charts";
|
|
57
|
+
import * as i12 from "ngx-bootstrap/tooltip";
|
|
58
|
+
import * as i13 from "ngx-bootstrap/modal";
|
|
59
|
+
import * as i14 from "ngx-bootstrap/progressbar";
|
|
60
|
+
import * as i15 from "ngx-bootstrap/dropdown";
|
|
61
|
+
import * as i16 from "ngx-toastr";
|
|
62
|
+
import * as i17 from "ngx-bootstrap/timepicker";
|
|
63
|
+
import * as i18 from "@esfaenza/ngx-contextmenu";
|
|
64
|
+
import * as i19 from "@esfaenza/ngx-dragula";
|
|
65
|
+
// Repositories
|
|
66
|
+
const GET_Jace_GetAccountScope = "/api/Jace/GetAccountScope";
|
|
67
|
+
const GET_AppConfig_GetAppConfig = "/api/AppConfig/GetAppConfig";
|
|
68
|
+
const baseAppRoutes = [
|
|
69
|
+
{ path: "", redirectTo: "pages/{emptyRouteRedirect}", pathMatch: "full" },
|
|
70
|
+
{ path: EMBEDDED_ROUTE, component: ExternalPagesComponent },
|
|
71
|
+
{ path: ROUTE, component: PagesComponent },
|
|
72
|
+
{ path: "rd", component: RedirecterComponent },
|
|
73
|
+
{ path: "rd/:tenant", component: RedirecterComponent },
|
|
74
|
+
{ path: "login", component: JaceLoginComponent },
|
|
75
|
+
{ path: "iserr", component: ServerErrorComponent },
|
|
76
|
+
{ path: "anerr", component: AngularErrorComponent },
|
|
77
|
+
{ path: "**", component: PageNotFoundComponent },
|
|
78
|
+
];
|
|
79
|
+
const MODULES = [
|
|
80
|
+
BrowserAnimationsModule,
|
|
81
|
+
HttpClientModule,
|
|
82
|
+
TemplateCommon,
|
|
83
|
+
ComponentsModule,
|
|
84
|
+
// Attenzione a lasciarlo attivo in ng serve: https://github.com/angular/angular/issues/47455
|
|
85
|
+
ServiceWorkerModule.register('ngsw-worker.js', { enabled: !isDevMode() }),
|
|
86
|
+
RouterModule.forRoot([], { useHash: true, preloadingStrategy: NoPreloading, onSameUrlNavigation: "reload" }),
|
|
87
|
+
// ES
|
|
88
|
+
EsTableModule.forRoot(),
|
|
89
|
+
FormsAndValidationsModule.forRoot({ acocustom: "O", sliderMode: true }),
|
|
90
|
+
ExtensionsModule.forRoot(),
|
|
91
|
+
LocalizationModule.forRoot({ localizationMissingPolicy: LocalizationMissingPolicy.PrintSource, defaultLocale: 'it-IT' }),
|
|
92
|
+
AccessControlModule.forRoot({ contextAwareKey: "O", defaultCondition: '(R:Jace Admin || R:Jace Support)' }),
|
|
93
|
+
HttpserviceModule.forRoot(),
|
|
94
|
+
SignalrNotificationsModule.forRoot({ endpointUrl: 'notify', useMessagePack: true }),
|
|
95
|
+
PreferencesModule.forRoot({ retrieveAllAtStart: true, sessionRetriever: SessionRetriever, preferencePersistor: ApplicationPreferencesPersistor, cachePersistor: ApplicationCachePersistor }),
|
|
96
|
+
EsChartsModule.forRoot(),
|
|
97
|
+
// Bootstrap
|
|
98
|
+
TooltipModule.forRoot(),
|
|
99
|
+
ModalModule.forRoot(),
|
|
100
|
+
ProgressbarModule.forRoot(),
|
|
101
|
+
BsDropdownModule.forRoot(),
|
|
102
|
+
ToastrModule.forRoot(),
|
|
103
|
+
TimepickerModule.forRoot(),
|
|
104
|
+
ContextMenuModule.forRoot(),
|
|
105
|
+
DragulaModule.forRoot()
|
|
106
|
+
];
|
|
107
|
+
// Generatore dei formati data
|
|
108
|
+
var formats = (style) => {
|
|
109
|
+
return {
|
|
110
|
+
parse: { dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : '') },
|
|
111
|
+
display: {
|
|
112
|
+
dateInput: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),
|
|
113
|
+
monthYearLabel: 'MM YYYY',
|
|
114
|
+
dateA11yLabel: 'DD/MM/YYYY' + (style === 'long' ? ' HH:mm:ss' : ''),
|
|
115
|
+
monthYearA11yLabel: 'MM YYYY',
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
const localeFactory = (loc) => loc.SmallLocale;
|
|
120
|
+
const PROVIDERS = [
|
|
121
|
+
CookieService,
|
|
122
|
+
// Providers applicativi
|
|
123
|
+
{ provide: ErrorHandler, useClass: APPErrorHandler },
|
|
124
|
+
{ provide: EVENT_MANAGER_PLUGINS, useExisting: OutZoneEventPlugin, multi: true },
|
|
125
|
+
{ provide: HttpServiceExtensions, useClass: HTTPServiceExtensions },
|
|
126
|
+
// Locale e gestioni delle date
|
|
127
|
+
{ provide: LOCALE_ID, useFactory: localeFactory, deps: [LocalizationService] },
|
|
128
|
+
{ provide: MAT_DATE_LOCALE, useFactory: localeFactory, deps: [LocalizationService] },
|
|
129
|
+
{ provide: MAT_DATE_FORMATS, useValue: formats('short') },
|
|
130
|
+
// Questi due sono providati dal FormsAndValidationModule stesso, però quest'ultimo è definito in forRoot solo lato componenti shared,
|
|
131
|
+
// quindi per rendere questi provider disponibili anche a moduli esterni devo riprovidarli anche qui
|
|
132
|
+
{ provide: NGX_MAT_DATE_FORMATS, useValue: formats('long') },
|
|
133
|
+
{ provide: NgxMatDateAdapter, useClass: NgxExpandedDayJsDateAdapter }
|
|
134
|
+
];
|
|
135
|
+
export class EsFaenzaCoreModule {
|
|
136
|
+
static forRoot(config) {
|
|
137
|
+
if (config.routes) {
|
|
138
|
+
// Aggiunta della route di embedding se non dichiarata, lato aggiunta faccio in modo che l'embedding sia disponibile solo da route interne (pages OK, pages_ext NON OK)
|
|
139
|
+
if (!config.routes.find(t => t.path.startsWith("embed")))
|
|
140
|
+
config.routes = [...config.routes, { path: "embed/:module", loadChildren: () => import('@esfaenza/core/modules').then(m => m.EmbeddingModule) }];
|
|
141
|
+
baseAppRoutes[0].redirectTo = ["pages", "pages_ext"].map(t => (config.emptyRouteRedirect || '').startsWith(t)).some(t => !!t) ? "/" + config.emptyRouteRedirect : `pages/${config.emptyRouteRedirect || 'dashboard'}`;
|
|
142
|
+
baseAppRoutes.filter(t => ["pages", "pages_ext"].includes(t.path)).forEach(path => {
|
|
143
|
+
path.children = [
|
|
144
|
+
{ path: "profile", component: UserInfosComponent, data: { InternalNavigation: true, title: "profilo" } },
|
|
145
|
+
...config.routes.filter(r => !path.path.includes("pages_ext") || !r.path.startsWith("embed"))
|
|
146
|
+
];
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
config.debugMode = (!isDevMode() && !config.forceDebugModeForProdBuilds) ? DebugFlags.None : (config.debugMode || DebugFlags.All);
|
|
150
|
+
let mergedAppInitializer = (http, bts, aac, loc) => {
|
|
151
|
+
return () => {
|
|
152
|
+
if (config.anonymousMode) {
|
|
153
|
+
console.log("%c[APP_INITIALIZER] Loading AppConfig...", "background-color: yellow");
|
|
154
|
+
return http.get(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))).pipe(tap((appConfig) => {
|
|
155
|
+
myconfig = appConfig;
|
|
156
|
+
console.log("%c[APP_INITIALIZER] appConfig registered", "background-color: yellow");
|
|
157
|
+
aac.initializeIdentity(null);
|
|
158
|
+
}), switchMap(_ => {
|
|
159
|
+
if (!config.initializerFunction)
|
|
160
|
+
return of();
|
|
161
|
+
console.log("%c[APP_INITIALIZER] Loading custom application initialization", "background-color: yellow");
|
|
162
|
+
return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {
|
|
163
|
+
console.log("%c[APP_INITIALIZER] Initialization is over", "background-color: yellow");
|
|
164
|
+
}));
|
|
165
|
+
}));
|
|
166
|
+
}
|
|
167
|
+
console.log("%c[APP_INITIALIZER] Loading AppConfig and Account Scope...", "background-color: yellow");
|
|
168
|
+
let realObservable = forkJoin({
|
|
169
|
+
appConfig: http.get(GET_AppConfig_GetAppConfig, null, null, false).pipe(catchError(_ => of({}))),
|
|
170
|
+
scope: http.get(GET_Jace_GetAccountScope, null, null, false).pipe(catchError(_ => of(null))),
|
|
171
|
+
locale: loc.Locale.pipe(take(1), catchError(_ => of('it-IT'))),
|
|
172
|
+
});
|
|
173
|
+
let usedObservable = config.optionsAndScopeProvider || realObservable;
|
|
174
|
+
return usedObservable.pipe(tap((res) => {
|
|
175
|
+
myconfig = res.appConfig;
|
|
176
|
+
http.setAppConfig(myconfig);
|
|
177
|
+
// L'account scope lo prendo dalla Query a backend solo se non uso il Fake token
|
|
178
|
+
if (!bts.USE_FAKE_ACCESS_TOKEN)
|
|
179
|
+
bts.accountScope = res.scope;
|
|
180
|
+
console.log("%c[APP_INITIALIZER] appConfig and scope registered", "background-color: yellow");
|
|
181
|
+
var identtity = bts.getJaceIdentity();
|
|
182
|
+
if (bts.accountScope)
|
|
183
|
+
aac.initializeIdentity(identtity);
|
|
184
|
+
}), switchMap(_ => {
|
|
185
|
+
if (!config.initializerFunction)
|
|
186
|
+
return of();
|
|
187
|
+
console.log("%c[APP_INITIALIZER] Loading custom application initialization", "background-color: yellow");
|
|
188
|
+
return config.initializerFunction(http, bts, aac)().pipe(tap(_ => {
|
|
189
|
+
console.log("%c[APP_INITIALIZER] Initialization is over", "background-color: yellow");
|
|
190
|
+
}));
|
|
191
|
+
}));
|
|
192
|
+
};
|
|
193
|
+
};
|
|
194
|
+
return {
|
|
195
|
+
ngModule: EsFaenzaCoreModule,
|
|
196
|
+
providers: [
|
|
197
|
+
// *************************** Provider statici ***************************
|
|
198
|
+
...PROVIDERS,
|
|
199
|
+
// ************************ Provider customizzabili ************************
|
|
200
|
+
...(!config.redirectionMap ? [] : [{ provide: REDIRECT_MAP, useValue: config.redirectionMap }]),
|
|
201
|
+
{ provide: APP_INITIALIZER, useFactory: mergedAppInitializer, deps: [HTTPService, TokenService, AccessControlService, BaseLocalization], multi: true },
|
|
202
|
+
{ provide: ROUTES, useValue: baseAppRoutes, multi: true },
|
|
203
|
+
{ provide: LOC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Localizations) == DebugFlags.Localizations : false },
|
|
204
|
+
{ provide: EXT_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Extensions) == DebugFlags.Extensions : false },
|
|
205
|
+
{ provide: ACC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.AccessControl) == DebugFlags.AccessControl : false },
|
|
206
|
+
{ provide: HTTP_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Http) == DebugFlags.Http : false },
|
|
207
|
+
{ provide: HTTP_INVALIDATION, useValue: config?.httpInvalidationCache },
|
|
208
|
+
{ provide: TAB_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Tabber) == DebugFlags.Tabber : false },
|
|
209
|
+
{ provide: SGR_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.SignalR) == DebugFlags.SignalR : false },
|
|
210
|
+
{ provide: PREF_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Preferences) == DebugFlags.Preferences : false },
|
|
211
|
+
{ provide: ESC_DEBUG_MODE, useValue: config.debugMode ? (config.debugMode & DebugFlags.Charts) == DebugFlags.Charts : false },
|
|
212
|
+
{ provide: LOGIN_URL_LEGACY, useValue: config.legacyLogin !== null && config.legacyLogin !== undefined ? config.legacyLogin : false },
|
|
213
|
+
{ provide: NAVBAR_EXTENSIONS, useValue: config.navbarExtensions ? config.navbarExtensions : [] },
|
|
214
|
+
{ provide: ANONYMOUS_MODE, useValue: config.anonymousMode ? config.anonymousMode : false },
|
|
215
|
+
{ provide: BaseAdapter, useClass: config?.chartsAdapter || BaseAdapter },
|
|
216
|
+
{ provide: BaseMessageService, useClass: config?.messageService || BaseMessageService },
|
|
217
|
+
{ provide: GlobalSearchService, useClass: config?.globalSearchService || GlobalSearchService },
|
|
218
|
+
{ provide: CompletedJobRedirectionService, useClass: config?.completedJobRedirectionService || CompletedJobRedirectionService },
|
|
219
|
+
{ provide: MenuFilteringService, useClass: config?.menuFilteringService || MenuFilteringService },
|
|
220
|
+
{ provide: UserPreferencesService, useClass: config?.userPreferencesProvider || UserPreferencesService },
|
|
221
|
+
{ provide: MENU_LOCALIZATION, useValue: config.menuLoc || null },
|
|
222
|
+
{ provide: MENU, useValue: config.menu },
|
|
223
|
+
{ provide: USE_FAKE_ACCESS_TOKEN, useValue: !!config.fakeAccessToken },
|
|
224
|
+
{ provide: PreferencesPersistor, useClass: config.fakeAccessToken ? LocalStoragePreferencesPersistor : ApplicationPreferencesPersistor },
|
|
225
|
+
{ provide: CachePersistor, useClass: config.fakeAccessToken ? LocalStorageCachePersistor : ApplicationCachePersistor }
|
|
226
|
+
]
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EsFaenzaCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
230
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: EsFaenzaCoreModule, declarations: [AppComponent], imports: [BrowserAnimationsModule,
|
|
231
|
+
HttpClientModule,
|
|
232
|
+
TemplateCommon,
|
|
233
|
+
ComponentsModule, i1.ServiceWorkerModule, i2.RouterModule, i3.EsTableModule, i4.FormsAndValidationsModule, i5.ExtensionsModule, i6.LocalizationModule, i7.AccessControlModule, i8.HttpserviceModule, i9.SignalrNotificationsModule, i10.PreferencesModule, i11.EsChartsModule, i12.TooltipModule, i13.ModalModule, i14.ProgressbarModule, i15.BsDropdownModule, i16.ToastrModule, i17.TimepickerModule, i18.ContextMenuModule, i19.DragulaModule] }); }
|
|
234
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EsFaenzaCoreModule, imports: [MODULES] }); }
|
|
235
|
+
}
|
|
236
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EsFaenzaCoreModule, decorators: [{
|
|
237
|
+
type: NgModule,
|
|
238
|
+
args: [{
|
|
239
|
+
declarations: [AppComponent],
|
|
240
|
+
imports: [...MODULES]
|
|
241
|
+
}]
|
|
242
|
+
}] });
|
|
243
|
+
export class EsFaenzaCoreModuleConfig {
|
|
244
|
+
}
|
|
245
|
+
export var DebugFlags;
|
|
246
|
+
(function (DebugFlags) {
|
|
247
|
+
DebugFlags[DebugFlags["None"] = 0] = "None";
|
|
248
|
+
DebugFlags[DebugFlags["Localizations"] = 1] = "Localizations";
|
|
249
|
+
DebugFlags[DebugFlags["Extensions"] = 2] = "Extensions";
|
|
250
|
+
DebugFlags[DebugFlags["AccessControl"] = 4] = "AccessControl";
|
|
251
|
+
DebugFlags[DebugFlags["Http"] = 8] = "Http";
|
|
252
|
+
DebugFlags[DebugFlags["SignalR"] = 16] = "SignalR";
|
|
253
|
+
DebugFlags[DebugFlags["Preferences"] = 32] = "Preferences";
|
|
254
|
+
DebugFlags[DebugFlags["Charts"] = 64] = "Charts";
|
|
255
|
+
DebugFlags[DebugFlags["Tabber"] = 128] = "Tabber";
|
|
256
|
+
DebugFlags[DebugFlags["All"] = 255] = "All";
|
|
257
|
+
})(DebugFlags || (DebugFlags = {}));
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQTZCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMvRSxPQUFPLEVBQVUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxtQ0FBbUMsQ0FBQztBQUUzQyxVQUFVO0FBQ1YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDdkcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDMUMsT0FBTyxzQkFBc0IsQ0FBQztBQUU5QixLQUFLO0FBQ0wsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxnQ0FBZ0MsRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvSyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLGdC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VUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMzSSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMxSCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFO2dCQUN2RSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUM3SCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMvSCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUN4SSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFD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QUFVLFFBV3JCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBOZ01vZHVsZSwgRXJyb3JIYW5kbGVyLCBMT0NBTEVfSUQsIEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgVHlwZSwgaXNEZXZNb2RlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBSb3V0ZXMsIFJvdXRlck1vZHVsZSwgTm9QcmVsb2FkaW5nLCBST1VURVMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IE1BVF9EQVRFX0ZPUk1BVFMsIE1BVF9EQVRFX0xPQ0FMRSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlXCI7XHJcbmltcG9ydCB7IEVWRU5UX01BTkFHRVJfUExVR0lOUyB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IFNlcnZpY2VXb3JrZXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvc2VydmljZS13b3JrZXJcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgXCJAYW5ndWxhci9jb21tb24vbG9jYWxlcy9nbG9iYWwvaXRcIjtcclxuXHJcbi8vIFBsdWdpbnNcclxuaW1wb3J0IHsgTmd4TWF0RGF0ZUFkYXB0ZXIsIE5HWF9NQVRfREFURV9GT1JNQVRTIH0gZnJvbSBcIkBhbmd1bGFyLW1hdGVyaWFsLWNvbXBvbmVudHMvZGF0ZXRpbWUtcGlja2VyXCI7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tIFwibmd4LWNvb2tpZS1zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRvYXN0ck1vZHVsZSB9IGZyb20gXCJuZ3gtdG9hc3RyXCI7XHJcbmltcG9ydCBcIndpZGdzdGVyL3dpZGdzdGVyLmpzXCI7XHJcblxyXG4vLyBFU1xyXG5pbXBvcnQgeyBQcmVmZXJlbmNlc01vZHVsZSwgUFJFRl9ERUJVR19NT0RFLCBQcmVmZXJlbmNlc1BlcnNpc3RvciwgTG9jYWxTdG9yYWdlUHJlZmVyZW5jZXNQZXJzaXN0b3IsIENhY2hlUGVyc2lzdG9yLCBMb2NhbFN0b3JhZ2VDYWNoZVBlcnNpc3RvciB9IGZyb20gXCJAZXNmYWVuemEvcHJlZmVyZW5jZXNcIjtcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uTW9kdWxlLCBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMb2NhbGl6YXRpb25NaXNzaW5nUG9saWN5LCBMT0NfREVCVUdfTU9ERSwgQmFzZUxvY2FsaXphdGlvbiB9IGZyb20gXCJAZXNmYWVuemEvbG9jYWxpemF0aW9uc1wiO1xyXG5pbXBvcnQgeyBIdHRwc2VydmljZU1vZHVsZSwgSHR0cFNlcnZpY2VFeHRlbnNpb25zLCBIVFRQU2VydmljZSwgSFRUUF9ERUJVR19NT0RFLCBIVFRQX0lOVkFMSURBVElPTiB9IGZyb20gXCJAZXNmYWVuemEvaHR0cHNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2lnbmFsck5vdGlmaWNhdGlvbnNNb2R1bGUsIFNHUl9ERUJVR19NT0RFLCBCYXNlTWVzc2FnZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL3NpZ25hbHItbm90aWZpY2F0aW9uc1wiO1xyXG5pbXBvcnQgeyBGb3Jtc0FuZFZhbGlkYXRpb25zTW9kdWxlLCBOZ3hFeHBhbmRlZERheUpzRGF0ZUFkYXB0ZXIgfSBmcm9tIFwiQGVzZmFlbnphL2Zvcm1zLWFuZC12YWxpZGF0aW9uc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NDb250cm9sTW9kdWxlLCBBY2Nlc3NDb250cm9sU2VydmljZSwgQUNDX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2FjY2Vzcy1jb250cm9sXCI7XHJcbmltcG9ydCB7IEJhc2VBZGFwdGVyLCBFc0NoYXJ0c01vZHVsZSwgRVNDX0RFQlVHX01PREUgfSBmcm9tIFwiQGVzZmFlbnphL2VzLWNoYXJ0c1wiO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25zTW9kdWxlLCBFWFRfREVCVUdfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvZXh0ZW5zaW9uc1wiO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudU1vZHVsZSB9IGZyb20gXCJAZXNmYWVuemEvbmd4LWNvbnRleHRtZW51XCI7XHJcbmltcG9ydCB7IERyYWd1bGFNb2R1bGUgfSBmcm9tICdAZXNmYWVuemEvbmd4LWRyYWd1bGEnO1xyXG5pbXBvcnQgeyBFc1RhYmxlTW9kdWxlIH0gZnJvbSBcIkBlc2ZhZW56YS9lcy10YWJsZVwiO1xyXG5pbXBvcnQgeyBUQUJfREVCVUdfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvdGFiYmVyXCI7XHJcblxyXG4vLyBDb3JlXHJcbmltcG9ydCB7IEFQUEVycm9ySGFuZGxlciwgSFRUUFNlcnZpY2VFeHRlbnNpb25zLCBBcHBsaWNhdGlvblByZWZlcmVuY2VzUGVyc2lzdG9yLCBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yLCBTZXNzaW9uUmV0cmlldmVyLCBPdXRab25lRXZlbnRQbHVnaW4sIFRva2VuU2VydmljZSwgR2xvYmFsU2VhcmNoU2VydmljZSwgQ29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlLCBNZW51RmlsdGVyaW5nU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9zZXJ2aWNlc1wiO1xyXG5pbXBvcnQgeyBQYWdlTm90Rm91bmRDb21wb25lbnQsIFNlcnZlckVycm9yQ29tcG9uZW50LCBBbmd1bGFyRXJyb3JDb21wb25lbnQsIEV4dGVybmFsUGFnZXNDb21wb25lbnQsIEphY2VMb2dpbkNvbXBvbmVudCwgUGFnZXNDb21wb25lbnQsIFJlZGlyZWN0ZXJDb21wb25lbnQsIENvbXBvbmVudHNNb2R1bGUsIFVzZXJJbmZvc0NvbXBvbmVudCB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9jb21wb25lbnRzXCI7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uTWVudSwgRW52T3B0aW9ucywgQWNjb3VudFNjb3BlLCBNRU5VLCBNRU5VX0xPQ0FMSVpBVElPTiwgUkVESVJFQ1RfTUFQLCBVU0VfRkFLRV9BQ0NFU1NfVE9LRU4sIE5BVkJBUl9FWFRFTlNJT05TLCBMT0dJTl9VUkxfTEVHQUNZLCBBTk9OWU1PVVNfTU9ERSB9IGZyb20gXCJAZXNmYWVuemEvY29yZS9kb21haW5cIlxyXG5pbXBvcnQgeyBST1VURSwgRU1CRURERURfUk9VVEUgfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvZG9tYWluXCJcclxuaW1wb3J0IHsgVGVtcGxhdGVDb21tb24gfSBmcm9tIFwiQGVzZmFlbnphL2NvcmUvbW9kdWxlc1wiO1xyXG5cclxuLy8gUnhKc1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuLy8gQm9vdHN0cmFwXHJcbmltcG9ydCB7IFByb2dyZXNzYmFyTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvcHJvZ3Jlc3NiYXJcIjtcclxuaW1wb3J0IHsgVGltZXBpY2tlck1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL3RpbWVwaWNrZXJcIjtcclxuaW1wb3J0IHsgQnNEcm9wZG93bk1vZHVsZSB9IGZyb20gXCJuZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duXCI7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwibmd4LWJvb3RzdHJhcC90b29sdGlwXCI7XHJcbmltcG9ydCB7IE1vZGFsTW9kdWxlIH0gZnJvbSBcIm5neC1ib290c3RyYXAvbW9kYWxcIjtcclxuXHJcbi8vIEFwcGxpY2F6aW9uZVxyXG5pbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tIFwiLi9hcHAuY29tcG9uZW50XCI7XHJcblxyXG4vLyBSZXBvc2l0b3JpZXNcclxuY29uc3QgR0VUX0phY2VfR2V0QWNjb3VudFNjb3BlOiBzdHJpbmcgPSBcIi9hcGkvSmFjZS9HZXRBY2NvdW50U2NvcGVcIjtcclxuY29uc3QgR0VUX0FwcENvbmZpZ19HZXRBcHBDb25maWc6IHN0cmluZyA9IFwiL2FwaS9BcHBDb25maWcvR2V0QXBwQ29uZmlnXCI7XHJcblxyXG5kZWNsYXJlIHZhciBteWNvbmZpZzogRW52T3B0aW9ucztcclxuXHJcbmNvbnN0IGJhc2VBcHBSb3V0ZXM6IFJvdXRlcyA9IFtcclxuICAgIHsgcGF0aDogXCJcIiwgcmVkaXJlY3RUbzogXCJwYWdlcy97ZW1wdHlSb3V0ZVJlZGlyZWN0fVwiLCBwYXRoTWF0Y2g6IFwiZnVsbFwiIH0sXHJcbiAgICB7IHBhdGg6IEVNQkVEREVEX1JPVVRFLCBjb21wb25lbnQ6IEV4dGVybmFsUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogUk9VVEUsIGNvbXBvbmVudDogUGFnZXNDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZFwiLCBjb21wb25lbnQ6IFJlZGlyZWN0ZXJDb21wb25lbnQgfSxcclxuICAgIHsgcGF0aDogXCJyZC86dGVuYW50XCIsIGNvbXBvbmVudDogUmVkaXJlY3RlckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImxvZ2luXCIsIGNvbXBvbmVudDogSmFjZUxvZ2luQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiaXNlcnJcIiwgY29tcG9uZW50OiBTZXJ2ZXJFcnJvckNvbXBvbmVudCB9LFxyXG4gICAgeyBwYXRoOiBcImFuZXJyXCIsIGNvbXBvbmVudDogQW5ndWxhckVycm9yQ29tcG9uZW50IH0sXHJcbiAgICB7IHBhdGg6IFwiKipcIiwgY29tcG9uZW50OiBQYWdlTm90Rm91bmRDb21wb25lbnQgfSxcclxuXHJcbl07XHJcblxyXG5jb25zdCBNT0RVTEVTID0gW1xyXG4gICAgQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUsXHJcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxyXG4gICAgVGVtcGxhdGVDb21tb24sXHJcbiAgICBDb21wb25lbnRzTW9kdWxlLFxyXG5cclxuICAgIC8vIEF0dGVuemlvbmUgYSBsYXNjaWFybG8gYXR0aXZvIGluIG5nIHNlcnZlOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy80NzQ1NVxyXG4gICAgU2VydmljZVdvcmtlck1vZHVsZS5yZWdpc3Rlcignbmdzdy13b3JrZXIuanMnLCB7IGVuYWJsZWQ6ICFpc0Rldk1vZGUoKSB9KSxcclxuICAgIFJvdXRlck1vZHVsZS5mb3JSb290KFtdLCB7IHVzZUhhc2g6IHRydWUsIHByZWxvYWRpbmdTdHJhdGVneTogTm9QcmVsb2FkaW5nLCBvblNhbWVVcmxOYXZpZ2F0aW9uOiBcInJlbG9hZFwiIH0pLFxyXG5cclxuICAgIC8vIEVTXHJcbiAgICBFc1RhYmxlTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEZvcm1zQW5kVmFsaWRhdGlvbnNNb2R1bGUuZm9yUm9vdCh7IGFjb2N1c3RvbTogXCJPXCIsIHNsaWRlck1vZGU6IHRydWUgfSksXHJcbiAgICBFeHRlbnNpb25zTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIExvY2FsaXphdGlvbk1vZHVsZS5mb3JSb290KHsgbG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeTogTG9jYWxpemF0aW9uTWlzc2luZ1BvbGljeS5QcmludFNvdXJjZSwgZGVmYXVsdExvY2FsZTogJ2l0LUlUJyB9KSxcclxuICAgIEFjY2Vzc0NvbnRyb2xNb2R1bGUuZm9yUm9vdCh7IGNvbnRleHRBd2FyZUtleTogXCJPXCIsIGRlZmF1bHRDb25kaXRpb246ICcoUjpKYWNlIEFkbWluIHx8IFI6SmFjZSBTdXBwb3J0KScgfSksXHJcbiAgICBIdHRwc2VydmljZU1vZHVsZS5mb3JSb290KCksXHJcbiAgICBTaWduYWxyTm90aWZpY2F0aW9uc01vZHVsZS5mb3JSb290KHsgZW5kcG9pbnRVcmw6ICdub3RpZnknLCB1c2VNZXNzYWdlUGFjazogdHJ1ZSB9KSxcclxuICAgIFByZWZlcmVuY2VzTW9kdWxlLmZvclJvb3QoeyByZXRyaWV2ZUFsbEF0U3RhcnQ6IHRydWUsIHNlc3Npb25SZXRyaWV2ZXI6IFNlc3Npb25SZXRyaWV2ZXIsIHByZWZlcmVuY2VQZXJzaXN0b3I6IEFwcGxpY2F0aW9uUHJlZmVyZW5jZXNQZXJzaXN0b3IsIGNhY2hlUGVyc2lzdG9yOiBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yIH0pLFxyXG4gICAgRXNDaGFydHNNb2R1bGUuZm9yUm9vdCgpLFxyXG5cclxuICAgIC8vIEJvb3RzdHJhcFxyXG4gICAgVG9vbHRpcE1vZHVsZS5mb3JSb290KCksXHJcbiAgICBNb2RhbE1vZHVsZS5mb3JSb290KCksXHJcbiAgICBQcm9ncmVzc2Jhck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBCc0Ryb3Bkb3duTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIFRvYXN0ck1vZHVsZS5mb3JSb290KCksXHJcbiAgICBUaW1lcGlja2VyTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIENvbnRleHRNZW51TW9kdWxlLmZvclJvb3QoKSxcclxuICAgIERyYWd1bGFNb2R1bGUuZm9yUm9vdCgpXHJcbl07XHJcblxyXG4vLyBHZW5lcmF0b3JlIGRlaSBmb3JtYXRpIGRhdGFcclxudmFyIGZvcm1hdHMgPSAoc3R5bGU6ICdsb25nJyB8ICdzaG9ydCcpID0+IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcGFyc2U6IHsgZGF0ZUlucHV0OiAnREQvTU0vWVlZWScgKyAoc3R5bGUgPT09ICdsb25nJyA/ICcgSEg6bW06c3MnIDogJycpIH0sXHJcbiAgICAgICAgZGlzcGxheToge1xyXG4gICAgICAgICAgICBkYXRlSW5wdXQ6ICdERC9NTS9ZWVlZJyArIChzdHlsZSA9PT0gJ2xvbmcnID8gJyBISDptbTpzcycgOiAnJyksXHJcbiAgICAgICAgICAgIG1vbnRoWWVhckxhYmVsOiAnTU0gWVlZWScsXHJcbiAgICAgICAgICAgIGRhdGVBMTF5TGFiZWw6ICdERC9NTS9ZWVlZJyArIChzdHlsZSA9PT0gJ2xvbmcnID8gJyBISDptbTpzcycgOiAnJyksXHJcbiAgICAgICAgICAgIG1vbnRoWWVhckExMXlMYWJlbDogJ01NIFlZWVknLFxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmNvbnN0IGxvY2FsZUZhY3RvcnkgPSAobG9jOiBMb2NhbGl6YXRpb25TZXJ2aWNlKSA9PiBsb2MuU21hbGxMb2NhbGU7XHJcblxyXG5jb25zdCBQUk9WSURFUlMgPSBbXHJcbiAgICBDb29raWVTZXJ2aWNlLFxyXG5cclxuICAgIC8vIFByb3ZpZGVycyBhcHBsaWNhdGl2aVxyXG4gICAgeyBwcm92aWRlOiBFcnJvckhhbmRsZXIsIHVzZUNsYXNzOiBBUFBFcnJvckhhbmRsZXIgfSxcclxuICAgIHsgcHJvdmlkZTogRVZFTlRfTUFOQUdFUl9QTFVHSU5TLCB1c2VFeGlzdGluZzogT3V0Wm9uZUV2ZW50UGx1Z2luLCBtdWx0aTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBIdHRwU2VydmljZUV4dGVuc2lvbnMsIHVzZUNsYXNzOiBIVFRQU2VydmljZUV4dGVuc2lvbnMgfSxcclxuXHJcbiAgICAvLyBMb2NhbGUgZSBnZXN0aW9uaSBkZWxsZSBkYXRlXHJcbiAgICB7IHByb3ZpZGU6IExPQ0FMRV9JRCwgdXNlRmFjdG9yeTogbG9jYWxlRmFjdG9yeSwgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0xPQ0FMRSwgdXNlRmFjdG9yeTogbG9jYWxlRmFjdG9yeSwgZGVwczogW0xvY2FsaXphdGlvblNlcnZpY2VdIH0sXHJcbiAgICB7IHByb3ZpZGU6IE1BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBmb3JtYXRzKCdzaG9ydCcpIH0sXHJcblxyXG4gICAgLy8gUXVlc3RpIGR1ZSBzb25vIHByb3ZpZGF0aSBkYWwgRm9ybXNBbmRWYWxpZGF0aW9uTW9kdWxlIHN0ZXNzbywgcGVyw7IgcXVlc3QndWx0aW1vIMOoIGRlZmluaXRvIGluIGZvclJvb3Qgc29sbyBsYXRvIGNvbXBvbmVudGkgc2hhcmVkLCBcclxuICAgIC8vIHF1aW5kaSBwZXIgcmVuZGVyZSBxdWVzdGkgcHJvdmlkZXIgZGlzcG9uaWJpbGkgYW5jaGUgYSBtb2R1bGkgZXN0ZXJuaSBkZXZvIHJpcHJvdmlkYXJsaSBhbmNoZSBxdWlcclxuICAgIHsgcHJvdmlkZTogTkdYX01BVF9EQVRFX0ZPUk1BVFMsIHVzZVZhbHVlOiBmb3JtYXRzKCdsb25nJykgfSxcclxuICAgIHsgcHJvdmlkZTogTmd4TWF0RGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBOZ3hFeHBhbmRlZERheUpzRGF0ZUFkYXB0ZXIgfVxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbLi4uTU9EVUxFU11cclxufSlcclxuZXhwb3J0IGNsYXNzIEVzRmFlbnphQ29yZU1vZHVsZSB7XHJcbiAgICBzdGF0aWMgZm9yUm9vdChjb25maWc/OiBFc0ZhZW56YUNvcmVNb2R1bGVDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEVzRmFlbnphQ29yZU1vZHVsZT4ge1xyXG4gICAgICAgIGlmIChjb25maWcucm91dGVzKSB7XHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bnRhIGRlbGxhIHJvdXRlIGRpIGVtYmVkZGluZyBzZSBub24gZGljaGlhcmF0YSwgbGF0byBhZ2dpdW50YSBmYWNjaW8gaW4gbW9kbyBjaGUgbCdlbWJlZGRpbmcgc2lhIGRpc3BvbmliaWxlIHNvbG8gZGEgcm91dGUgaW50ZXJuZSAocGFnZXMgT0ssIHBhZ2VzX2V4dCBOT04gT0spXHJcbiAgICAgICAgICAgIGlmICghY29uZmlnLnJvdXRlcy5maW5kKHQgPT4gdC5wYXRoLnN0YXJ0c1dpdGgoXCJlbWJlZFwiKSkpXHJcbiAgICAgICAgICAgICAgICBjb25maWcucm91dGVzID0gWy4uLmNvbmZpZy5yb3V0ZXMsIHsgcGF0aDogXCJlbWJlZC86bW9kdWxlXCIsIGxvYWRDaGlsZHJlbjogKCkgPT4gaW1wb3J0KCdAZXNmYWVuemEvY29yZS9tb2R1bGVzJykudGhlbihtID0+IG0uRW1iZWRkaW5nTW9kdWxlKSB9XVxyXG5cclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlc1swXS5yZWRpcmVjdFRvID0gW1wicGFnZXNcIiwgXCJwYWdlc19leHRcIl0ubWFwKHQgPT4gKGNvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJycpLnN0YXJ0c1dpdGgodCkpLnNvbWUodCA9PiAhIXQpID8gXCIvXCIgKyBjb25maWcuZW1wdHlSb3V0ZVJlZGlyZWN0IDogIGBwYWdlcy8ke2NvbmZpZy5lbXB0eVJvdXRlUmVkaXJlY3QgfHwgJ2Rhc2hib2FyZCd9YDtcclxuICAgICAgICAgICAgYmFzZUFwcFJvdXRlcy5maWx0ZXIodCA9PiBbXCJwYWdlc1wiLCBcInBhZ2VzX2V4dFwiXS5pbmNsdWRlcyh0LnBhdGgpKS5mb3JFYWNoKHBhdGggPT4ge1xyXG4gICAgICAgICAgICAgICAgcGF0aC5jaGlsZHJlbiA9IFtcclxuICAgICAgICAgICAgICAgICAgICB7IHBhdGg6IFwicHJvZmlsZVwiLCBjb21wb25lbnQ6IFVzZXJJbmZvc0NvbXBvbmVudCwgZGF0YTogeyBJbnRlcm5hbE5hdmlnYXRpb246IHRydWUsIHRpdGxlOiBcInByb2ZpbG9cIiB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uY29uZmlnLnJvdXRlcy5maWx0ZXIociA9PiAhcGF0aC5wYXRoLmluY2x1ZGVzKFwicGFnZXNfZXh0XCIpIHx8ICFyLnBhdGguc3RhcnRzV2l0aChcImVtYmVkXCIpKVxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbmZpZy5kZWJ1Z01vZGUgPSAoIWlzRGV2TW9kZSgpICYmICFjb25maWcuZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzKSA/IERlYnVnRmxhZ3MuTm9uZSA6IChjb25maWcuZGVidWdNb2RlIHx8IERlYnVnRmxhZ3MuQWxsKTtcclxuXHJcbiAgICAgICAgbGV0IG1lcmdlZEFwcEluaXRpYWxpemVyID0gKGh0dHA6IEhUVFBTZXJ2aWNlLCBidHM6IFRva2VuU2VydmljZSwgYWFjOiBBY2Nlc3NDb250cm9sU2VydmljZSwgbG9jOiBCYXNlTG9jYWxpemF0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmFub255bW91c01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gTG9hZGluZyBBcHBDb25maWcuLi5cIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3dcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0dHAuZ2V0PEVudk9wdGlvbnM+KEdFVF9BcHBDb25maWdfR2V0QXBwQ29uZmlnLCBudWxsLCBudWxsLCBmYWxzZSkucGlwZShjYXRjaEVycm9yKF8gPT4gb2Yoe30pKSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFwKChhcHBDb25maWc6IEVudk9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gYXBwQ29uZmlnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBhcHBDb25maWcgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFhYy5pbml0aWFsaXplSWRlbnRpdHkobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZy5pbml0aWFsaXplckZ1bmN0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIGN1c3RvbSBhcHBsaWNhdGlvbiBpbml0aWFsaXphdGlvblwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbihodHRwLCBidHMsIGFhYykoKS5waXBlKHRhcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJWNbQVBQX0lOSVRJQUxJWkVSXSBMb2FkaW5nIEFwcENvbmZpZyBhbmQgQWNjb3VudCBTY29wZS4uLlwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCByZWFsT2JzZXJ2YWJsZSA9IGZvcmtKb2luKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ29uZmlnOiBodHRwLmdldDxFbnZPcHRpb25zPihHRVRfQXBwQ29uZmlnX0dldEFwcENvbmZpZywgbnVsbCwgbnVsbCwgZmFsc2UpLnBpcGUoY2F0Y2hFcnJvcihfID0+IG9mKHt9KSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZTogaHR0cC5nZXQ8QWNjb3VudFNjb3BlPihHRVRfSmFjZV9HZXRBY2NvdW50U2NvcGUsIG51bGwsIG51bGwsIGZhbHNlKS5waXBlKGNhdGNoRXJyb3IoXyA9PiBvZihudWxsKSkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IGxvYy5Mb2NhbGUucGlwZSh0YWtlKDEpLCBjYXRjaEVycm9yKF8gPT4gb2YoJ2l0LUlUJykpKSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlZE9ic2VydmFibGUgPSBjb25maWcub3B0aW9uc0FuZFNjb3BlUHJvdmlkZXIgfHwgcmVhbE9ic2VydmFibGU7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZWRPYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgdGFwKChyZXM6IHsgYXBwQ29uZmlnOiBFbnZPcHRpb25zLCBzY29wZTogQWNjb3VudFNjb3BlLCBsb2NhbGU6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG15Y29uZmlnID0gcmVzLmFwcENvbmZpZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHR0cC5zZXRBcHBDb25maWcobXljb25maWcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMJ2FjY291bnQgc2NvcGUgbG8gcHJlbmRvIGRhbGxhIFF1ZXJ5IGEgYmFja2VuZCBzb2xvIHNlIG5vbiB1c28gaWwgRmFrZSB0b2tlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ0cy5VU0VfRkFLRV9BQ0NFU1NfVE9LRU4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidHMuYWNjb3VudFNjb3BlID0gcmVzLnNjb3BlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIGFwcENvbmZpZyBhbmQgc2NvcGUgcmVnaXN0ZXJlZFwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZGVudHRpdHkgPSBidHMuZ2V0SmFjZUlkZW50aXR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidHMuYWNjb3VudFNjb3BlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWFjLmluaXRpYWxpemVJZGVudGl0eShpZGVudHRpdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWcuaW5pdGlhbGl6ZXJGdW5jdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIlY1tBUFBfSU5JVElBTElaRVJdIExvYWRpbmcgY3VzdG9tIGFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uXCIsIFwiYmFja2dyb3VuZC1jb2xvcjogeWVsbG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmluaXRpYWxpemVyRnVuY3Rpb24oaHR0cCwgYnRzLCBhYWMpKCkucGlwZSh0YXAoXyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIiVjW0FQUF9JTklUSUFMSVpFUl0gSW5pdGlhbGl6YXRpb24gaXMgb3ZlclwiLCBcImJhY2tncm91bmQtY29sb3I6IHllbGxvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEVzRmFlbnphQ29yZU1vZHVsZSxcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKiogUHJvdmlkZXIgc3RhdGljaSAqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgICAgICAuLi5QUk9WSURFUlMsXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqIFByb3ZpZGVyIGN1c3RvbWl6emFiaWxpICoqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICAgICAgICAgICAgICAgLi4uKCFjb25maWcucmVkaXJlY3Rpb25NYXAgPyBbXSA6IFt7IHByb3ZpZGU6IFJFRElSRUNUX01BUCwgdXNlVmFsdWU6IGNvbmZpZy5yZWRpcmVjdGlvbk1hcCB9XSksXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUiwgdXNlRmFjdG9yeTogbWVyZ2VkQXBwSW5pdGlhbGl6ZXIsIGRlcHM6IFtIVFRQU2VydmljZSwgVG9rZW5TZXJ2aWNlLCBBY2Nlc3NDb250cm9sU2VydmljZSwgQmFzZUxvY2FsaXphdGlvbl0sIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFJPVVRFUywgdXNlVmFsdWU6IGJhc2VBcHBSb3V0ZXMsIG11bHRpOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IExPQ19ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5Mb2NhbGl6YXRpb25zKSA9PSBEZWJ1Z0ZsYWdzLkxvY2FsaXphdGlvbnMgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBFWFRfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuRXh0ZW5zaW9ucykgPT0gRGVidWdGbGFncy5FeHRlbnNpb25zIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQUNDX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkFjY2Vzc0NvbnRyb2wpID09IERlYnVnRmxhZ3MuQWNjZXNzQ29udHJvbCA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEhUVFBfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuSHR0cCkgPT0gRGVidWdGbGFncy5IdHRwIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogSFRUUF9JTlZBTElEQVRJT04sIHVzZVZhbHVlOiBjb25maWc/Lmh0dHBJbnZhbGlkYXRpb25DYWNoZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBUQUJfREVCVUdfTU9ERSwgdXNlVmFsdWU6IGNvbmZpZy5kZWJ1Z01vZGUgPyAoY29uZmlnLmRlYnVnTW9kZSAmIERlYnVnRmxhZ3MuVGFiYmVyKSA9PSBEZWJ1Z0ZsYWdzLlRhYmJlciA6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFNHUl9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnLmRlYnVnTW9kZSA/IChjb25maWcuZGVidWdNb2RlICYgRGVidWdGbGFncy5TaWduYWxSKSA9PSBEZWJ1Z0ZsYWdzLlNpZ25hbFIgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBQUkVGX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLlByZWZlcmVuY2VzKSA9PSBEZWJ1Z0ZsYWdzLlByZWZlcmVuY2VzIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogRVNDX0RFQlVHX01PREUsIHVzZVZhbHVlOiBjb25maWcuZGVidWdNb2RlID8gKGNvbmZpZy5kZWJ1Z01vZGUgJiBEZWJ1Z0ZsYWdzLkNoYXJ0cykgPT0gRGVidWdGbGFncy5DaGFydHMgOiBmYWxzZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMT0dJTl9VUkxfTEVHQUNZLCB1c2VWYWx1ZTogY29uZmlnLmxlZ2FjeUxvZ2luICE9PSBudWxsICYmIGNvbmZpZy5sZWdhY3lMb2dpbiAhPT0gdW5kZWZpbmVkID8gY29uZmlnLmxlZ2FjeUxvZ2luIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkFWQkFSX0VYVEVOU0lPTlMsIHVzZVZhbHVlOiBjb25maWcubmF2YmFyRXh0ZW5zaW9ucyA/IGNvbmZpZy5uYXZiYXJFeHRlbnNpb25zIDogW10gfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQU5PTllNT1VTX01PREUsIHVzZVZhbHVlOiBjb25maWcuYW5vbnltb3VzTW9kZSA/IGNvbmZpZy5hbm9ueW1vdXNNb2RlIDogZmFsc2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQmFzZUFkYXB0ZXIsIHVzZUNsYXNzOiBjb25maWc/LmNoYXJ0c0FkYXB0ZXIgfHwgQmFzZUFkYXB0ZXIgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQmFzZU1lc3NhZ2VTZXJ2aWNlLCB1c2VDbGFzczogY29uZmlnPy5tZXNzYWdlU2VydmljZSB8fCBCYXNlTWVzc2FnZVNlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogR2xvYmFsU2VhcmNoU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8uZ2xvYmFsU2VhcmNoU2VydmljZSB8fCBHbG9iYWxTZWFyY2hTZXJ2aWNlIH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8uY29tcGxldGVkSm9iUmVkaXJlY3Rpb25TZXJ2aWNlIHx8IENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBNZW51RmlsdGVyaW5nU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8ubWVudUZpbHRlcmluZ1NlcnZpY2UgfHwgTWVudUZpbHRlcmluZ1NlcnZpY2UgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogVXNlclByZWZlcmVuY2VzU2VydmljZSwgdXNlQ2xhc3M6IGNvbmZpZz8udXNlclByZWZlcmVuY2VzUHJvdmlkZXIgfHwgVXNlclByZWZlcmVuY2VzU2VydmljZSB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBNRU5VX0xPQ0FMSVpBVElPTiwgdXNlVmFsdWU6IGNvbmZpZy5tZW51TG9jIHx8IG51bGwgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTUVOVSwgdXNlVmFsdWU6IGNvbmZpZy5tZW51IH0sXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFVTRV9GQUtFX0FDQ0VTU19UT0tFTiwgdXNlVmFsdWU6ICEhY29uZmlnLmZha2VBY2Nlc3NUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBQcmVmZXJlbmNlc1BlcnNpc3RvciwgdXNlQ2xhc3M6IGNvbmZpZy5mYWtlQWNjZXNzVG9rZW4gPyBMb2NhbFN0b3JhZ2VQcmVmZXJlbmNlc1BlcnNpc3RvciA6IEFwcGxpY2F0aW9uUHJlZmVyZW5jZXNQZXJzaXN0b3IgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogQ2FjaGVQZXJzaXN0b3IsIHVzZUNsYXNzOiBjb25maWcuZmFrZUFjY2Vzc1Rva2VuID8gTG9jYWxTdG9yYWdlQ2FjaGVQZXJzaXN0b3IgOiBBcHBsaWNhdGlvbkNhY2hlUGVyc2lzdG9yIH1cclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFc0ZhZW56YUNvcmVNb2R1bGVDb25maWcge1xyXG4gICAgLyogUm91dGUgYXBwbGljYXRpdmUsIHNvbG8gcXVlbGxlIGRlbnRybyBhICoqcGFnZXMqKiAqL1xyXG4gICAgcm91dGVzITogUm91dGVzO1xyXG4gICAgLyogTWVuw7kgZGVsbGEgc2lkZWJhciBkZWxsJ2FwcGxpY2F6aW9uZSAqL1xyXG4gICAgbWVudTogQXBwbGljYXRpb25NZW51W107XHJcbiAgICAvKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBsJ2FjY2VzcyB0b2tlbiBmaW50byAqL1xyXG4gICAgZmFrZUFjY2Vzc1Rva2VuPzogYm9vbGVhbjtcclxuICAgIC8qIFRpcG8gZGEgdXNhcmUgcGVyIGdlbmVyYXJlIGxlIGxvY2FsaXp6YWl6b25pIGRlbCBtZW7DuSAqL1xyXG4gICAgbWVudUxvYz86IFR5cGU8TG9jYWxpemF0aW9uU2VydmljZT47XHJcbiAgICAvKiBSZWRpcmVjdCBwZXIgbGEgcm9vdCBkZWxsJ2FwcGxpY2F6aW9uZSwgZGkgZGVmYXVsdCDDqCBpbXBvc3RhdG8gYSAqKmRhc2hib2FyZCoqLiBTZSBhbGwnaW50ZXJubyBkZWxsZSAqKnJvdXRlcyoqIG5vbiBlc2lzdGUgbGEgcm91dGUgKipkYXNoYm9hcmQqKiDDqCBkYSBpbXBvc3RhcmUgYWRlZ3VhdGFtZW50ZSAqL1xyXG4gICAgZW1wdHlSb3V0ZVJlZGlyZWN0Pzogc3RyaW5nO1xyXG4gICAgLyogU2Ugbm9uIHNwZWNpZmljYXRhIHZpZW5lIGltcG9zdGF0YSBhdXRvbWF0aWNhbWVudGUgYWQgXCJBbGxcIiBpbiBmYXNlIGRpIGRlYnVnLCBcIk5vbmVcIiBpbiBwcm9kdXppb25lIChxdWVzdCd1bHRpbW8gYSBwcmVzY2luZGVyZSwgYSBtZW5vIGNoZSAqKmZvcmNlRGVidWdNb2RlRm9yUHJvZEJ1aWxkcyoqIG5vbiBzaWEgdHJ1ZSkqL1xyXG4gICAgZGVidWdNb2RlPzogRGVidWdGbGFncztcclxuICAgIC8qIFBlcm1ldHRlIGRpIGZvcnphcmUgbGEgbW9kYWxpdMOgIGRpIGRlYnVnIHNwZWNpZmljYXRhIGFuY2hlIHBlciBsZSBidWlsZCBkaSBwcm9kdXppb25lLCAqKk5PTiBJTVBPU1RBUkUgQSBUUlVFKiogYSBtZW5vIGRpIHJhcmlzc2ltaXNzaW1pc3NpbWkgY2FzaSAqL1xyXG4gICAgZm9yY2VEZWJ1Z01vZGVGb3JQcm9kQnVpbGRzPzogYm9vbGVhbjtcclxuICAgIC8qIENhY2hlIGRpIGludmFsaWRhemlvbmUgcGVyIGxlIGNoaWFtYXRlIGh0dHAgKi9cclxuICAgIGh0dHBJbnZhbGlkYXRpb25DYWNoZT86IGFueTtcclxuICAgIC8qIEZ1bnppb25lIGRpIGluaXppYWxpenphemlvbmUgQVBQX0lOSVRJQUxJWkVSLWxpa2UgY2hlIHZpZW5lIHJpY2hpYW1hdGEgZG9wbyBhbGxhIGZ1bnppb25lIGRpIGluaXppYWxpenphemlvbmUgZGkgZGVmYXVsdCAqL1xyXG4gICAgaW5pdGlhbGl6ZXJGdW5jdGlvbj86IChodHRwOiBIVFRQU2VydmljZSwgYnRzOiBUb2tlblNlcnZpY2UsIGFhYzogQWNjZXNzQ29udHJvbFNlcnZpY2UpID0+ICgpID0+IE9ic2VydmFibGU8YW55PjtcclxuICAgIC8qIE1hcHBhIGRpIHJlZGlyZWN0IHBlciBwZXJtZXR0ZXJlIGFsICoqUmVkaXJlY3RlckNvbXBvbmVudCoqIGRpIHNhcGVyZSBkb3ZlIG5hdmlnYXJlIGluIGJhc2UgYSBPZ2dldHRvLVBhcmFtZXRyaSAqL1xyXG4gICAgcmVkaXJlY3Rpb25NYXA/OiB7IFtpbmRleDogc3RyaW5nXTogeyB1cmw6IHN0cmluZywgcGFyYW1zOiBzdHJpbmdbXSB9IH07XHJcbiAgICAvKiBBZGF0dGF0b3JlIGRlaSBncmFmaWNpIG5lbCBjYXNvIHVuIHByb2dldHRvIGZvc3NlIHZlY2NoaW8gKFJpbXVvdmliaWxlIHF1YW5kbyB0dXR0aSBpIHByb2dldHRpIHVzYW5vIG5hdGl2YW1lbnRlIGVzLWNoYXJ0cykgKi9cclxuICAgIGNoYXJ0c0FkYXB0ZXI/OiBUeXBlPEJhc2VBZGFwdGVyPjtcclxuICAgIC8qIFNlcnZpemlvIGNoZSBlc3BvbmUgaSBtZXNzYWdnaSBkaXNwb25pYmlsaSBzdSBTaWduYWxyICovXHJcbiAgICBtZXNzYWdlU2VydmljZT86IFR5cGU8QmFzZU1lc3NhZ2VTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIHBlciBsYSBzZWFyY2ggZ2xvYmFsZSBkZWwgbW9kdWxvICovXHJcbiAgICBnbG9iYWxTZWFyY2hTZXJ2aWNlPzogVHlwZTxHbG9iYWxTZWFyY2hTZXJ2aWNlPjtcclxuICAgIC8qIFNlcnZpemlvIHBlciBmaWx0cmFyZSBsZSB2b2NpIGRpIG1lbsO5ICovXHJcbiAgICBtZW51RmlsdGVyaW5nU2VydmljZT86IFR5cGU8TWVudUZpbHRlcmluZ1NlcnZpY2U+O1xyXG4gICAgLyogU2Vydml6aW8gZGkgcmlkaXJlemlvbmUgcGVyIGpvYiBjb21wbGV0YXRpICovXHJcbiAgICBjb21wbGV0ZWRKb2JSZWRpcmVjdGlvblNlcnZpY2U/OiBUeXBlPENvbXBsZXRlZEpvYlJlZGlyZWN0aW9uU2VydmljZT47XHJcbiAgICAvKiBGdW56aW9uZSBkaSBvdmVycmlkZSBwZXIgcmVjdXBlcmFyZSBhY2NvdW50IHNjb3BlIGUgZW52b3B0aW9ucy4gUHXDsiBhbmNoZSBlc3NlcmUgdXRpbGl6emF0YSBwZXIgZm9ybmlyZSBtb2RlbGxpIGZpbnRpIGZpbm8gYWQgaW1wbGVtZW50YXppb25lICovXHJcbiAgICBvcHRpb25zQW5kU2NvcGVQcm92aWRlcj86IE9ic2VydmFibGU8eyBhcHBDb25maWc6IEVudk9wdGlvbnMsIHNjb3BlOiBBY2NvdW50U2NvcGUsIGxvY2FsZTogc3RyaW5nIH0+O1xyXG4gICAgLyogTGlzdGEgZGVpIGNvbXBvbmVudGkgY29uIGN1aSBlc3BhbmRlcmUgbGEgbmF2YmFyICovXHJcbiAgICBuYXZiYXJFeHRlbnNpb25zPzogVHlwZTxhbnk+W107XHJcbiAgICAvKiBTZXJ2aXppbyBkaSByZWN1cGVyby9tb2RpZmljYSBwcmVmZXJlbnplIHV0ZW50ZSAqL1xyXG4gICAgdXNlclByZWZlcmVuY2VzUHJvdmlkZXI/OiBUeXBlPFVzZXJQcmVmZXJlbmNlc1NlcnZpY2U+O1xyXG4gICAgLyogaWRlbnRpZmljYSBzZSB1dGlsaXp6YXJlIGxhIHZlcnNpb25lIHZlY2NoaWEgZGVsbCd1cmwgZGkgYXV0aCAoJHtteWNvbmZpZy5BVVRIX1VSTH0vbG9naW4vZm9ybT9jbGllbnQ9JHtteWNvbmZpZy5DTElFTlRfTkFNRX0pIGludmVjZSBjaGUgbGEgbnVvdmEgKCR7bXljb25maWcuQVVUSF9VUkx9L2xvZ2luO2NsaWVudD0ke215Y29uZmlnLkNMSUVOVF9OQU1FfSkgKi9cclxuICAgIGxlZ2FjeUxvZ2luPzogYm9vbGVhbjtcclxuICAgIC8qIEluZGljYSBzZSBpbCBzZXJ2aXppbyBkaSBhdXRlbnRpY2F6aW9uZSBkZXZlIGZ1bnppb25hcmUgaW4gYW5vbmltbyBsYXRvIEZyb250ZW5kLiBEZXYnZXNzZXJlIHV0aWxpenphdG8gaW5zaWVtZSBhbCB0YWcgXCJBdXRoXCIgaW4gY29kZSBiZWhpbmQgKi9cclxuICAgIGFub255bW91c01vZGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBEZWJ1Z0ZsYWdzIHtcclxuICAgIE5vbmUgPSAwLFxyXG4gICAgTG9jYWxpemF0aW9ucyA9IDEgPDwgMCxcclxuICAgIEV4dGVuc2lvbnMgPSAxIDw8IDEsXHJcbiAgICBBY2Nlc3NDb250cm9sID0gMSA8PCAyLFxyXG4gICAgSHR0cCA9IDEgPDwgMyxcclxuICAgIFNpZ25hbFIgPSAxIDw8IDQsXHJcbiAgICBQcmVmZXJlbmNlcyA9IDEgPDwgNSxcclxuICAgIENoYXJ0cyA9IDEgPDwgNixcclxuICAgIFRhYmJlciA9IDEgPDwgNyxcclxuICAgIEFsbCA9IH4ofjAgPDwgOClcclxufSJdfQ==
|