1 | import { __read, __decorate, __metadata, __assign } from 'tslib';
|
2 | import { createSelector, createFeatureSelector, Store, StoreModule } from '@ngrx/store';
|
3 | import { InjectionToken, Injectable, Inject, Component, Input, Output, EventEmitter, ViewChild, HostBinding, HostListener, NgModule, LOCALE_ID, defineInjectable, inject } from '@angular/core';
|
4 | import { BehaviorSubject } from 'rxjs/BehaviorSubject';
|
5 | import { getConfigs, NgsConfigModule } from '@soushians/config';
|
6 | import 'rxjs/Observable';
|
7 | import { trigger, state, style, transition, animate } from '@angular/animations';
|
8 | import { SigninService, DoSignoutAction } from '@soushians/authentication';
|
9 | import { map, combineLatest, withLatestFrom } from 'rxjs/operators';
|
10 | import { getAccountInfo, UserFacadeService } from '@soushians/user';
|
11 | import { Location, CommonModule } from '@angular/common';
|
12 | import { DOCUMENT, BrowserModule } from '@angular/platform-browser';
|
13 | import { fromEvent } from 'rxjs/observable/fromEvent';
|
14 | import { Router, NavigationEnd, RouterModule } from '@angular/router';
|
15 | import { BehaviorSubject as BehaviorSubject$1 } from 'rxjs';
|
16 | import { TranslateService, TranslateModule } from '@ngx-translate/core';
|
17 | import 'rxjs/add/operator/map';
|
18 | import 'rxjs/add/operator/mergeMap';
|
19 | import 'rxjs/add/operator/do';
|
20 | import 'rxjs/add/operator/catch';
|
21 | import 'rxjs/add/observable/empty';
|
22 | import { Actions, Effect, EffectsModule } from '@ngrx/effects';
|
23 | import { FormsModule } from '@angular/forms';
|
24 | import { HttpClientModule } from '@angular/common/http';
|
25 | import { FlexLayoutModule } from '@angular/flex-layout';
|
26 | import { MatIconModule, MatButtonModule, MatCardModule, MatSnackBarModule, MatSidenavModule, MatExpansionModule, MatSelectModule, MatFormFieldModule, MatListModule, MatMenuModule, MatRadioModule, MatInputModule, MatToolbarModule, MatDatepickerModule, MatProgressBarModule } from '@angular/material';
|
27 | import { RuleModule } from '@soushians/rule';
|
28 |
|
29 | /**
|
30 | * @fileoverview added by tsickle
|
31 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
32 | */
|
33 | /** @type {?} */
|
34 | var OPEN_SIDENAV = "[Layout] Open Sidenav";
|
35 | /** @type {?} */
|
36 | var CLOSE_SIDENAV = "[Layout] Close Sidenav";
|
37 | /** @enum {string} */
|
38 | var LayoutActionTypes = {
|
39 | UPDATE_LAYOUT_CONFIG: "[Layout] UPDATE_LAYOUT_CONFIG",
|
40 | DO_SIGNOUT: "[Layout] do signout",
|
41 | TITLE_CHANGED: "[LAYOUT] TITLE_CHANGED",
|
42 | CHANGE_LAYOUT: "[Layout] Change Layout",
|
43 | CHANGE_MAIN_SIDENAVE_MODE: "[Layout] Change main sidenav mode",
|
44 | OPEN_SECOND_SIDEBAR: "[Layout] Open Second Sidebar",
|
45 | CLOSE_SECOND_SIDEBAR: "[Layout] Close Second Sidebar",
|
46 | CHANGE_SECOND_SIDENAV_MODE: "[Layout] Change second sidenav mode",
|
47 | FULLSCREEN: "[Layout] FULLSCREEN",
|
48 | EXIT_FULLSCREEN: "[Layout] EXIT_FULLSCREEN",
|
49 | TOGGLE_FULLSCREEN: "[Layout] TOGGLE_FULLSCREEN",
|
50 | };
|
51 | var UpdateLayoutConfigAction = /** @class */ (function () {
|
52 | function UpdateLayoutConfigAction(payload) {
|
53 | this.payload = payload;
|
54 | this.type = LayoutActionTypes.UPDATE_LAYOUT_CONFIG;
|
55 | }
|
56 | return UpdateLayoutConfigAction;
|
57 | }());
|
58 | var OpenSidenavAction = /** @class */ (function () {
|
59 | function OpenSidenavAction() {
|
60 | this.type = OPEN_SIDENAV;
|
61 | }
|
62 | return OpenSidenavAction;
|
63 | }());
|
64 | var CloseSidenavAction = /** @class */ (function () {
|
65 | function CloseSidenavAction() {
|
66 | this.type = CLOSE_SIDENAV;
|
67 | }
|
68 | return CloseSidenavAction;
|
69 | }());
|
70 | var ChangeLayout = /** @class */ (function () {
|
71 | function ChangeLayout(name) {
|
72 | this.name = name;
|
73 | this.type = LayoutActionTypes.CHANGE_LAYOUT;
|
74 | }
|
75 | return ChangeLayout;
|
76 | }());
|
77 | var ChangeSideNavMode = /** @class */ (function () {
|
78 | function ChangeSideNavMode(mode) {
|
79 | this.mode = mode;
|
80 | this.type = LayoutActionTypes.CHANGE_MAIN_SIDENAVE_MODE;
|
81 | }
|
82 | return ChangeSideNavMode;
|
83 | }());
|
84 | var ChangeSecondSidenavMode = /** @class */ (function () {
|
85 | function ChangeSecondSidenavMode(mode) {
|
86 | this.mode = mode;
|
87 | this.type = LayoutActionTypes.CHANGE_SECOND_SIDENAV_MODE;
|
88 | }
|
89 | return ChangeSecondSidenavMode;
|
90 | }());
|
91 | var DoSignoutAction$1 = /** @class */ (function () {
|
92 | function DoSignoutAction$$1() {
|
93 | this.type = LayoutActionTypes.DO_SIGNOUT;
|
94 | }
|
95 | return DoSignoutAction$$1;
|
96 | }());
|
97 | var TitleChangedAction = /** @class */ (function () {
|
98 | function TitleChangedAction(title) {
|
99 | this.title = title;
|
100 | this.type = LayoutActionTypes.TITLE_CHANGED;
|
101 | }
|
102 | return TitleChangedAction;
|
103 | }());
|
104 | var OpenSecondSidenavAction = /** @class */ (function () {
|
105 | function OpenSecondSidenavAction() {
|
106 | this.type = LayoutActionTypes.OPEN_SECOND_SIDEBAR;
|
107 | }
|
108 | return OpenSecondSidenavAction;
|
109 | }());
|
110 | var CloseSecondSidenavAction = /** @class */ (function () {
|
111 | function CloseSecondSidenavAction() {
|
112 | this.type = LayoutActionTypes.CLOSE_SECOND_SIDEBAR;
|
113 | }
|
114 | return CloseSecondSidenavAction;
|
115 | }());
|
116 | var FullscreenAction = /** @class */ (function () {
|
117 | function FullscreenAction() {
|
118 | this.type = LayoutActionTypes.FULLSCREEN;
|
119 | }
|
120 | return FullscreenAction;
|
121 | }());
|
122 | var ExitFullscreenAction = /** @class */ (function () {
|
123 | function ExitFullscreenAction() {
|
124 | this.type = LayoutActionTypes.EXIT_FULLSCREEN;
|
125 | }
|
126 | return ExitFullscreenAction;
|
127 | }());
|
128 | var ToggleFullscreenAction = /** @class */ (function () {
|
129 | function ToggleFullscreenAction() {
|
130 | this.type = LayoutActionTypes.TOGGLE_FULLSCREEN;
|
131 | }
|
132 | return ToggleFullscreenAction;
|
133 | }());
|
134 |
|
135 | /**
|
136 | * @fileoverview added by tsickle
|
137 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
138 | */
|
139 | /** @type {?} */
|
140 | var initialState = {
|
141 | showMainSidenav: false,
|
142 | showSecondSideNav: false,
|
143 | secondSideNavMode: "over",
|
144 | mainSideNavMode: "over",
|
145 | showLeftNavBar: false,
|
146 | stickyLeftNavBar: false,
|
147 | layoutMode: "default",
|
148 | title: "",
|
149 | menuItems: [],
|
150 | signoutAction: /** @type {?} */ ({}),
|
151 | fullscreen: false
|
152 | };
|
153 | /**
|
154 | * @param {?=} state
|
155 | * @param {?=} action
|
156 | * @return {?}
|
157 | */
|
158 | function Reducer(state$$1, action) {
|
159 | if (state$$1 === void 0) { state$$1 = initialState; }
|
160 | switch (action.type) {
|
161 | case LayoutActionTypes.UPDATE_LAYOUT_CONFIG:
|
162 | /** @type {?} */
|
163 | var _state_1 = {};
|
164 | Object.keys(action.payload).forEach(function (k) {
|
165 | if (k in state$$1)
|
166 | _state_1[k] = action.payload[k];
|
167 | });
|
168 | return __assign({}, state$$1, _state_1);
|
169 | case CLOSE_SIDENAV:
|
170 | return __assign({}, state$$1, { showMainSidenav: false });
|
171 | case OPEN_SIDENAV:
|
172 | return __assign({}, state$$1, { showMainSidenav: true });
|
173 | case LayoutActionTypes.TITLE_CHANGED:
|
174 | return __assign({}, state$$1, { title: action.title });
|
175 | case LayoutActionTypes.CHANGE_LAYOUT:
|
176 | return __assign({}, state$$1, { layoutMode: action.name });
|
177 | case LayoutActionTypes.CHANGE_MAIN_SIDENAVE_MODE:
|
178 | return __assign({}, state$$1, { mainSideNavMode: action.mode });
|
179 | case LayoutActionTypes.CLOSE_SECOND_SIDEBAR:
|
180 | return __assign({}, state$$1, { showSecondSideNav: false });
|
181 | case LayoutActionTypes.OPEN_SECOND_SIDEBAR:
|
182 | return __assign({}, state$$1, { showSecondSideNav: true });
|
183 | case LayoutActionTypes.CHANGE_SECOND_SIDENAV_MODE:
|
184 | return __assign({}, state$$1, { secondSideNavMode: action.mode });
|
185 | case LayoutActionTypes.FULLSCREEN:
|
186 | return __assign({}, state$$1, { fullscreen: true });
|
187 | case LayoutActionTypes.EXIT_FULLSCREEN:
|
188 | return __assign({}, state$$1, { fullscreen: false });
|
189 | // case layout.LayoutActionTypes.TOGGLE_FULLSCREEN:
|
190 | // return {
|
191 | // ...state,
|
192 | // fullscreen: state.fullscreen === true ? false : true
|
193 | // };
|
194 | default:
|
195 | return state$$1;
|
196 | }
|
197 | }
|
198 | /** @type {?} */
|
199 | var getTitle = function (state$$1) { return state$$1.title; };
|
200 | /** @type {?} */
|
201 | var getShowMainSidenav = function (state$$1) { return state$$1.showMainSidenav; };
|
202 | /** @type {?} */
|
203 | var getMainSideNavMode = function (state$$1) { return state$$1.mainSideNavMode; };
|
204 | /** @type {?} */
|
205 | var getLayoutMode = function (state$$1) { return state$$1.layoutMode; };
|
206 | /** @type {?} */
|
207 | var getShowSecondSidebarStatus = function (state$$1) { return state$$1.showSecondSideNav; };
|
208 | /** @type {?} */
|
209 | var getSecondSidebarMode = function (state$$1) { return state$$1.secondSideNavMode; };
|
210 | /** @type {?} */
|
211 | var getFullscreenMode = function (state$$1) { return state$$1.fullscreen; };
|
212 |
|
213 | /**
|
214 | * @fileoverview added by tsickle
|
215 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
216 | */
|
217 | /** @enum {string} */
|
218 | var ToolbarActionTypes = {
|
219 | COMPORTABLE: "[Layout][TOOLBAR] COMPORTABLE",
|
220 | COMPACT: "[Layout][TOOLBAR] COMPACT",
|
221 | SUMMARY: "[Layout][TOOLBAR] SUMMARY",
|
222 | ENABLE_COMFORTABLE_MODE: "[Layout][TOOLBAR] ENABLE_COMFORTABLE_MODE",
|
223 | DISBALE_COMFORTABLE_MODE: "[Layout][TOOLBAR] DISBALE_COMFORTABLE_MODE",
|
224 | VISIBLE: "[Layout][TOOLBAR] VISIBLE",
|
225 | INVISIBLE: "[Layout][TOOLBAR] INVISIBLE",
|
226 | };
|
227 | var ChangeToolbatToComfortableModeAction = /** @class */ (function () {
|
228 | function ChangeToolbatToComfortableModeAction() {
|
229 | this.type = ToolbarActionTypes.COMPORTABLE;
|
230 | }
|
231 | return ChangeToolbatToComfortableModeAction;
|
232 | }());
|
233 | var ChangeToolbatToCompactModeAction = /** @class */ (function () {
|
234 | function ChangeToolbatToCompactModeAction() {
|
235 | this.type = ToolbarActionTypes.COMPACT;
|
236 | }
|
237 | return ChangeToolbatToCompactModeAction;
|
238 | }());
|
239 | var ChangeToolbatToSummaryModeAction = /** @class */ (function () {
|
240 | function ChangeToolbatToSummaryModeAction() {
|
241 | this.type = ToolbarActionTypes.SUMMARY;
|
242 | }
|
243 | return ChangeToolbatToSummaryModeAction;
|
244 | }());
|
245 | var EnableComfortableModeAction = /** @class */ (function () {
|
246 | function EnableComfortableModeAction() {
|
247 | this.type = ToolbarActionTypes.ENABLE_COMFORTABLE_MODE;
|
248 | }
|
249 | return EnableComfortableModeAction;
|
250 | }());
|
251 | var DisableComfortableModeAction = /** @class */ (function () {
|
252 | function DisableComfortableModeAction() {
|
253 | this.type = ToolbarActionTypes.DISBALE_COMFORTABLE_MODE;
|
254 | }
|
255 | return DisableComfortableModeAction;
|
256 | }());
|
257 | var VisibleToolbarAction = /** @class */ (function () {
|
258 | function VisibleToolbarAction() {
|
259 | this.type = ToolbarActionTypes.VISIBLE;
|
260 | }
|
261 | return VisibleToolbarAction;
|
262 | }());
|
263 | var InvisibleToolbarAction = /** @class */ (function () {
|
264 | function InvisibleToolbarAction() {
|
265 | this.type = ToolbarActionTypes.INVISIBLE;
|
266 | }
|
267 | return InvisibleToolbarAction;
|
268 | }());
|
269 |
|
270 | /**
|
271 | * @fileoverview added by tsickle
|
272 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
273 | */
|
274 |
|
275 | /**
|
276 | * @fileoverview added by tsickle
|
277 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
278 | */
|
279 | /** @type {?} */
|
280 | var initialState$1 = {
|
281 | mode: "compact",
|
282 | enableComfortableMode: false,
|
283 | comfortableModeHaveBeenDone: false,
|
284 | visibility: true
|
285 | };
|
286 | /**
|
287 | * @param {?=} state
|
288 | * @param {?=} action
|
289 | * @return {?}
|
290 | */
|
291 | function Reducer$1(state$$1, action) {
|
292 | if (state$$1 === void 0) { state$$1 = initialState$1; }
|
293 | switch (action.type) {
|
294 | case ToolbarActionTypes.COMPACT:
|
295 | if (!state$$1.visibility)
|
296 | return __assign({}, state$$1, { mode: "hide" });
|
297 | return __assign({}, state$$1, { mode: "compact" });
|
298 | case ToolbarActionTypes.COMPORTABLE:
|
299 | if (!state$$1.visibility)
|
300 | return __assign({}, state$$1, { mode: "hide" });
|
301 | return __assign({}, state$$1, { mode: state$$1.enableComfortableMode ? "comfortable" : "compact" });
|
302 | case ToolbarActionTypes.SUMMARY:
|
303 | if (!state$$1.visibility)
|
304 | return __assign({}, state$$1, { mode: "hide" });
|
305 | return __assign({}, state$$1, { mode: "summary" });
|
306 | case ToolbarActionTypes.ENABLE_COMFORTABLE_MODE:
|
307 | if (!state$$1.visibility)
|
308 | return __assign({}, state$$1, { mode: "hide" });
|
309 | return __assign({}, state$$1, { enableComfortableMode: true });
|
310 | case ToolbarActionTypes.DISBALE_COMFORTABLE_MODE:
|
311 | if (!state$$1.visibility)
|
312 | return __assign({}, state$$1, { mode: "hide" });
|
313 | return __assign({}, state$$1, { mode: "compact", enableComfortableMode: false });
|
314 | case ToolbarActionTypes.VISIBLE:
|
315 | return __assign({}, state$$1, { mode: "compact", visibility: true });
|
316 | case ToolbarActionTypes.INVISIBLE:
|
317 | return __assign({}, state$$1, { mode: "hide", visibility: false });
|
318 | default:
|
319 | return state$$1;
|
320 | }
|
321 | }
|
322 | /** @type {?} */
|
323 | var getToolbarMode = function (state$$1) { return state$$1.mode; };
|
324 |
|
325 | /**
|
326 | * @fileoverview added by tsickle
|
327 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
328 | */
|
329 | /** @type {?} */
|
330 | var LayoutReducers = {
|
331 | layout: Reducer,
|
332 | toolbar: Reducer$1
|
333 | };
|
334 | /** @type {?} */
|
335 | var selectLayoutState = createFeatureSelector("layout");
|
336 | /** @type {?} */
|
337 | var getLayout = createSelector(selectLayoutState, function (state$$1) { return state$$1.layout; });
|
338 | /** @type {?} */
|
339 | var getTitle$1 = createSelector(getLayout, getTitle);
|
340 | /** @type {?} */
|
341 | var getShowMainSidenav$1 = createSelector(getLayout, getShowMainSidenav);
|
342 | /** @type {?} */
|
343 | var getMainSideNavMode$1 = createSelector(getLayout, getMainSideNavMode);
|
344 | /** @type {?} */
|
345 | var getLayoutMode$1 = createSelector(getLayout, getLayoutMode);
|
346 | /** @type {?} */
|
347 | var getShowSecondSidebarStatus$1 = createSelector(getLayout, getShowSecondSidebarStatus);
|
348 | /** @type {?} */
|
349 | var getSecondSidebarMode$1 = createSelector(getLayout, getSecondSidebarMode);
|
350 | /** @type {?} */
|
351 | var getFullscreenMode$1 = createSelector(getLayout, getFullscreenMode);
|
352 | /** @type {?} */
|
353 | var getLayoutToolbar = createSelector(selectLayoutState, function (state$$1) { return state$$1.toolbar; });
|
354 | /** @type {?} */
|
355 | var getLayoutToolbarMode = createSelector(getLayoutToolbar, getToolbarMode);
|
356 | //#endregion
|
357 |
|
358 | /**
|
359 | * @fileoverview added by tsickle
|
360 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
361 | */
|
362 | /** @type {?} */
|
363 | var menu_item_authorization_operator = function (_a) {
|
364 | var _b = __read(_a, 2), routes = _b[0], user = _b[1];
|
365 | if (!user.Roles)
|
366 | return [];
|
367 | if (user.Roles.length == 0) {
|
368 | return [];
|
369 | }
|
370 | else {
|
371 | return routes.filter(function (route) { return user.Roles.some(function (userRole) { return route.roles.indexOf(userRole) > -1; }); });
|
372 | }
|
373 | };
|
374 | /** @type {?} */
|
375 | var MODULE_DEFAULT_CONFIG = {
|
376 | theme: "theme_B",
|
377 | showMainSidenav: false,
|
378 | showSecondSideNav: true,
|
379 | secondSideNavMode: "over",
|
380 | // | "push" | "side",
|
381 | mainSideNavMode: "over",
|
382 | // | "push" | "side",
|
383 | showLeftNavBar: false,
|
384 | stickyLeftNavBar: false,
|
385 | layoutMode: "with-margin",
|
386 | // | "without-margin" | "default",
|
387 | title: "",
|
388 | menuItems: [
|
389 | {
|
390 | route: "/",
|
391 | icon: "multiline_chart",
|
392 | roles: ["Admin", "User"],
|
393 | title: "صفحه اصلی"
|
394 | },
|
395 | {
|
396 | route: "/configs",
|
397 | icon: "settings",
|
398 | roles: ["Admin"],
|
399 | title: "تنظیمات"
|
400 | },
|
401 | {
|
402 | route: "/source",
|
403 | icon: "device_hub",
|
404 | roles: ["Admin"],
|
405 | title: "آدرس سرویس ها"
|
406 | }
|
407 | ],
|
408 | signoutAction: /** @type {?} */ ({}),
|
409 | menu_item_authorization_operator: menu_item_authorization_operator
|
410 | };
|
411 | /** @type {?} */
|
412 | var MODULE_CONFIG_TOKEN = new InjectionToken("LayoutModuleConfigModel");
|
413 |
|
414 | /**
|
415 | * @fileoverview added by tsickle
|
416 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
417 | */
|
418 | var LayoutConfigurationService = /** @class */ (function () {
|
419 | function LayoutConfigurationService(configFile, store) {
|
420 | var _this = this;
|
421 | this.store = store;
|
422 | this.config$ = new BehaviorSubject(this._config);
|
423 | this._config = Object.assign({}, MODULE_DEFAULT_CONFIG, configFile);
|
424 | this.config$.next(this._config);
|
425 | this.store
|
426 | .select(getConfigs)
|
427 | .map(function (configs) { return configs.find(function (config) { return config.Name == "layout_config"; }); })
|
428 | .subscribe(function (config) {
|
429 | if (!config)
|
430 | return;
|
431 | _this.store.dispatch(new UpdateLayoutConfigAction(config.Config));
|
432 | _this._config = Object.assign({}, _this._config, config.Config);
|
433 | _this.config$.next(_this._config);
|
434 | });
|
435 | }
|
436 | Object.defineProperty(LayoutConfigurationService.prototype, "config", {
|
437 | get: /**
|
438 | * @return {?}
|
439 | */
|
440 | function () {
|
441 | return this._config;
|
442 | },
|
443 | enumerable: true,
|
444 | configurable: true
|
445 | });
|
446 | LayoutConfigurationService.decorators = [
|
447 | { type: Injectable, args: [{
|
448 | providedIn: "root"
|
449 | },] },
|
450 | ];
|
451 | /** @nocollapse */
|
452 | LayoutConfigurationService.ctorParameters = function () { return [
|
453 | { type: undefined, decorators: [{ type: Inject, args: [MODULE_CONFIG_TOKEN,] }] },
|
454 | { type: Store }
|
455 | ]; };
|
456 | /** @nocollapse */ LayoutConfigurationService.ngInjectableDef = defineInjectable({ factory: function LayoutConfigurationService_Factory() { return new LayoutConfigurationService(inject(MODULE_CONFIG_TOKEN), inject(Store)); }, token: LayoutConfigurationService, providedIn: "root" });
|
457 | return LayoutConfigurationService;
|
458 | }());
|
459 |
|
460 | /**
|
461 | * @fileoverview added by tsickle
|
462 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
463 | */
|
464 | var MainMenuComponent = /** @class */ (function () {
|
465 | function MainMenuComponent(store, signinService, configurationService) {
|
466 | this.store = store;
|
467 | this.signinService = signinService;
|
468 | this.configurationService = configurationService;
|
469 | this.closeSidebar = new EventEmitter();
|
470 | this.user$ = this.store.select(getAccountInfo);
|
471 | this._observe_on_layout_config_and_filter_routes();
|
472 | }
|
473 | /**
|
474 | * @return {?}
|
475 | */
|
476 | MainMenuComponent.prototype._observe_on_layout_config_and_filter_routes = /**
|
477 | * @return {?}
|
478 | */
|
479 | function () {
|
480 | this.routes$ = this.configurationService.config$.pipe(map(function (config) { return config.menuItems; }), combineLatest(this.user$), map(this.configurationService.config$.getValue().menu_item_authorization_operator));
|
481 | };
|
482 | MainMenuComponent.decorators = [
|
483 | { type: Component, args: [{
|
484 | selector: "ngs-layout-main-menu",
|
485 | template: "<mat-list class=\"main-menu-container\">\n <div *ngIf=\"authenticated | async\">\n <a *ngFor=\"let item of routes$ | async\" (click)=\"closeSidebar.emit()\" routerLinkActive=\"active\" mat-list-item [routerLink]=\"[item.route]\">\n <mat-icon mat-list-icon>{{item.icon}}</mat-icon>\n <span mdLine>{{item.title}}</span>\n </a>\n </div>\n</mat-list>",
|
486 | styles: [".active{background:rgba(0,0,0,.15)}.mat-list-item.active mat-icon{color:#0072ae}a.mat-list-item.child{margin-right:20px}#clearUserMenuItem{position:absolute;left:13px;top:13px}"],
|
487 | animations: [
|
488 | trigger("childMenu", [
|
489 | state("inactive", style({
|
490 | // transform: 'scale(1)',
|
491 | height: "0px",
|
492 | opacity: "0"
|
493 | })),
|
494 | state("active", style({
|
495 | // transform: 'scale(1.1)',
|
496 | height: "48px",
|
497 | opacity: "1"
|
498 | })),
|
499 | transition("inactive => active", animate("100ms ease-in")),
|
500 | transition("active => inactive", animate("100ms ease-out"))
|
501 | ]),
|
502 | trigger("menuItem", [
|
503 | state("inactive", style({
|
504 | height: "48px"
|
505 | })),
|
506 | state("active", style({
|
507 | height: "100px"
|
508 | })),
|
509 | transition("inactive => active", animate("100ms ease-in")),
|
510 | transition("active => inactive", animate("100ms ease-out"))
|
511 | ])
|
512 | ]
|
513 | },] },
|
514 | ];
|
515 | /** @nocollapse */
|
516 | MainMenuComponent.ctorParameters = function () { return [
|
517 | { type: Store },
|
518 | { type: SigninService },
|
519 | { type: LayoutConfigurationService }
|
520 | ]; };
|
521 | MainMenuComponent.propDecorators = {
|
522 | closeSidebar: [{ type: Output }],
|
523 | authenticated: [{ type: Input }],
|
524 | customerMobileInput: [{ type: ViewChild, args: ["customerMobileInput",] }]
|
525 | };
|
526 | return MainMenuComponent;
|
527 | }());
|
528 |
|
529 | /**
|
530 | * @fileoverview added by tsickle
|
531 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
532 | */
|
533 | var SearchBoxComponent = /** @class */ (function () {
|
534 | function SearchBoxComponent() {
|
535 | }
|
536 | /**
|
537 | * @return {?}
|
538 | */
|
539 | SearchBoxComponent.prototype.ngOnInit = /**
|
540 | * @return {?}
|
541 | */
|
542 | function () {
|
543 | };
|
544 | SearchBoxComponent.decorators = [
|
545 | { type: Component, args: [{
|
546 | selector: 'app-search-box',
|
547 | template: "<div class=\"search-box\">\n <!--<td-search-box class=\"search-box-container\" backIcon=\"arrow_back\" placeholder=\"\u062C\u0633\u062A\u062C\u0648\" [showUnderline]=\"false\" [debounce]=\"500\" [alwaysVisible]=\"false\"\n (searchDebounce)=\"searchInputTerm = $event\" (search)=\"searchInputTerm = $event\" (clear)=\"searchInputTerm = ''\">\n </td-search-box>-->\n</div>",
|
548 | styles: [""]
|
549 | },] },
|
550 | ];
|
551 | /** @nocollapse */
|
552 | SearchBoxComponent.ctorParameters = function () { return []; };
|
553 | return SearchBoxComponent;
|
554 | }());
|
555 |
|
556 | /**
|
557 | * @fileoverview added by tsickle
|
558 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
559 | */
|
560 | var LogoContainerComponent = /** @class */ (function () {
|
561 | function LogoContainerComponent(sdf) {
|
562 | this.sdf = sdf;
|
563 | }
|
564 | LogoContainerComponent.decorators = [
|
565 | { type: Component, args: [{
|
566 | selector: "app-logo-container",
|
567 | template: "\n<!--<img class=\"logoTypeAnimation\" src='../../../assets/images/logo-type.png' />-->",
|
568 | styles: [".logoAnimation{height:36px;cursor:pointer;z-index:2}#background{position:absolute;top:0;right:0;width:300px;height:70px}"]
|
569 | },] },
|
570 | ];
|
571 | /** @nocollapse */
|
572 | LogoContainerComponent.ctorParameters = function () { return [
|
573 | { type: LayoutConfigurationService }
|
574 | ]; };
|
575 | return LogoContainerComponent;
|
576 | }());
|
577 |
|
578 | /**
|
579 | * @fileoverview added by tsickle
|
580 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
581 | */
|
582 | var ToolbarMenuComponent = /** @class */ (function () {
|
583 | function ToolbarMenuComponent(document, _location, store, configurationService) {
|
584 | var _this = this;
|
585 | this.document = document;
|
586 | this._location = _location;
|
587 | this.store = store;
|
588 | this.configurationService = configurationService;
|
589 | this.toolbarAnimationState = "compact";
|
590 | this.menuAnimationState = "compact";
|
591 | this.logoAnimationState = "compact";
|
592 | this.titleAnimationState = "compact";
|
593 | this.anchorsMode = false;
|
594 | this.user$ = this.store.select(getAccountInfo);
|
595 | this.store.dispatch(new ChangeToolbatToComfortableModeAction());
|
596 | this.config$ = this.store.select(getLayoutToolbar);
|
597 | this.config$.subscribe(function (config) { return (_this.config = config); });
|
598 | this.lastScroll = this.document.body.scrollTop;
|
599 | this.showSecondSidenav = this.store.select(getShowSecondSidebarStatus$1);
|
600 | this.showMainSidenav = this.store.select(getShowMainSidenav$1);
|
601 | this.store.select(getLayoutToolbarMode).subscribe(function (state$$1) {
|
602 | setTimeout(function () { return (_this.menuAnimationState = state$$1); }, 1);
|
603 | setTimeout(function () { return (_this.logoAnimationState = state$$1); }, 1);
|
604 | setTimeout(function () { return (_this.titleAnimationState = state$$1); }, 1);
|
605 | setTimeout(function () { return (_this.toolbarAnimationState = state$$1); }, 1);
|
606 | });
|
607 | this._observe_on_layout_config_and_filter_routes();
|
608 | fromEvent(this.document.body, "scroll").subscribe(function () {
|
609 | /** @type {?} */
|
610 | var scrolledAmount = _this.document.body.scrollTop;
|
611 | /** @type {?} */
|
612 | var scrollToTop = scrolledAmount - _this.lastScroll < 0 && _this.document.body.scrollHeight - scrolledAmount < 300;
|
613 | // let scrollToTop = scrolledAmount - this.lastScroll < 0;
|
614 | // let scrollToTop = scrolledAmount - this.lastScroll < 0;
|
615 | _this.lastScroll = _this.document.body.scrollTop;
|
616 | if (!_this.config.visibility)
|
617 | return;
|
618 | if (scrolledAmount == 0) {
|
619 | if (_this.config.mode == "comfortable")
|
620 | return;
|
621 | _this.store.dispatch(new ChangeToolbatToComfortableModeAction());
|
622 | }
|
623 | else if (scrolledAmount < 200 || scrollToTop) {
|
624 | if (_this.config.mode == "compact")
|
625 | return;
|
626 | _this.store.dispatch(new ChangeToolbatToCompactModeAction());
|
627 | }
|
628 | else {
|
629 | if (_this.config.mode == "summary")
|
630 | return;
|
631 | _this.store.dispatch(new ChangeToolbatToSummaryModeAction());
|
632 | }
|
633 | });
|
634 | }
|
635 | /**
|
636 | * @return {?}
|
637 | */
|
638 | ToolbarMenuComponent.prototype.onWindowScroll = /**
|
639 | * @return {?}
|
640 | */
|
641 | function () {
|
642 | // of(1)
|
643 | };
|
644 | /**
|
645 | * @return {?}
|
646 | */
|
647 | ToolbarMenuComponent.prototype.signout = /**
|
648 | * @return {?}
|
649 | */
|
650 | function () {
|
651 | this.store.dispatch(new DoSignoutAction$1());
|
652 | };
|
653 | /**
|
654 | * @return {?}
|
655 | */
|
656 | ToolbarMenuComponent.prototype.goback = /**
|
657 | * @return {?}
|
658 | */
|
659 | function () {
|
660 | this._location.back();
|
661 | };
|
662 | /**
|
663 | * @return {?}
|
664 | */
|
665 | ToolbarMenuComponent.prototype.toggleSecondSidebar = /**
|
666 | * @return {?}
|
667 | */
|
668 | function () {
|
669 | /** @type {?} */
|
670 | var action;
|
671 | this.showSecondSidenav.subscribe(function (state$$1) {
|
672 | action = state$$1 ? new CloseSecondSidenavAction() : new OpenSecondSidenavAction();
|
673 | });
|
674 | this.store.dispatch(action);
|
675 | };
|
676 | /**
|
677 | * @return {?}
|
678 | */
|
679 | ToolbarMenuComponent.prototype.toggleMainSidebar = /**
|
680 | * @return {?}
|
681 | */
|
682 | function () {
|
683 | /** @type {?} */
|
684 | var action;
|
685 | this.showMainSidenav.subscribe(function (state$$1) {
|
686 | action = state$$1 ? new CloseSidenavAction() : new OpenSidenavAction();
|
687 | });
|
688 | this.store.dispatch(action);
|
689 | };
|
690 | /**
|
691 | * @return {?}
|
692 | */
|
693 | ToolbarMenuComponent.prototype._observe_on_layout_config_and_filter_routes = /**
|
694 | * @return {?}
|
695 | */
|
696 | function () {
|
697 | this.menuItems$ = this.configurationService.config$.pipe(map(function (config) { return config.menuItems; }), combineLatest(this.user$), map(this.configurationService.config$.getValue().menu_item_authorization_operator));
|
698 | };
|
699 | ToolbarMenuComponent.decorators = [
|
700 | { type: Component, args: [{
|
701 | selector: "layout-toolbar",
|
702 | template: "<mat-toolbar [@toolbarAnimation]=\"toolbarAnimationState\">\n <mat-toolbar-row id=\"firstToolbar\">\n <!-- <div id=\"background\"></div> -->\n <img [@logoAnimation]=\"logoAnimationState\" id=\"logo\" routerLink='/' src='assets/images/shatel-logo.png' />\n\n <button type=\"button\" *ngIf='showSidebarMenu && false' (click)=\"toggleMainSidebar()\" mat-icon-button fxFlex=\"nogrow\" fxLayoutAlign=\"center center\">\n <mat-icon>menu</mat-icon>\n </button>\n <span [@titleAnimation]=\"titleAnimationState\" id='app-name'>\n {{app_config?.Config.AppTitle}}\n </span>\n <app-title fxFlex fxLayoutAlign=\"start center\"></app-title>\n <app-search-box fxFlex fxLayoutAlign=\"end center\"></app-search-box>\n\n\n <button *ngIf=\"!displayName\" mat-button routerLink=\"auth/signin\">\n \u0648\u0631\u0648\u062F\n </button>\n <button *ngIf=\"!displayName\" mat-button routerLink=\"auth/signup\">\n \u062B\u0628\u062A \u0646\u0627\u0645\n </button>\n <button *ngIf=\"displayName\" mat-icon-button [matMenuTriggerFor]=\"toolbarMenu1\">\n <mat-icon>account_circle</mat-icon>\n </button>\n <mat-menu #toolbarMenu1 class=\"rtl-dir\">\n <div id=\"acccountName\">\n {{displayName}}\n </div>\n <button routerLink='/user/panel' mat-menu-item class=\"rtl-dir\">\n <mat-icon>fingerprint</mat-icon>\n <span>\n \u0645\u062F\u06CC\u0631\u06CC\u062A \u06A9\u0627\u0631\u0628\u0631\u06CC\n </span>\n </button>\n <button (click)='signout()' mat-menu-item class=\"rtl-dir\">\n <mat-icon>exit_to_app</mat-icon>\n <span>\u062E\u0631\u0648\u062C</span>\n </button>\n </mat-menu>\n <button mat-icon-button type=\"button\" (click)=\"toggleSecondSidebar()\" fxFlex=\"nogrow\" fxLayoutAlign=\"center center\">\n <mat-icon>notifications</mat-icon>\n </button>\n <button mat-icon-button (click)='goback()'>\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n </mat-toolbar-row>\n <mat-toolbar-row>\n <div id=\"secondToolbar\" [@menuAnimation]=\"menuAnimationState\">\n <router-outlet name=\"ngs-layout-before-toolbar-menu\"></router-outlet>\n <button mat-button *ngFor=\"let menu of menuItems$ | async\" routerLinkActive=\"active\" [routerLink]=\"[menu.route]\">\n <!-- <mat-icon mat-list-icon>{{menu.icon}}</mat-icon> -->\n <span>{{menu.title}}</span>\n </button>\n <router-outlet name=\"ngs-layout-after-toolbar-menu\"></router-outlet>\n </div>\n </mat-toolbar-row>\n</mat-toolbar>",
|
703 | styles: ["mat-toolbar{background-color:#fff!important;top:0;box-shadow:rgba(0,0,0,.5) 1px 1px 3px!important}#secondToolbar{transition:none;position:absolute}#secondToolbar button{opacity:.6;font-family:iran-sans-bold,sans-serif!important;font-size:.65em!important}#secondToolbar.active{opacity:1}#logo{transition:none;position:absolute}#app-name{padding-right:8px;font-family:iran-sans-bold,sans-serif!important}button.rtl-dir{direction:rtl!important}#acccountName{display:block;text-align:right;padding-right:20px;font-size:14px;font-weight:bolder}"],
|
704 | animations: [
|
705 | trigger("logoAnimation", [
|
706 | state("comfortable", style({
|
707 | width: "90px",
|
708 | height: "90px",
|
709 | top: "50px",
|
710 | right: "calc(50% - 50px)"
|
711 | })),
|
712 | state("compact", style({
|
713 | width: "36px",
|
714 | height: "36px",
|
715 | top: "13px",
|
716 | right: "13px"
|
717 | })),
|
718 | state("summary", style({
|
719 | width: "36px",
|
720 | height: "36px",
|
721 | top: "76px",
|
722 | right: "10px"
|
723 | })),
|
724 | state("hide", style({
|
725 | width: "0",
|
726 | height: "0",
|
727 | top: "76px",
|
728 | right: "10px"
|
729 | })),
|
730 | transition("comfortable => compact", animate("800ms ease-out")),
|
731 | transition("comfortable => hide", animate("800ms ease-in")),
|
732 | transition("hide => comfortable", animate("800ms ease-in")),
|
733 | transition("compact => hide", animate("800ms ease-in")),
|
734 | transition("hide => compact", animate("800ms ease-in")),
|
735 | transition("summary => hide", animate("800ms ease-in")),
|
736 | transition("hide => summary", animate("800ms ease-in")),
|
737 | // transition("comfortable => summary", animate("800ms ease-in")),
|
738 | transition("summary => compact", animate("400ms ease-out")),
|
739 | transition("summary => comfortable", animate("800ms ease-out")),
|
740 | transition("compact => comfortable", animate("800ms ease-out")),
|
741 | transition("compact => summary", animate("400ms ease-out"))
|
742 | ]),
|
743 | trigger("menuAnimation", [
|
744 | state("comfortable", style({
|
745 | right: "50%",
|
746 | transform: "translateX(50%)",
|
747 | bottom: "25px"
|
748 | })),
|
749 | state("compact", style({
|
750 | right: "45px",
|
751 | transform: "translateX(0)",
|
752 | bottom: "13px"
|
753 | })),
|
754 | state("summary", style({
|
755 | right: "75px",
|
756 | transform: "translateX(0)",
|
757 | bottom: "14px"
|
758 | })),
|
759 | state("hide", style({
|
760 | right: "75px",
|
761 | transform: "translateX(0)",
|
762 | bottom: "14px"
|
763 | })),
|
764 | transition("comfortable => compact", animate("800ms ease-in")),
|
765 | transition("comfortable => hide", animate("400ms ease-in")),
|
766 | transition("hide => comfortable", animate("600ms ease-in")),
|
767 | transition("compact => hide", animate("400ms ease-in")),
|
768 | transition("hide => compact", animate("600ms ease-in")),
|
769 | transition("summary => hide", animate("400ms ease-in")),
|
770 | transition("hide => summary", animate("600ms ease-in")),
|
771 | // transition("comfortable => summary", animate("800ms ease-in")),
|
772 | transition("summary => compact", animate("400ms ease-out")),
|
773 | transition("summary => comfortable", animate("800ms ease-out")),
|
774 | transition("compact => comfortable", animate("800ms ease-out")),
|
775 | transition("compact => summary", animate("400ms ease-in"))
|
776 | ]),
|
777 | trigger("titleAnimation", [
|
778 | state("comfortable", style({
|
779 | "margin-right": "0px",
|
780 | "font-size": "larger",
|
781 | "font-weight": "bolder",
|
782 | transform: "translateX(50%)",
|
783 | right: "calc(50%)",
|
784 | bottom: "75px",
|
785 | position: "absolute",
|
786 | padding: 0
|
787 | })),
|
788 | state("compact", style({
|
789 | "margin-right": "0px",
|
790 | "font-size": "16px",
|
791 | "font-weight": "bolder",
|
792 | transform: "translateX(0)",
|
793 | right: "60px",
|
794 | bottom: "79px",
|
795 | position: "absolute",
|
796 | padding: 0
|
797 | })),
|
798 | state("summary", style({
|
799 | "margin-right": "0px",
|
800 | "font-size": "16px",
|
801 | "font-weight": "bolder",
|
802 | transform: "translateX(0)",
|
803 | right: "60px",
|
804 | bottom: "79px",
|
805 | position: "absolute",
|
806 | padding: 0
|
807 | })),
|
808 | state("hide", style({
|
809 | "margin-right": "0px",
|
810 | "font-size": "1px",
|
811 | "font-weight": "bolder",
|
812 | transform: "translateX(0)",
|
813 | right: "60px",
|
814 | bottom: "79px",
|
815 | position: "absolute",
|
816 | padding: 0
|
817 | })),
|
818 | transition("comfortable => compact", animate("850ms ease-out")),
|
819 | transition("comfortable => hide", animate("800ms ease-in")),
|
820 | transition("hide => comfortable", animate("800ms ease-in")),
|
821 | transition("compact => hide", animate("800ms ease-in")),
|
822 | transition("hide => compact", animate("800ms ease-in")),
|
823 | transition("summary => hide", animate("800ms ease-in")),
|
824 | transition("hide => summary", animate("800ms ease-in")),
|
825 | // transition("comfortable => summary", animate("800ms ease-in")),
|
826 | transition("summary => compact", animate("400ms ease-out")),
|
827 | transition("summary => comfortable", animate("800ms ease-out")),
|
828 | transition("compact => comfortable", animate("800ms ease-out")),
|
829 | transition("compact => summary", animate("400ms ease-in"))
|
830 | ]),
|
831 | trigger("toolbarAnimation", [
|
832 | state("comfortable", style({
|
833 | // backgroundColor: "rgba(119,181,63,1)",
|
834 | backgroundColor: "rgba(256,256,256,1)",
|
835 | color: "rgba(30,30,30,1)",
|
836 | height: "33vh",
|
837 | top: "0",
|
838 | boxShadow: "1px 1px 3px rgba(0,0,0,0)"
|
839 | })),
|
840 | state("compact", style({
|
841 | backgroundColor: "rgba(256,256,256,1)",
|
842 | height: "128px",
|
843 | top: "0",
|
844 | boxShadow: "1px 1px 3px rgba(0,0,0,0.5)"
|
845 | })),
|
846 | state("summary", style({
|
847 | backgroundColor: "rgba(256,256,256,1)",
|
848 | height: "128px",
|
849 | top: "-64px",
|
850 | boxShadow: "1px 1px 3px rgba(0,0,0,0.5)"
|
851 | })),
|
852 | state("hide", style({
|
853 | backgroundColor: "rgba(256,256,256,1)",
|
854 | height: "128px",
|
855 | top: "-128px",
|
856 | boxShadow: "1px 1px 3px rgba(0,0,0,0.5)"
|
857 | })),
|
858 | transition("comfortable => compact", animate("800ms ease-in")),
|
859 | transition("comfortable => hide", animate("800ms ease-in")),
|
860 | transition("hide => comfortable", animate("800ms ease-in")),
|
861 | transition("compact => hide", animate("800ms ease-in")),
|
862 | transition("hide => compact", animate("800ms ease-in")),
|
863 | transition("summary => hide", animate("800ms ease-in")),
|
864 | transition("hide => summary", animate("800ms ease-in")),
|
865 | // transition("comfortable => summary", animate("800ms ease-in")),
|
866 | transition("summary => compact", animate("400ms ease-out")),
|
867 | transition("summary => comfortable", animate("800ms ease-out")),
|
868 | transition("compact => comfortable", animate("800ms ease-out")),
|
869 | transition("compact => summary", animate("400ms ease-in"))
|
870 | ])
|
871 | ]
|
872 | },] },
|
873 | ];
|
874 | /** @nocollapse */
|
875 | ToolbarMenuComponent.ctorParameters = function () { return [
|
876 | { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
877 | { type: Location },
|
878 | { type: Store },
|
879 | { type: LayoutConfigurationService }
|
880 | ]; };
|
881 | ToolbarMenuComponent.propDecorators = {
|
882 | showSidebarMenu: [{ type: Input }],
|
883 | app_config: [{ type: Input, args: ["app-config",] }],
|
884 | user: [{ type: Input }],
|
885 | displayName: [{ type: Input }],
|
886 | onWindowScroll: [{ type: HostListener, args: ["body:scroll", [],] }]
|
887 | };
|
888 | return ToolbarMenuComponent;
|
889 | }());
|
890 |
|
891 | /**
|
892 | * @fileoverview added by tsickle
|
893 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
894 | */
|
895 | var FooterComponent = /** @class */ (function () {
|
896 | function FooterComponent() {
|
897 | }
|
898 | /**
|
899 | * @return {?}
|
900 | */
|
901 | FooterComponent.prototype.ngOnInit = /**
|
902 | * @return {?}
|
903 | */
|
904 | function () { };
|
905 | FooterComponent.decorators = [
|
906 | { type: Component, args: [{
|
907 | selector: "app-footer",
|
908 | template: "<div fxLayoutAlign=\"center center\" class=\"footer-text\">\n {{app_config?.Config.FooterCopyright}}\n</div>",
|
909 | styles: [":host{border-top:1px solid #e5e5e5;padding:8px;overflow:hidden}.footer-text{position:relative;top:12px}"]
|
910 | },] },
|
911 | ];
|
912 | /** @nocollapse */
|
913 | FooterComponent.ctorParameters = function () { return []; };
|
914 | FooterComponent.propDecorators = {
|
915 | app_config: [{ type: Input, args: ["app-config",] }]
|
916 | };
|
917 | return FooterComponent;
|
918 | }());
|
919 |
|
920 | /**
|
921 | * @fileoverview added by tsickle
|
922 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
923 | */
|
924 | var TitleComponent = /** @class */ (function () {
|
925 | function TitleComponent(store, router) {
|
926 | var _this = this;
|
927 | this.store = store;
|
928 | this.router = router;
|
929 | this.mapper = [];
|
930 | // this.mapper.push((event: NavigationEnd) => {
|
931 | // return (event.url.endsWith('profile-edit')) ? 'ویرایش اطلاعات کاربری' : null;
|
932 | // });
|
933 | // this.mapper.push((event: NavigationEnd) => {
|
934 | // return (event.url.endsWith('success-payment-report')) ? 'گزارش پرداخت های موفق' : null;
|
935 | // });
|
936 | // this.mapper.push((event: NavigationEnd) => {
|
937 | // return (event.url.endsWith('failed-login-report')) ? 'گزارش خطاها' : null;
|
938 | // });
|
939 | // this.mapper.push((event: NavigationEnd) => {
|
940 | // return (event.url.endsWith('active-session-info')) ? 'جزئیات بسته فعال' : null;
|
941 | // });
|
942 | // this.mapper.push((event: NavigationEnd) => {
|
943 | // return (event.url.endsWith('session-detail-report')) ? 'جزئیات اتصال' : null;
|
944 | // });
|
945 | // this.mapper.push((event: NavigationEnd) => {
|
946 | // return (event.url.endsWith('daily-session-report')) ? 'گزارش تجمیعی روزانه' : null;
|
947 | // });
|
948 | // this.mapper.push((event: NavigationEnd) => {
|
949 | // return (event.url.endsWith('monthly-session-report')) ? 'گزارش تجمیعی ماهانه' : null;
|
950 | // });
|
951 | // this.mapper.push((event: NavigationEnd) => {
|
952 | // return (event.url.startsWith('/packages/user-packages')) ? 'لیست پکیج ها' : null;
|
953 | // });
|
954 | // this.mapper.push((event: NavigationEnd) => {
|
955 | // return (event.url.endsWith('/change-password')) ? 'تغییر کلمه عبور' : null;
|
956 | // });
|
957 | this.title$ = this.store.select(getTitle$1);
|
958 | this.router.events.subscribe(function (event) {
|
959 | if (event instanceof NavigationEnd) {
|
960 | /** @type {?} */
|
961 | var title = "";
|
962 | _this.mapper.forEach(function (mapper) {
|
963 | /** @type {?} */
|
964 | var res = mapper(event);
|
965 | if (res) {
|
966 | title = res;
|
967 | return true;
|
968 | }
|
969 | else {
|
970 | return false;
|
971 | }
|
972 | });
|
973 | _this.store.dispatch(new TitleChangedAction("/ " + title || ""));
|
974 | }
|
975 | });
|
976 | }
|
977 | TitleComponent.decorators = [
|
978 | { type: Component, args: [{
|
979 | selector: "app-title",
|
980 | template: "<div id=\"title\">\n {{title$ | async}}\n</div>",
|
981 | styles: ["#title{margin-right:-30px;font-weight:bolder;font-size:13px;padding:18px 40px}"]
|
982 | },] },
|
983 | ];
|
984 | /** @nocollapse */
|
985 | TitleComponent.ctorParameters = function () { return [
|
986 | { type: Store },
|
987 | { type: Router }
|
988 | ]; };
|
989 | return TitleComponent;
|
990 | }());
|
991 |
|
992 | /**
|
993 | * @fileoverview added by tsickle
|
994 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
995 | */
|
996 | var NgsLayoutMainComponent = /** @class */ (function () {
|
997 | function NgsLayoutMainComponent(store, router, configService, translateService, userFacadeService) {
|
998 | var _this = this;
|
999 | this.store = store;
|
1000 | this.router = router;
|
1001 | this.configService = configService;
|
1002 | this.translateService = translateService;
|
1003 | this.userFacadeService = userFacadeService;
|
1004 | this.showSidebarMenu = new BehaviorSubject$1(true);
|
1005 | this.width = 100;
|
1006 | this._set_i18n_resource();
|
1007 | this.configService.config$.subscribe(function (config) {
|
1008 | debugger;
|
1009 | _this.theme = config.theme;
|
1010 | _this.theme_A = config.theme == "theme_A";
|
1011 | _this.theme_B = config.theme == "theme_B";
|
1012 | });
|
1013 | this.store.dispatch(new ChangeSideNavMode("push"));
|
1014 | this.user$ = this.store.select(function (s) { return (/** @type {?} */ (s)).user.user.data; });
|
1015 | this.displayName$ = this.userFacadeService.getDisplayName();
|
1016 | this.showMainSidenav = this.store.select(getShowMainSidenav$1);
|
1017 | this.mainSidenavMode = this.store.select(getMainSideNavMode$1);
|
1018 | this.toolbarAnimationState = this.store.select(getLayoutToolbarMode);
|
1019 | this.isFullscreen$ = this.store.select(getFullscreenMode$1);
|
1020 | this.mode$ = this.isFullscreen$.map(function (mode) { return (mode ? "invisible" : "visible"); });
|
1021 | //#region manage second sidebar
|
1022 | this.store.dispatch(new ChangeSecondSidenavMode("push"));
|
1023 | this.showSecondSidenav = this.store.select(getShowSecondSidebarStatus$1);
|
1024 | this.secondSidenavMode = this.store.select(getSecondSidebarMode$1);
|
1025 | //#endregion manage second sidebar
|
1026 | this.layoutMode = this.store.select(getLayoutMode$1);
|
1027 | this.router.events.filter(function (data) { return data instanceof NavigationEnd; }).subscribe(function (event) {
|
1028 | /** @type {?} */
|
1029 | var hideSituations = [
|
1030 | (/** @type {?} */ (event)).urlAfterRedirects == "/auth/signin",
|
1031 | (/** @type {?} */ (event)).urlAfterRedirects == "/auth/signup/register",
|
1032 | (/** @type {?} */ (event)).urlAfterRedirects == "/auth/signup/verification",
|
1033 | (/** @type {?} */ (event)).urlAfterRedirects == "/user/password/reset"
|
1034 | ];
|
1035 | if (hideSituations.some(function (i) { return i; }))
|
1036 | _this.showSidebarMenu.next(false);
|
1037 | else
|
1038 | _this.showSidebarMenu.next(true);
|
1039 | });
|
1040 | }
|
1041 | // ngAfterViewInit() {
|
1042 | // this.store.dispatch(new ChangeLayout("with-margin"));
|
1043 | // }
|
1044 | /**
|
1045 | * @return {?}
|
1046 | */
|
1047 | NgsLayoutMainComponent.prototype.onSecondSidebarClosedStart = /**
|
1048 | * @return {?}
|
1049 | */
|
1050 | function () {
|
1051 | this.store.dispatch(new CloseSecondSidenavAction());
|
1052 | };
|
1053 | /**
|
1054 | * @return {?}
|
1055 | */
|
1056 | NgsLayoutMainComponent.prototype.onSidebarClosedStart = /**
|
1057 | * @return {?}
|
1058 | */
|
1059 | function () {
|
1060 | this.store.dispatch(new CloseSidenavAction());
|
1061 | };
|
1062 | /**
|
1063 | * private methods
|
1064 | */
|
1065 | /**
|
1066 | * private methods
|
1067 | * @return {?}
|
1068 | */
|
1069 | NgsLayoutMainComponent.prototype._set_i18n_resource = /**
|
1070 | * private methods
|
1071 | * @return {?}
|
1072 | */
|
1073 | function () {
|
1074 | this.translateService.setTranslation('en', {
|
1075 | __Signin: 'Signin',
|
1076 | __Signup: 'Signup'
|
1077 | });
|
1078 | this.translateService.setTranslation('fa', {
|
1079 | Signin: 'ورود',
|
1080 | Signup: 'ثبت نام'
|
1081 | });
|
1082 | };
|
1083 | NgsLayoutMainComponent.decorators = [
|
1084 | { type: Component, args: [{
|
1085 | selector: "layout-main",
|
1086 | template: "<div #mainSideNav [ngClass]=\"toolbarAnimationState | async\" [class.fullscreen]=\"isFullscreen$ | async\">\n <!-- <mat-progress-bar *ngIf='progressStatus$ | async' color=\"primary\" mode=\"query\"></mat-progress-bar> -->\n <layout-toolbar *ngIf=\"theme == 'theme_A'\" [user]=\"user$ | async\" [displayName]=\"displayName$ | async\" [showSidebarMenu]='showSidebarMenu | async' [app-config]=\"app_config\"></layout-toolbar>\n <layout-toolbar-b *ngIf=\"theme == 'theme_B'\" [user]=\"user$ | async\" [displayName]=\"displayName$ | async\" [showSidebarMenu]='showSidebarMenu | async' [app-config]=\"app_config\"></layout-toolbar-b>\n \n <mat-sidenav-container id=\"layout-sidnav\" [className]=\"layoutMode | async\">\n <mat-sidenav [mode]=\"mainSidenavMode | async\" [opened]='showMainSidenav | async' #sidebar (closedStart)=\"onSidebarClosedStart()\">\n <mat-nav-list>\n <ngs-layout-main-menu [authenticated]='showSidebarMenu' (closeSidebar)=\"sidebar.close()\" (click)=\"onSecondSidebarClosedStart()\"></ngs-layout-main-menu>\n </mat-nav-list>\n </mat-sidenav>\n <!-- <mat-sidenav [mode]=\"secondSidenavMode | async\" [opened]='showSecondSidenav | async' (closedStart)=\"onSecondSidebarClosedStart()\"\n position=\"end\" #second_sidebar class=\"second_sidebar\">\n <mat-nav-list fxLayout='column'>\n </mat-nav-list>\n </mat-sidenav> -->\n <div fxFlexLayout='column' id=\"app-main-container\" fxLayoutAlign='center center'>\n <div fxFlex='0 0 100'>\n <router-outlet></router-outlet>\n <footer [@mode]=\"mode$ | async\" ruleAnchor=\"layout_footer\">\n <router-outlet name=\"footer_A\"></router-outlet>\n <router-outlet name=\"footer_B\"></router-outlet>\n <app-footer [app-config]=\"app_config\"></app-footer>\n </footer>\n </div>\n </div>\n </mat-sidenav-container>\n</div>",
|
1087 | styles: ["#purchase-fab-button{position:fixed;bottom:23px;left:31px}md-progress-bar{position:absolute!important}.with-margin #app-main-container{margin-top:25px;padding-right:25px;padding-left:25px}.second_sidebar{width:380px}.more-detail{margin:8px;box-sizing:border-box;padding:10px;text-align:center;width:96%;border:1px solid #dedede;outline:0;cursor:pointer;transition:.3s}.more-detail:hover{background:#eee}footer{border-top:1px solid #e5e5e5;margin-top:25px;background-color:#f1f1f1}"],
|
1088 | animations: [
|
1089 | trigger("mode", [
|
1090 | state("visible", style({ transform: "scaleY(1) translateY(0)" })),
|
1091 | state("invisible", style({ height: "0", transform: "scaleY(0) translateY(100%)" })),
|
1092 | transition("visible => invisible", [animate("1000ms")]),
|
1093 | transition("invisible => visible", [animate("1000ms")])
|
1094 | ])
|
1095 | ]
|
1096 | },] },
|
1097 | ];
|
1098 | /** @nocollapse */
|
1099 | NgsLayoutMainComponent.ctorParameters = function () { return [
|
1100 | { type: Store },
|
1101 | { type: Router },
|
1102 | { type: LayoutConfigurationService },
|
1103 | { type: TranslateService },
|
1104 | { type: UserFacadeService }
|
1105 | ]; };
|
1106 | NgsLayoutMainComponent.propDecorators = {
|
1107 | app_config: [{ type: Input, args: ["app-config",] }],
|
1108 | mainSideNav: [{ type: ViewChild, args: ["mainSideNav",] }],
|
1109 | theme_A: [{ type: HostBinding, args: ["class.theme_A",] }],
|
1110 | theme_B: [{ type: HostBinding, args: ["class.theme_B",] }]
|
1111 | };
|
1112 | return NgsLayoutMainComponent;
|
1113 | }());
|
1114 |
|
1115 | /**
|
1116 | * @fileoverview added by tsickle
|
1117 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1118 | */
|
1119 | var LayoutEffects = /** @class */ (function () {
|
1120 | function LayoutEffects(actions$, router, store) {
|
1121 | this.actions$ = actions$;
|
1122 | this.router = router;
|
1123 | this.store = store;
|
1124 | this.DoSignout$ = this.actions$.ofType(LayoutActionTypes.DO_SIGNOUT).pipe(map(function () { return new DoSignoutAction(); }));
|
1125 | this.fullscreen$ = this.actions$.ofType(LayoutActionTypes.FULLSCREEN).pipe(map(function () { return new InvisibleToolbarAction(); }));
|
1126 | this.exit_fullscreen$ = this.actions$
|
1127 | .ofType(LayoutActionTypes.EXIT_FULLSCREEN)
|
1128 | .pipe(map(function () { return new VisibleToolbarAction(); }));
|
1129 | this.fullscren_toolbar$ = this.actions$.ofType(LayoutActionTypes.TOGGLE_FULLSCREEN).pipe(withLatestFrom(this.store.select(getFullscreenMode$1)), map(function (_a) {
|
1130 | var _b = __read(_a, 2), action = _b[0], toolbarMode = _b[1];
|
1131 | if (toolbarMode)
|
1132 | return new ExitFullscreenAction();
|
1133 | else
|
1134 | return new FullscreenAction();
|
1135 | }));
|
1136 | }
|
1137 | LayoutEffects.decorators = [
|
1138 | { type: Injectable },
|
1139 | ];
|
1140 | /** @nocollapse */
|
1141 | LayoutEffects.ctorParameters = function () { return [
|
1142 | { type: Actions },
|
1143 | { type: Router },
|
1144 | { type: Store }
|
1145 | ]; };
|
1146 | __decorate([
|
1147 | Effect(),
|
1148 | __metadata("design:type", Object)
|
1149 | ], LayoutEffects.prototype, "DoSignout$", void 0);
|
1150 | __decorate([
|
1151 | Effect(),
|
1152 | __metadata("design:type", Object)
|
1153 | ], LayoutEffects.prototype, "fullscreen$", void 0);
|
1154 | __decorate([
|
1155 | Effect(),
|
1156 | __metadata("design:type", Object)
|
1157 | ], LayoutEffects.prototype, "exit_fullscreen$", void 0);
|
1158 | __decorate([
|
1159 | Effect(),
|
1160 | __metadata("design:type", Object)
|
1161 | ], LayoutEffects.prototype, "fullscren_toolbar$", void 0);
|
1162 | return LayoutEffects;
|
1163 | }());
|
1164 |
|
1165 | /**
|
1166 | * @fileoverview added by tsickle
|
1167 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1168 | */
|
1169 | var ToolbarMenuThemeBComponent = /** @class */ (function () {
|
1170 | function ToolbarMenuThemeBComponent(document, _location, store, translateService, configurationService) {
|
1171 | var _this = this;
|
1172 | this.document = document;
|
1173 | this._location = _location;
|
1174 | this.store = store;
|
1175 | this.translateService = translateService;
|
1176 | this.configurationService = configurationService;
|
1177 | this.toolbarAnimationState = "compact";
|
1178 | this.menuAnimationState = "compact";
|
1179 | this.logoAnimationState = "compact";
|
1180 | this.titleAnimationState = "compact";
|
1181 | this.anchorsMode = false;
|
1182 | debugger;
|
1183 | translateService.get('__Signin').subscribe(function (res) {
|
1184 | debugger;
|
1185 | console.log(res);
|
1186 | //=> 'hello world'
|
1187 | });
|
1188 | this.user$ = this.store.select(getAccountInfo);
|
1189 | this.store.dispatch(new ChangeToolbatToComfortableModeAction());
|
1190 | this.config$ = this.store.select(getLayoutToolbar);
|
1191 | this.config$.subscribe(function (config) { return (_this.config = config); });
|
1192 | this.lastScroll = this.document.body.scrollTop;
|
1193 | this.showSecondSidenav = this.store.select(getShowSecondSidebarStatus$1);
|
1194 | this.showMainSidenav = this.store.select(getShowMainSidenav$1);
|
1195 | this.store.select(getLayoutToolbarMode).subscribe(function (state$$1) {
|
1196 | setTimeout(function () { return (_this.menuAnimationState = state$$1); }, 1);
|
1197 | setTimeout(function () { return (_this.logoAnimationState = state$$1); }, 1);
|
1198 | setTimeout(function () { return (_this.titleAnimationState = state$$1); }, 1);
|
1199 | setTimeout(function () { return (_this.toolbarAnimationState = state$$1); }, 1);
|
1200 | });
|
1201 | this._observe_on_layout_config_and_filter_routes();
|
1202 | fromEvent(this.document.body, "scroll").subscribe(function () {
|
1203 | /** @type {?} */
|
1204 | var scrolledAmount = _this.document.body.scrollTop;
|
1205 | /** @type {?} */
|
1206 | var scrollToTop = scrolledAmount - _this.lastScroll < 0 &&
|
1207 | _this.document.body.scrollHeight - document.body.offsetHeight - scrolledAmount > 300;
|
1208 | // let scrollToTop = scrolledAmount - this.lastScroll < 0;
|
1209 | // let scrollToTop = scrolledAmount - this.lastScroll < 0;
|
1210 | _this.lastScroll = scrolledAmount;
|
1211 | if (!_this.config.visibility)
|
1212 | return;
|
1213 | if (scrolledAmount == 0) {
|
1214 | if (_this.config.mode == "comfortable")
|
1215 | return;
|
1216 | _this.store.dispatch(new ChangeToolbatToComfortableModeAction());
|
1217 | }
|
1218 | else if (scrolledAmount < 150 || scrollToTop) {
|
1219 | if (_this.config.mode == "compact")
|
1220 | return;
|
1221 | _this.store.dispatch(new ChangeToolbatToCompactModeAction());
|
1222 | }
|
1223 | else {
|
1224 | if (_this.config.mode == "summary")
|
1225 | return;
|
1226 | _this.store.dispatch(new ChangeToolbatToSummaryModeAction());
|
1227 | }
|
1228 | });
|
1229 | }
|
1230 | /**
|
1231 | * @return {?}
|
1232 | */
|
1233 | ToolbarMenuThemeBComponent.prototype.onWindowScroll = /**
|
1234 | * @return {?}
|
1235 | */
|
1236 | function () {
|
1237 | // of(1)
|
1238 | };
|
1239 | /**
|
1240 | * @return {?}
|
1241 | */
|
1242 | ToolbarMenuThemeBComponent.prototype.signout = /**
|
1243 | * @return {?}
|
1244 | */
|
1245 | function () {
|
1246 | this.store.dispatch(new DoSignoutAction$1());
|
1247 | };
|
1248 | /**
|
1249 | * @return {?}
|
1250 | */
|
1251 | ToolbarMenuThemeBComponent.prototype.goback = /**
|
1252 | * @return {?}
|
1253 | */
|
1254 | function () {
|
1255 | this._location.back();
|
1256 | };
|
1257 | /**
|
1258 | * @return {?}
|
1259 | */
|
1260 | ToolbarMenuThemeBComponent.prototype.toggleSecondSidebar = /**
|
1261 | * @return {?}
|
1262 | */
|
1263 | function () {
|
1264 | /** @type {?} */
|
1265 | var action;
|
1266 | this.showSecondSidenav.subscribe(function (state$$1) {
|
1267 | action = state$$1 ? new CloseSecondSidenavAction() : new OpenSecondSidenavAction();
|
1268 | });
|
1269 | this.store.dispatch(action);
|
1270 | };
|
1271 | /**
|
1272 | * @return {?}
|
1273 | */
|
1274 | ToolbarMenuThemeBComponent.prototype.toggleMainSidebar = /**
|
1275 | * @return {?}
|
1276 | */
|
1277 | function () {
|
1278 | /** @type {?} */
|
1279 | var action;
|
1280 | this.showMainSidenav.subscribe(function (state$$1) {
|
1281 | action = state$$1 ? new CloseSidenavAction() : new OpenSidenavAction();
|
1282 | });
|
1283 | this.store.dispatch(action);
|
1284 | };
|
1285 | /**
|
1286 | * @return {?}
|
1287 | */
|
1288 | ToolbarMenuThemeBComponent.prototype._observe_on_layout_config_and_filter_routes = /**
|
1289 | * @return {?}
|
1290 | */
|
1291 | function () {
|
1292 | this.menuItems$ = this.configurationService.config$.pipe(map(function (config) { return config.menuItems; }), combineLatest(this.user$), map(this.configurationService.config$.getValue().menu_item_authorization_operator));
|
1293 | };
|
1294 | ToolbarMenuThemeBComponent.decorators = [
|
1295 | { type: Component, args: [{
|
1296 | selector: "layout-toolbar-b",
|
1297 | template: "<mat-toolbar dir=\"rtl\" color=\"primary\" [@toolbarAnimation]=\"toolbarAnimationState\">\n <mat-toolbar-row dir=\"rtl\" id=\"firstToolbar\">\n <!-- <div id=\"background\"></div> -->\n <img [@logoAnimation]=\"logoAnimationState\" id=\"logo\" routerLink='/' src='assets/logos/logo-type.png' />\n\n <button type=\"button\" *ngIf='showSidebarMenu && false' (click)=\"toggleMainSidebar()\" mat-icon-button fxFlex=\"nogrow\"\n fxLayoutAlign=\"center center\">\n <mat-icon>menu</mat-icon>\n </button>\n <span [@titleAnimation]=\"titleAnimationState\" id='app-name'>\n {{app_config?.Config.AppTitle}}\n </span>\n <app-title fxFlex fxLayoutAlign=\"start center\"></app-title>\n <app-search-box fxFlex fxLayoutAlign=\"end center\"></app-search-box>\n\n\n <button *ngIf=\"!displayName\" mat-button routerLink=\"auth/signin\">\n <span [translate]=\"'__Signin'\"></span>\n </button>\n <button translate *ngIf=\"!displayName\" mat-button routerLink=\"auth/signup\">\n __Signup\n </button>\n <button *ngIf=\"displayName\" mat-icon-button [matMenuTriggerFor]=\"toolbarMenu1\">\n <mat-icon>account_circle</mat-icon>\n </button>\n <mat-menu #toolbarMenu1 class=\"rtl-dir\">\n <div id=\"acccountName\">\n {{displayName}}\n </div>\n <button routerLink='/user/panel' mat-menu-item class=\"rtl-dir\">\n <mat-icon>fingerprint</mat-icon>\n <span>\n \u0645\u062F\u06CC\u0631\u06CC\u062A \u06A9\u0627\u0631\u0628\u0631\u06CC\n </span>\n </button>\n <button (click)='signout()' mat-menu-item class=\"rtl-dir\">\n <mat-icon>exit_to_app</mat-icon>\n <span>\u062E\u0631\u0648\u062C</span>\n </button>\n </mat-menu>\n <button mat-icon-button type=\"button\" (click)=\"toggleSecondSidebar()\" fxFlex=\"nogrow\" fxLayoutAlign=\"center center\">\n <mat-icon>notifications</mat-icon>\n </button>\n <button mat-icon-button (click)='goback()'>\n <mat-icon>arrow_back</mat-icon>\n </button>\n\n </mat-toolbar-row>\n <mat-toolbar-row>\n <div id=\"secondToolbar\" [@menuAnimation]=\"menuAnimationState\">\n <router-outlet name=\"ngs-layout-before-toolbar-menu\"></router-outlet>\n <button mat-button *ngFor=\"let menu of menuItems$ | async\" routerLinkActive=\"active\" [routerLink]=\"[menu.route]\">\n <!-- <mat-icon mat-list-icon>{{menu.icon}}</mat-icon> -->\n <span>{{menu.title}}</span>\n </button>\n <router-outlet name=\"ngs-layout-after-toolbar-menu\"></router-outlet>\n </div>\n </mat-toolbar-row>\n</mat-toolbar>",
|
1298 | styles: ["#secondToolbar{transition:none;position:absolute}#secondToolbar button{opacity:.6;font-family:iran-sans-bold,sans-serif!important;font-size:.65em!important;height:50px!important;border-radius:0!important}#secondToolbar button.active{border-bottom:2px solid #ff7400;opacity:1}#logo{transition:none;position:absolute}#app-name{padding-right:8px;font-family:iran-sans-bold,sans-serif!important}button.rtl-dir{direction:rtl!important}#acccountName{display:block;text-align:right;padding-right:20px;font-size:14px;font-weight:bolder}"],
|
1299 | animations: [
|
1300 | trigger("logoAnimation", [
|
1301 | state("comfortable", style({
|
1302 | height: "48px",
|
1303 | top: "50px",
|
1304 | right: "calc(50% - 50px)"
|
1305 | })),
|
1306 | state("compact", style({
|
1307 | height: "36px",
|
1308 | top: "13px",
|
1309 | right: "13px"
|
1310 | })),
|
1311 | state("summary", style({
|
1312 | height: "36px",
|
1313 | top: "57px",
|
1314 | right: "10px"
|
1315 | })),
|
1316 | state("hide", style({
|
1317 | width: "0",
|
1318 | height: "0",
|
1319 | top: "57px",
|
1320 | right: "10px"
|
1321 | })),
|
1322 | transition("comfortable => compact", animate("800ms ease-out")),
|
1323 | transition("comfortable => hide", animate("800ms ease-in")),
|
1324 | transition("hide => comfortable", animate("800ms ease-in")),
|
1325 | transition("compact => hide", animate("800ms ease-in")),
|
1326 | transition("hide => compact", animate("800ms ease-in")),
|
1327 | transition("summary => hide", animate("800ms ease-in")),
|
1328 | transition("hide => summary", animate("800ms ease-in")),
|
1329 | // transition("comfortable => summary", animate("800ms ease-in")),
|
1330 | transition("summary => compact", animate("400ms ease-out")),
|
1331 | transition("summary => comfortable", animate("800ms ease-out")),
|
1332 | transition("compact => comfortable", animate("800ms ease-out")),
|
1333 | transition("compact => summary", animate("400ms ease-out"))
|
1334 | ]),
|
1335 | trigger("menuAnimation", [
|
1336 | state("comfortable", style({
|
1337 | right: "50%",
|
1338 | transform: "translateX(50%)",
|
1339 | bottom: "0"
|
1340 | })),
|
1341 | state("compact", style({
|
1342 | right: "50%",
|
1343 | transform: "translateX(50%)",
|
1344 | bottom: "0"
|
1345 | })),
|
1346 | state("summary", style({
|
1347 | right: "75px",
|
1348 | transform: "translateX(0)",
|
1349 | bottom: "0"
|
1350 | })),
|
1351 | state("hide", style({
|
1352 | right: "75px",
|
1353 | transform: "translateX(0)",
|
1354 | bottom: "0"
|
1355 | })),
|
1356 | transition("comfortable => compact", animate("800ms ease-in-out")),
|
1357 | transition("comfortable => hide", animate("400ms ease-in-out")),
|
1358 | transition("hide => comfortable", animate("600ms ease-in-out")),
|
1359 | transition("compact => hide", animate("400ms ease-in-out")),
|
1360 | transition("hide => compact", animate("600ms ease-in-out")),
|
1361 | transition("summary => hide", animate("400ms ease-in-out")),
|
1362 | transition("hide => summary", animate("600ms ease-in-out")),
|
1363 | // transition("comfortable => summary", animate("800ms ease-in")),
|
1364 | transition("summary => compact", animate("400ms ease-out")),
|
1365 | transition("summary => comfortable", animate("800ms ease-out")),
|
1366 | transition("compact => comfortable", animate("800ms ease-out")),
|
1367 | transition("compact => summary", animate("400ms ease-in-out"))
|
1368 | ]),
|
1369 | trigger("titleAnimation", [
|
1370 | state("comfortable", style({
|
1371 | "margin-right": "0px",
|
1372 | "font-size": "larger",
|
1373 | "font-weight": "bolder",
|
1374 | transform: "translateX(50%)",
|
1375 | right: "calc(50%)",
|
1376 | bottom: "75px",
|
1377 | position: "absolute",
|
1378 | padding: 0
|
1379 | })),
|
1380 | state("compact", style({
|
1381 | "margin-right": "0px",
|
1382 | "font-size": "16px",
|
1383 | "font-weight": "bolder",
|
1384 | right: "50%",
|
1385 | transform: "translateX(50%)",
|
1386 | bottom: "51px",
|
1387 | position: "absolute",
|
1388 | padding: 0
|
1389 | })),
|
1390 | state("summary", style({
|
1391 | "margin-right": "0px",
|
1392 | "font-size": "16px",
|
1393 | "font-weight": "bolder",
|
1394 | transform: "translateX(50%)",
|
1395 | right: "50%",
|
1396 | bottom: "79px",
|
1397 | position: "absolute",
|
1398 | padding: 0
|
1399 | })),
|
1400 | state("hide", style({
|
1401 | "margin-right": "0px",
|
1402 | "font-size": "1px",
|
1403 | "font-weight": "bolder",
|
1404 | // transform: "translateX(0)",
|
1405 | // right: "60px",
|
1406 | bottom: "79px",
|
1407 | position: "absolute",
|
1408 | padding: 0
|
1409 | })),
|
1410 | transition("comfortable => compact", animate("850ms ease-out")),
|
1411 | transition("comfortable => hide", animate("800ms ease-in")),
|
1412 | transition("hide => comfortable", animate("800ms ease-in")),
|
1413 | transition("compact => hide", animate("800ms ease-in")),
|
1414 | transition("hide => compact", animate("800ms ease-in")),
|
1415 | transition("summary => hide", animate("800ms ease-in")),
|
1416 | transition("hide => summary", animate("800ms ease-in")),
|
1417 | // transition("comfortable => summary", animate("800ms ease-in")),
|
1418 | transition("summary => compact", animate("400ms ease-out")),
|
1419 | transition("summary => comfortable", animate("800ms ease-out")),
|
1420 | transition("compact => comfortable", animate("800ms ease-out")),
|
1421 | transition("compact => summary", animate("400ms ease-in"))
|
1422 | ]),
|
1423 | trigger("toolbarAnimation", [
|
1424 | state("comfortable", style({
|
1425 | // backgroundColor: "rgba(119,181,63,1)",
|
1426 | backgroundColor: "rgba(256,256,256,1)",
|
1427 | color: "rgba(30,30,30,1)",
|
1428 | height: "33vh",
|
1429 | top: "0",
|
1430 | })),
|
1431 | state("compact", style({
|
1432 | // backgroundColor: "rgba(256,256,256,1)",
|
1433 | height: "100px",
|
1434 | top: "0",
|
1435 | })),
|
1436 | state("summary", style({
|
1437 | // backgroundColor: "rgba(256,256,256,1)",
|
1438 | height: "100px",
|
1439 | top: "-50px",
|
1440 | })),
|
1441 | state("hide", style({
|
1442 | // backgroundColor: "rgba(256,256,256,1)",
|
1443 | height: "100px",
|
1444 | top: "-100px",
|
1445 | })),
|
1446 | transition("comfortable => compact", animate("800ms ease-in")),
|
1447 | transition("comfortable => hide", animate("800ms ease-in")),
|
1448 | transition("hide => comfortable", animate("800ms ease-in")),
|
1449 | transition("compact => hide", animate("800ms ease-in")),
|
1450 | transition("hide => compact", animate("800ms ease-in")),
|
1451 | transition("summary => hide", animate("800ms ease-in")),
|
1452 | transition("hide => summary", animate("800ms ease-in")),
|
1453 | // transition("comfortable => summary", animate("800ms ease-in")),
|
1454 | transition("summary => compact", animate("400ms ease-out")),
|
1455 | transition("summary => comfortable", animate("800ms ease-out")),
|
1456 | transition("compact => comfortable", animate("800ms ease-out")),
|
1457 | transition("compact => summary", animate("400ms ease-in"))
|
1458 | ])
|
1459 | ]
|
1460 | },] },
|
1461 | ];
|
1462 | /** @nocollapse */
|
1463 | ToolbarMenuThemeBComponent.ctorParameters = function () { return [
|
1464 | { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
|
1465 | { type: Location },
|
1466 | { type: Store },
|
1467 | { type: TranslateService },
|
1468 | { type: LayoutConfigurationService }
|
1469 | ]; };
|
1470 | ToolbarMenuThemeBComponent.propDecorators = {
|
1471 | showSidebarMenu: [{ type: Input }],
|
1472 | app_config: [{ type: Input, args: ["app-config",] }],
|
1473 | user: [{ type: Input }],
|
1474 | displayName: [{ type: Input }],
|
1475 | onWindowScroll: [{ type: HostListener, args: ["body:scroll", [],] }]
|
1476 | };
|
1477 | return ToolbarMenuThemeBComponent;
|
1478 | }());
|
1479 |
|
1480 | /**
|
1481 | * @fileoverview added by tsickle
|
1482 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1483 | */
|
1484 | var NgsLayoutModule = /** @class */ (function () {
|
1485 | function NgsLayoutModule() {
|
1486 | }
|
1487 | /**
|
1488 | * @param {?=} config
|
1489 | * @return {?}
|
1490 | */
|
1491 | NgsLayoutModule.forRoot = /**
|
1492 | * @param {?=} config
|
1493 | * @return {?}
|
1494 | */
|
1495 | function (config) {
|
1496 | return {
|
1497 | ngModule: RootNgsLayoutModule,
|
1498 | providers: [
|
1499 | { provide: LOCALE_ID, useValue: 'en en-US' },
|
1500 | { provide: MODULE_CONFIG_TOKEN, useValue: config }
|
1501 | ]
|
1502 | };
|
1503 | };
|
1504 | NgsLayoutModule.decorators = [
|
1505 | { type: NgModule, args: [{
|
1506 | imports: [
|
1507 | CommonModule,
|
1508 | BrowserModule,
|
1509 | RouterModule,
|
1510 | FormsModule,
|
1511 | HttpClientModule,
|
1512 | FlexLayoutModule,
|
1513 | MatIconModule,
|
1514 | MatButtonModule,
|
1515 | MatCardModule,
|
1516 | MatSnackBarModule,
|
1517 | MatSidenavModule,
|
1518 | MatExpansionModule,
|
1519 | MatSelectModule,
|
1520 | MatFormFieldModule,
|
1521 | MatListModule,
|
1522 | MatMenuModule,
|
1523 | MatRadioModule,
|
1524 | MatInputModule,
|
1525 | MatToolbarModule,
|
1526 | MatDatepickerModule,
|
1527 | MatProgressBarModule,
|
1528 | RouterModule,
|
1529 | NgsConfigModule,
|
1530 | RuleModule
|
1531 | ],
|
1532 | declarations: [
|
1533 | MainMenuComponent,
|
1534 | SearchBoxComponent,
|
1535 | LogoContainerComponent,
|
1536 | ToolbarMenuComponent,
|
1537 | ToolbarMenuThemeBComponent,
|
1538 | FooterComponent,
|
1539 | TitleComponent,
|
1540 | NgsLayoutMainComponent
|
1541 | ],
|
1542 | exports: [
|
1543 | MainMenuComponent,
|
1544 | SearchBoxComponent,
|
1545 | LogoContainerComponent,
|
1546 | ToolbarMenuComponent,
|
1547 | ToolbarMenuThemeBComponent,
|
1548 | FooterComponent,
|
1549 | TitleComponent,
|
1550 | NgsLayoutMainComponent,
|
1551 | TranslateModule
|
1552 | ]
|
1553 | },] },
|
1554 | ];
|
1555 | return NgsLayoutModule;
|
1556 | }());
|
1557 | var RootNgsLayoutModule = /** @class */ (function () {
|
1558 | function RootNgsLayoutModule() {
|
1559 | }
|
1560 | RootNgsLayoutModule.decorators = [
|
1561 | { type: NgModule, args: [{
|
1562 | imports: [
|
1563 | NgsLayoutModule,
|
1564 | StoreModule.forFeature("layout", LayoutReducers),
|
1565 | EffectsModule.forFeature([LayoutEffects])
|
1566 | ],
|
1567 | exports: [NgsLayoutModule]
|
1568 | },] },
|
1569 | ];
|
1570 | return RootNgsLayoutModule;
|
1571 | }());
|
1572 |
|
1573 | /**
|
1574 | * @fileoverview added by tsickle
|
1575 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1576 | */
|
1577 |
|
1578 | /**
|
1579 | * @fileoverview added by tsickle
|
1580 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1581 | */
|
1582 | /** @enum {string} */
|
1583 | var LayoutOutlets = {
|
1584 | // TODO: remove in next major version : 6.0.45
|
1585 | ngs_layout_toolbar_menu: "ngs-layout-after-toolbar-menu",
|
1586 | ngs_layout_after_toolbar_menu: "ngs-layout-after-toolbar-menu",
|
1587 | ngs_layout_before_toolbar_menu: "ngs-layout-before-toolbar-menu",
|
1588 | footer_B: "footer_B",
|
1589 | footer_A: "footer_A",
|
1590 | };
|
1591 |
|
1592 | /**
|
1593 | * @fileoverview added by tsickle
|
1594 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1595 | */
|
1596 |
|
1597 | /**
|
1598 | * @fileoverview added by tsickle
|
1599 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
1600 | */
|
1601 |
|
1602 | export { LayoutActionTypes, TitleChangedAction, OpenSidenavAction, CloseSidenavAction, ChangeSideNavMode, ChangeLayout, CloseSecondSidenavAction, ChangeSecondSidenavMode, OpenSecondSidenavAction, ChangeToolbatToComfortableModeAction, ChangeToolbatToCompactModeAction, DisableComfortableModeAction, EnableComfortableModeAction, VisibleToolbarAction, FullscreenAction, ExitFullscreenAction, InvisibleToolbarAction, ToggleFullscreenAction, NgsLayoutMainComponent, LayoutOutlets, NgsLayoutModule, RootNgsLayoutModule, MODULE_DEFAULT_CONFIG, MODULE_CONFIG_TOKEN, FooterComponent as ɵh, LogoContainerComponent as ɵe, MainMenuComponent as ɵa, NgsLayoutMainComponent as ɵj, SearchBoxComponent as ɵd, TitleComponent as ɵi, ToolbarMenuThemeBComponent as ɵg, ToolbarMenuComponent as ɵf, LayoutEffects as ɵn, LayoutReducers as ɵk, Reducer as ɵl, Reducer$1 as ɵm, LayoutConfigurationService as ɵc };
|
1603 |
|
1604 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291c2hpYW5zLWxheW91dC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vQHNvdXNoaWFucy9sYXlvdXQvbGliL2FjdGlvbnMvbGF5b3V0LnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvcmVkdWNlcnMvbGF5b3V0LnJlZHVjZXIudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9hY3Rpb25zL3Rvb2xiYXIudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9yZWR1Y2Vycy90b29sYmFyLnJlZHVjZXIudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9yZWR1Y2Vycy9pbmRleC50cyIsIm5nOi8vQHNvdXNoaWFucy9sYXlvdXQvbGliL2xheW91dC5jb25maWcudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9zZXJ2aWNlcy9sYXlvdXQtY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvZHVtYi1jb21wb25lbnRzL21haW4tbWVudS9tYWluLW1lbnUuY29tcG9uZW50LnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvZHVtYi1jb21wb25lbnRzL3NlYXJjaC1ib3gvc2VhcmNoLWJveC5jb21wb25lbnQudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9kdW1iLWNvbXBvbmVudHMvbG9nby1jb250YWluZXIvbG9nby1jb250YWluZXIuY29tcG9uZW50LnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvZHVtYi1jb21wb25lbnRzL3Rvb2xiYXItbWVudS90b29sYmFyLW1lbnUuY29tcG9uZW50LnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvZHVtYi1jb21wb25lbnRzL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50LnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvZHVtYi1jb21wb25lbnRzL3RpdGxlL3RpdGxlLmNvbXBvbmVudC50cyIsIm5nOi8vQHNvdXNoaWFucy9sYXlvdXQvbGliL2R1bWItY29tcG9uZW50cy9tYWluL21haW4uY29tcG9uZW50LnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvbGF5b3V0LmVmZmVjdHMudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9kdW1iLWNvbXBvbmVudHMvdG9vbGJhci1tZW51LXRoZW1lLWIvdG9vbGJhci1tZW51LXRoZW1lLWIudHMiLCJuZzovL0Bzb3VzaGlhbnMvbGF5b3V0L2xpYi9sYXlvdXQubW9kdWxlLnRzIiwibmc6Ly9Ac291c2hpYW5zL2xheW91dC9saWIvbW9kZWxzL2xheW91dC1vdXRsZXRzLmVudW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IExheW91dE1vZHVsZUNvbmZpZ01vZGVsIH0gZnJvbSBcIi4uL2xheW91dC5jb25maWdcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBPUEVOX1NJREVOQVYgPSBcIltMYXlvdXRdIE9wZW4gU2lkZW5hdlwiO1xyXG5leHBvcnQgY29uc3QgQ0xPU0VfU0lERU5BViA9IFwiW0xheW91dF0gQ2xvc2UgU2lkZW5hdlwiO1xyXG5cclxuZXhwb3J0IGVudW0gTGF5b3V0QWN0aW9uVHlwZXMge1xyXG5cdFVQREFURV9MQVlPVVRfQ09ORklHID0gXCJbTGF5b3V0XSBVUERBVEVfTEFZT1VUX0NPTkZJR1wiLFxyXG5cdERPX1NJR05PVVQgPSBcIltMYXlvdXRdIGRvIHNpZ25vdXRcIixcclxuXHRUSVRMRV9DSEFOR0VEID0gXCJbTEFZT1VUXSBUSVRMRV9DSEFOR0VEXCIsXHJcblx0Q0hBTkdFX0xBWU9VVCA9IFwiW0xheW91dF0gQ2hhbmdlIExheW91dFwiLFxyXG5cdENIQU5HRV9NQUlOX1NJREVOQVZFX01PREUgPSBcIltMYXlvdXRdIENoYW5nZSBtYWluIHNpZGVuYXYgbW9kZVwiLFxyXG5cdE9QRU5fU0VDT05EX1NJREVCQVIgPSBcIltMYXlvdXRdIE9wZW4gU2Vjb25kIFNpZGViYXJcIixcclxuXHRDTE9TRV9TRUNPTkRfU0lERUJBUiA9IFwiW0xheW91dF0gQ2xvc2UgU2Vjb25kIFNpZGViYXJcIixcclxuXHRDSEFOR0VfU0VDT05EX1NJREVOQVZfTU9ERSA9IFwiW0xheW91dF0gQ2hhbmdlIHNlY29uZCBzaWRlbmF2IG1vZGVcIixcclxuXHRGVUxMU0NSRUVOID0gXCJbTGF5b3V0XSBGVUxMU0NSRUVOXCIsXHJcblx0RVhJVF9GVUxMU0NSRUVOID0gXCJbTGF5b3V0XSBFWElUX0ZVTExTQ1JFRU5cIixcclxuXHRUT0dHTEVfRlVMTFNDUkVFTiA9IFwiW0xheW91dF0gVE9HR0xFX0ZVTExTQ1JFRU5cIlxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXBkYXRlTGF5b3V0Q29uZmlnQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcclxuXHRyZWFkb25seSB0eXBlID0gTGF5b3V0QWN0aW9uVHlwZXMuVVBEQVRFX0xBWU9VVF9DT05GSUc7XHJcblx0Y29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IFBhcnRpYWw8TGF5b3V0TW9kdWxlQ29uZmlnTW9kZWw+KSB7fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBPcGVuU2lkZW5hdkFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IE9QRU5fU0lERU5BVjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENsb3NlU2lkZW5hdkFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IENMT1NFX1NJREVOQVY7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VMYXlvdXQgaW1wbGVtZW50cyBBY3Rpb24ge1xyXG5cdHJlYWRvbmx5IHR5cGUgPSBMYXlvdXRBY3Rpb25UeXBlcy5DSEFOR0VfTEFZT1VUO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBcIndpdGgtbWFyZ2luXCIgfCBcIndpdGhvdXQtbWFyZ2luXCIgfCBcImRlZmF1bHRcIikge31cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZVNpZGVOYXZNb2RlIGltcGxlbWVudHMgQWN0aW9uIHtcclxuXHRyZWFkb25seSB0eXBlID0gTGF5b3V0QWN0aW9uVHlwZXMuQ0hBTkdFX01BSU5fU0lERU5BVkVfTU9ERTtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgbW9kZTogXCJvdmVyXCIgfCBcInB1c2hcIiB8IFwic2lkZVwiKSB7fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBDaGFuZ2VTZWNvbmRTaWRlbmF2TW9kZSBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IExheW91dEFjdGlvblR5cGVzLkNIQU5HRV9TRUNPTkRfU0lERU5BVl9NT0RFO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBtb2RlOiBcIm92ZXJcIiB8IFwicHVzaFwiIHwgXCJzaWRlXCIpIHt9XHJcbn1cclxuZXhwb3J0IGNsYXNzIERvU2lnbm91dEFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IExheW91dEFjdGlvblR5cGVzLkRPX1NJR05PVVQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUaXRsZUNoYW5nZWRBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG5cdHJlYWRvbmx5IHR5cGUgPSBMYXlvdXRBY3Rpb25UeXBlcy5USVRMRV9DSEFOR0VEO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB0aXRsZTogc3RyaW5nKSB7fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBPcGVuU2Vjb25kU2lkZW5hdkFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IExheW91dEFjdGlvblR5cGVzLk9QRU5fU0VDT05EX1NJREVCQVI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDbG9zZVNlY29uZFNpZGVuYXZBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG5cdHJlYWRvbmx5IHR5cGUgPSBMYXlvdXRBY3Rpb25UeXBlcy5DTE9TRV9TRUNPTkRfU0lERUJBUjtcclxufVxyXG5leHBvcnQgY2xhc3MgRnVsbHNjcmVlbkFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IExheW91dEFjdGlvblR5cGVzLkZVTExTQ1JFRU47XHJcbn1cclxuZXhwb3J0IGNsYXNzIEV4aXRGdWxsc2NyZWVuQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcclxuXHRyZWFkb25seSB0eXBlID0gTGF5b3V0QWN0aW9uVHlwZXMuRVhJVF9GVUxMU0NSRUVOO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBUb2dnbGVGdWxsc2NyZWVuQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcclxuXHRyZWFkb25seSB0eXBlID0gTGF5b3V0QWN0aW9uVHlwZXMuVE9HR0xFX0ZVTExTQ1JFRU47XHJcbn1cclxuZXhwb3J0IHR5cGUgQWN0aW9ucyA9XHJcblx0fCBVcGRhdGVMYXlvdXRDb25maWdBY3Rpb25cclxuXHR8IE9wZW5TaWRlbmF2QWN0aW9uXHJcblx0fCBDbG9zZVNpZGVuYXZBY3Rpb25cclxuXHR8IENoYW5nZVNpZGVOYXZNb2RlXHJcblx0fCBDaGFuZ2VMYXlvdXRcclxuXHR8IERvU2lnbm91dEFjdGlvblxyXG5cdHwgVGl0bGVDaGFuZ2VkQWN0aW9uXHJcblx0fCBPcGVuU2Vjb25kU2lkZW5hdkFjdGlvblxyXG5cdHwgQ2xvc2VTZWNvbmRTaWRlbmF2QWN0aW9uXHJcblx0fCBGdWxsc2NyZWVuQWN0aW9uXHJcblx0fCBFeGl0RnVsbHNjcmVlbkFjdGlvblxyXG5cdHwgQ2hhbmdlU2Vjb25kU2lkZW5hdk1vZGVcclxuXHR8IFRvZ2dsZUZ1bGxzY3JlZW5BY3Rpb247XHJcbiIsImltcG9ydCAqIGFzIGxheW91dCBmcm9tIFwiLi4vYWN0aW9ucy9sYXlvdXRcIjtcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlIHtcclxuXHRzaG93TWFpblNpZGVuYXY/OiBib29sZWFuO1xyXG5cdHNob3dTZWNvbmRTaWRlTmF2PzogYm9vbGVhbjtcclxuXHRzZWNvbmRTaWRlTmF2TW9kZT86IFwib3ZlclwiIHwgXCJwdXNoXCIgfCBcInNpZGVcIjtcclxuXHRtYWluU2lkZU5hdk1vZGU/OiBcIm92ZXJcIiB8IFwicHVzaFwiIHwgXCJzaWRlXCI7XHJcblx0bWVudUl0ZW1zPzoge1xyXG5cdFx0cm91dGU6IHN0cmluZztcclxuXHRcdGljb246IHN0cmluZztcclxuXHRcdHJvbGVzOiBzdHJpbmdbXTtcclxuXHRcdHRpdGxlOiBzdHJpbmc7XHJcblx0fVtdO1xyXG5cdHNob3dMZWZ0TmF2QmFyPzogYm9vbGVhbjtcclxuXHRzdGlja3lMZWZ0TmF2QmFyPzogYm9vbGVhbjtcclxuXHRsYXlvdXRNb2RlPzogXCJ3aXRoLW1hcmdpblwiIHwgXCJ3aXRob3V0LW1hcmdpblwiIHwgXCJkZWZhdWx0XCI7XHJcblx0dGl0bGU/OiBzdHJpbmc7XHJcblx0c2lnbm91dEFjdGlvbjogQWN0aW9uO1xyXG5cdGZ1bGxzY3JlZW46IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IGluaXRpYWxTdGF0ZTogU3RhdGUgPSB7XHJcblx0c2hvd01haW5TaWRlbmF2OiBmYWxzZSxcclxuXHRzaG93U2Vjb25kU2lkZU5hdjogZmFsc2UsXHJcblx0c2Vjb25kU2lkZU5hdk1vZGU6IFwib3ZlclwiLFxyXG5cdG1haW5TaWRlTmF2TW9kZTogXCJvdmVyXCIsXHJcblx0c2hvd0xlZnROYXZCYXI6IGZhbHNlLFxyXG5cdHN0aWNreUxlZnROYXZCYXI6IGZhbHNlLFxyXG5cdGxheW91dE1vZGU6IFwiZGVmYXVsdFwiLFxyXG5cdHRpdGxlOiBcIlwiLFxyXG5cdG1lbnVJdGVtczogW10sXHJcblx0c2lnbm91dEFjdGlvbjoge30gYXMgQWN0aW9uLFxyXG5cdGZ1bGxzY3JlZW46IGZhbHNlXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUmVkdWNlcihzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uOiBsYXlvdXQuQWN0aW9ucyk6IFN0YXRlIHtcclxuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XHJcblx0XHRjYXNlIGxheW91dC5MYXlvdXRBY3Rpb25UeXBlcy5VUERBVEVfTEFZT1VUX0NPTkZJRzpcclxuXHRcdFx0Y29uc3QgX3N0YXRlID0ge307XHJcblx0XHRcdE9iamVjdC5rZXlzKGFjdGlvbi5wYXlsb2FkKS5mb3JFYWNoKGsgPT4ge1xyXG5cdFx0XHRcdGlmIChrIGluIHN0YXRlKSBfc3RhdGVba10gPSBhY3Rpb24ucGF5bG9hZFtrXTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0Li4uX3N0YXRlXHJcblx0XHRcdH07XHJcblx0XHRjYXNlIGxheW91dC5DTE9TRV9TSURFTkFWOlxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdHNob3dNYWluU2lkZW5hdjogZmFsc2VcclxuXHRcdFx0fTtcclxuXHJcblx0XHRjYXNlIGxheW91dC5PUEVOX1NJREVOQVY6XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0c2hvd01haW5TaWRlbmF2OiB0cnVlXHJcblx0XHRcdH07XHJcblxyXG5cdFx0Y2FzZSBsYXlvdXQuTGF5b3V0QWN0aW9uVHlwZXMuVElUTEVfQ0hBTkdFRDpcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi5zdGF0ZSxcclxuXHRcdFx0XHR0aXRsZTogYWN0aW9uLnRpdGxlXHJcblx0XHRcdH07XHJcblx0XHRjYXNlIGxheW91dC5MYXlvdXRBY3Rpb25UeXBlcy5DSEFOR0VfTEFZT1VUOlxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdGxheW91dE1vZGU6IGFjdGlvbi5uYW1lXHJcblx0XHRcdH07XHJcblxyXG5cdFx0Y2FzZSBsYXlvdXQuTGF5b3V0QWN0aW9uVHlwZXMuQ0hBTkdFX01BSU5fU0lERU5BVkVfTU9ERTpcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi5zdGF0ZSxcclxuXHRcdFx0XHRtYWluU2lkZU5hdk1vZGU6IGFjdGlvbi5tb2RlXHJcblx0XHRcdH07XHJcblxyXG5cdFx0Y2FzZSBsYXlvdXQuTGF5b3V0QWN0aW9uVHlwZXMuQ0xPU0VfU0VDT05EX1NJREVCQVI6XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0c2hvd1NlY29uZFNpZGVOYXY6IGZhbHNlXHJcblx0XHRcdH07XHJcblxyXG5cdFx0Y2FzZSBsYXlvdXQuTGF5b3V0QWN0aW9uVHlwZXMuT1BFTl9TRUNPTkRfU0lERUJBUjpcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi5zdGF0ZSxcclxuXHRcdFx0XHRzaG93U2Vjb25kU2lkZU5hdjogdHJ1ZVxyXG5cdFx0XHR9O1xyXG5cdFx0Y2FzZSBsYXlvdXQuTGF5b3V0QWN0aW9uVHlwZXMuQ0hBTkdFX1NFQ09ORF9TSURFTkFWX01PREU6XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0c2Vjb25kU2lkZU5hdk1vZGU6IGFjdGlvbi5tb2RlXHJcblx0XHRcdH07XHJcblx0XHRjYXNlIGxheW91dC5MYXlvdXRBY3Rpb25UeXBlcy5GVUxMU0NSRUVOOlxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdGZ1bGxzY3JlZW46IHRydWVcclxuXHRcdFx0fTtcclxuXHRcdGNhc2UgbGF5b3V0LkxheW91dEFjdGlvblR5cGVzLkVYSVRfRlVMTFNDUkVFTjpcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi5zdGF0ZSxcclxuXHRcdFx0XHRmdWxsc2NyZWVuOiBmYWxzZVxyXG5cdFx0XHR9O1xyXG5cdFx0Ly8gY2FzZSBsYXlvdXQuTGF5b3V0QWN0aW9uVHlwZXMuVE9HR0xFX0ZVTExTQ1JFRU46XHJcblx0XHQvLyBcdHJldHVybiB7XHJcblx0XHQvLyBcdFx0Li4uc3RhdGUsXHJcblx0XHQvLyBcdFx0ZnVsbHNjcmVlbjogc3RhdGUuZnVsbHNjcmVlbiA9PT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZVxyXG5cdFx0Ly8gXHR9O1xyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0cmV0dXJuIHN0YXRlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdldFNob3dTaWRlbmF2ID0gKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUuc2hvd01haW5TaWRlbmF2O1xyXG5leHBvcnQgY29uc3QgZ2V0VGl0bGUgPSAoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS50aXRsZTtcclxuZXhwb3J0IGNvbnN0IGdldFNob3dNYWluU2lkZW5hdiA9IChzdGF0ZTogU3RhdGUpID0+IHN0YXRlLnNob3dNYWluU2lkZW5hdjtcclxuZXhwb3J0IGNvbnN0IGdldE1haW5TaWRlTmF2TW9kZSA9IChzdGF0ZTogU3RhdGUpID0+IHN0YXRlLm1haW5TaWRlTmF2TW9kZTtcclxuZXhwb3J0IGNvbnN0IGdldExheW91dE1vZGUgPSAoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5sYXlvdXRNb2RlO1xyXG5leHBvcnQgY29uc3QgZ2V0U2hvd1NlY29uZFNpZGViYXJTdGF0dXMgPSAoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5zaG93U2Vjb25kU2lkZU5hdjtcclxuZXhwb3J0IGNvbnN0IGdldFNlY29uZFNpZGViYXJNb2RlID0gKHN0YXRlOiBTdGF0ZSkgPT4gc3RhdGUuc2Vjb25kU2lkZU5hdk1vZGU7XHJcbmV4cG9ydCBjb25zdCBnZXRGdWxsc2NyZWVuTW9kZSA9IChzdGF0ZTogU3RhdGUpID0+IHN0YXRlLmZ1bGxzY3JlZW47XHJcbiIsImltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xyXG5cclxuZXhwb3J0IGVudW0gVG9vbGJhckFjdGlvblR5cGVzIHtcclxuXHRDT01QT1JUQUJMRSA9IFwiW0xheW91dF1bVE9PTEJBUl0gQ09NUE9SVEFCTEVcIixcclxuXHRDT01QQUNUID0gXCJbTGF5b3V0XVtUT09MQkFSXSBDT01QQUNUXCIsXHJcblx0U1VNTUFSWSA9IFwiW0xheW91dF1bVE9PTEJBUl0gU1VNTUFSWVwiLFxyXG5cdEVOQUJMRV9DT01GT1JUQUJMRV9NT0RFID0gXCJbTGF5b3V0XVtUT09MQkFSXSBFTkFCTEVfQ09NRk9SVEFCTEVfTU9ERVwiLFxyXG5cdERJU0JBTEVfQ09NRk9SVEFCTEVfTU9ERSA9IFwiW0xheW91dF1bVE9PTEJBUl0gRElTQkFMRV9DT01GT1JUQUJMRV9NT0RFXCIsXHJcblx0VklTSUJMRSA9IFwiW0xheW91dF1bVE9PTEJBUl0gVklTSUJMRVwiLFxyXG5cdElOVklTSUJMRSA9IFwiW0xheW91dF1bVE9PTEJBUl0gSU5WSVNJQkxFXCJcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENoYW5nZVRvb2xiYXRUb0NvbWZvcnRhYmxlTW9kZUFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IFRvb2xiYXJBY3Rpb25UeXBlcy5DT01QT1JUQUJMRTtcclxufVxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlVG9vbGJhdFRvQ29tcGFjdE1vZGVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG5cdHJlYWRvbmx5IHR5cGUgPSBUb29sYmFyQWN0aW9uVHlwZXMuQ09NUEFDVDtcclxufVxyXG5leHBvcnQgY2xhc3MgQ2hhbmdlVG9vbGJhdFRvU3VtbWFyeU1vZGVBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG5cdHJlYWRvbmx5IHR5cGUgPSBUb29sYmFyQWN0aW9uVHlwZXMuU1VNTUFSWTtcclxufVxyXG5leHBvcnQgY2xhc3MgRW5hYmxlQ29tZm9ydGFibGVNb2RlQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcclxuXHRyZWFkb25seSB0eXBlID0gVG9vbGJhckFjdGlvblR5cGVzLkVOQUJMRV9DT01GT1JUQUJMRV9NT0RFO1xyXG59XHJcbmV4cG9ydCBjbGFzcyBEaXNhYmxlQ29tZm9ydGFibGVNb2RlQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcclxuXHRyZWFkb25seSB0eXBlID0gVG9vbGJhckFjdGlvblR5cGVzLkRJU0JBTEVfQ09NRk9SVEFCTEVfTU9ERTtcclxufVxyXG5leHBvcnQgY2xhc3MgVmlzaWJsZVRvb2xiYXJBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xyXG5cdHJlYWRvbmx5IHR5cGUgPSBUb29sYmFyQWN0aW9uVHlwZXMuVklTSUJMRTtcclxufVxyXG5leHBvcnQgY2xhc3MgSW52aXNpYmxlVG9vbGJhckFjdGlvbiBpbXBsZW1lbnRzIEFjdGlvbiB7XHJcblx0cmVhZG9ubHkgdHlwZSA9IFRvb2xiYXJBY3Rpb25UeXBlcy5JTlZJU0lCTEU7XHJcbn1cclxuZXhwb3J0IHR5cGUgVG9vbGJhckFjdGlvbnMgPVxyXG5cdHwgQ2hhbmdlVG9vbGJhdFRvQ29tZm9ydGFibGVNb2RlQWN0aW9uXHJcblx0fCBDaGFuZ2VUb29sYmF0VG9Db21wYWN0TW9kZUFjdGlvblxyXG5cdHwgQ2hhbmdlVG9vbGJhdFRvU3VtbWFyeU1vZGVBY3Rpb25cclxuXHR8IEVuYWJsZUNvbWZvcnRhYmxlTW9kZUFjdGlvblxyXG5cdHwgRGlzYWJsZUNvbWZvcnRhYmxlTW9kZUFjdGlvblxyXG5cdHwgVmlzaWJsZVRvb2xiYXJBY3Rpb25cclxuXHR8IEludmlzaWJsZVRvb2xiYXJBY3Rpb247XHJcbiIsImltcG9ydCB7IFRvb2xiYXJBY3Rpb25UeXBlcywgVG9vbGJhckFjdGlvbnMgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTdGF0ZSB7XHJcblx0bW9kZTogXCJjb21mb3J0YWJsZVwiIHwgXCJjb21wYWN0XCIgfCBcInN1bW1hcnlcIiB8IFwiaGlkZVwiO1xyXG5cdGVuYWJsZUNvbWZvcnRhYmxlTW9kZTogYm9vbGVhbjtcclxuXHRjb21mb3J0YWJsZU1vZGVIYXZlQmVlbkRvbmU6IGJvb2xlYW47XHJcblx0dmlzaWJpbGl0eTogYm9vbGVhbjtcclxufVxyXG5cclxuY29uc3QgaW5pdGlhbFN0YXRlOiBTdGF0ZSA9IHtcclxuXHRtb2RlOiBcImNvbXBhY3RcIixcclxuXHRlbmFibGVDb21mb3J0YWJsZU1vZGU6IGZhbHNlLFxyXG5cdGNvbWZvcnRhYmxlTW9kZUhhdmVCZWVuRG9uZTogZmFsc2UsXHJcblx0dmlzaWJpbGl0eTogdHJ1ZVxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFJlZHVjZXIoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogVG9vbGJhckFjdGlvbnMpOiBTdGF0ZSB7XHJcblx0c3dpdGNoIChhY3Rpb24udHlwZSkge1xyXG5cdFx0Y2FzZSBUb29sYmFyQWN0aW9uVHlwZXMuQ09NUEFDVDpcclxuXHRcdFx0aWYgKCFzdGF0ZS52aXNpYmlsaXR5KVxyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHQuLi5zdGF0ZSxcclxuXHRcdFx0XHRcdG1vZGU6IFwiaGlkZVwiXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHQuLi5zdGF0ZSxcclxuXHRcdFx0XHRtb2RlOiBcImNvbXBhY3RcIlxyXG5cdFx0XHR9O1xyXG5cdFx0Y2FzZSBUb29sYmFyQWN0aW9uVHlwZXMuQ09NUE9SVEFCTEU6XHJcblx0XHRcdGlmICghc3RhdGUudmlzaWJpbGl0eSlcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0XHRtb2RlOiBcImhpZGVcIlxyXG5cdFx0XHRcdH07XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0bW9kZTogc3RhdGUuZW5hYmxlQ29tZm9ydGFibGVNb2RlID8gXCJjb21mb3J0YWJsZVwiIDogXCJjb21wYWN0XCJcclxuXHRcdFx0fTtcclxuXHRcdGNhc2UgVG9vbGJhckFjdGlvblR5cGVzLlNVTU1BUlk6XHJcblx0XHRcdGlmICghc3RhdGUudmlzaWJpbGl0eSlcclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0XHRtb2RlOiBcImhpZGVcIlxyXG5cdFx0XHRcdH07XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0bW9kZTogXCJzdW1tYXJ5XCJcclxuXHRcdFx0fTtcclxuXHRcdGNhc2UgVG9vbGJhckFjdGlvblR5cGVzLkVOQUJMRV9DT01GT1JUQUJMRV9NT0RFOlxyXG5cdFx0XHRpZiAoIXN0YXRlLnZpc2liaWxpdHkpXHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdFx0bW9kZTogXCJoaWRlXCJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdGVuYWJsZUNvbWZvcnRhYmxlTW9kZTogdHJ1ZVxyXG5cdFx0XHR9O1xyXG5cdFx0Y2FzZSBUb29sYmFyQWN0aW9uVHlwZXMuRElTQkFMRV9DT01GT1JUQUJMRV9NT0RFOlxyXG5cdFx0XHRpZiAoIXN0YXRlLnZpc2liaWxpdHkpXHJcblx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdFx0bW9kZTogXCJoaWRlXCJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdG1vZGU6IFwiY29tcGFjdFwiLFxyXG5cdFx0XHRcdGVuYWJsZUNvbWZvcnRhYmxlTW9kZTogZmFsc2VcclxuXHRcdFx0fTtcclxuXHRcdGNhc2UgVG9vbGJhckFjdGlvblR5cGVzLlZJU0lCTEU6XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0Li4uc3RhdGUsXHJcblx0XHRcdFx0bW9kZTogXCJjb21wYWN0XCIsXHJcblx0XHRcdFx0dmlzaWJpbGl0eTogdHJ1ZVxyXG5cdFx0XHR9O1xyXG5cdFx0Y2FzZSBUb29sYmFyQWN0aW9uVHlwZXMuSU5WSVNJQkxFOlxyXG5cdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdC4uLnN0YXRlLFxyXG5cdFx0XHRcdG1vZGU6IFwiaGlkZVwiLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6IGZhbHNlXHJcblx0XHRcdH07XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHRyZXR1cm4gc3RhdGU7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0VG9vbGJhck1vZGUgPSAoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZS5tb2RlO1xyXG4iLCJpbXBvcnQgeyBjcmVhdGVTZWxlY3RvciwgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBNZW1vaXplZFNlbGVjdG9yIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcblxyXG5pbXBvcnQgKiBhcyBsYXlvdXQgZnJvbSBcIi4vbGF5b3V0LnJlZHVjZXJcIjtcclxuaW1wb3J0ICogYXMgZnJvbVRvb2xiYXIgZnJvbSBcIi4vdG9vbGJhci5yZWR1Y2VyXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExheW91dFN0YXRlIHtcclxuXHRsYXlvdXQ6IGxheW91dC5TdGF0ZTtcclxuXHR0b29sYmFyOiBmcm9tVG9vbGJhci5TdGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IExheW91dFJlZHVjZXJzID0ge1xyXG5cdGxheW91dDogbGF5b3V0LlJlZHVjZXIsXHJcblx0dG9vbGJhcjogZnJvbVRvb2xiYXIuUmVkdWNlclxyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVTdGF0ZSB7XHJcblx0bGF5b3V0OiBMYXlvdXRTdGF0ZTtcclxuXHR0b29sYmFyOiBmcm9tVG9vbGJhci5TdGF0ZTtcclxufVxyXG5cclxuLy8jcmVnaW9uIHNlbGVjdG9yc1xyXG5cclxuZXhwb3J0IGNvbnN0IHNlbGVjdExheW91dFN0YXRlID0gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPExheW91dFN0YXRlPihcImxheW91dFwiKTtcclxuXHJcbi8vI2VuZHJlZ2lvblxyXG5cclxuZXhwb3J0IGNvbnN0IGdldExheW91dCA9IGNyZWF0ZVNlbGVjdG9yKHNlbGVjdExheW91dFN0YXRlLCAoc3RhdGU6IExheW91dFN0YXRlKSA9PiBzdGF0ZS5sYXlvdXQpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFRpdGxlID0gY3JlYXRlU2VsZWN0b3IoZ2V0TGF5b3V0LCBsYXlvdXQuZ2V0VGl0bGUpO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdldFNob3dNYWluU2lkZW5hdiA9IGNyZWF0ZVNlbGVjdG9yKGdldExheW91dCwgbGF5b3V0LmdldFNob3dNYWluU2lkZW5hdik7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0TWFpblNpZGVOYXZNb2RlID0gY3JlYXRlU2VsZWN0b3IoZ2V0TGF5b3V0LCBsYXlvdXQuZ2V0TWFpblNpZGVOYXZNb2RlKTtcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRMYXlvdXRNb2RlID0gY3JlYXRlU2VsZWN0b3IoZ2V0TGF5b3V0LCBsYXlvdXQuZ2V0TGF5b3V0TW9kZSk7XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0U2hvd1NlY29uZFNpZGViYXJTdGF0dXMgPSBjcmVhdGVTZWxlY3RvcihnZXRMYXlvdXQsIGxheW91dC5nZXRTaG93U2Vjb25kU2lkZWJhclN0YXR1cyk7XHJcbmV4cG9ydCBjb25zdCBnZXRTZWNvbmRTaWRlYmFyTW9kZSA9IGNyZWF0ZVNlbGVjdG9yKGdldExheW91dCwgbGF5b3V0LmdldFNlY29uZFNpZGViYXJNb2RlKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bGxzY3JlZW5Nb2RlID0gY3JlYXRlU2VsZWN0b3IoZ2V0TGF5b3V0LCBsYXlvdXQuZ2V0RnVsbHNjcmVlbk1vZGUpO1xyXG5cclxuLy8jcmVnaW9uIHRvb2xiYXJcclxuXHJcbmV4cG9ydCBjb25zdCBnZXRMYXlvdXRUb29sYmFyID0gY3JlYXRlU2VsZWN0b3Ioc2VsZWN0TGF5b3V0U3RhdGUsIChzdGF0ZTogTGF5b3V0U3RhdGUpID0+IHN0YXRlLnRvb2xiYXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0TGF5b3V0VG9vbGJhck1vZGUgPSBjcmVhdGVTZWxlY3RvcihnZXRMYXlvdXRUb29sYmFyLCBmcm9tVG9vbGJhci5nZXRUb29sYmFyTW9kZSk7XHJcblxyXG4vLyNlbmRyZWdpb25cclxuIiwiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExheW91dE1vZHVsZUNvbmZpZ01vZGVsIHtcclxuXHRzaG93TWFpblNpZGVuYXY/OiBib29sZWFuO1xyXG5cdHNob3dTZWNvbmRTaWRlTmF2PzogYm9vbGVhbjtcclxuXHRzZWNvbmRTaWRlTmF2TW9kZT86IFwib3ZlclwiIHwgXCJwdXNoXCIgfCBcInNpZGVcIjtcclxuXHRtYWluU2lkZU5hdk1vZGU/OiBcIm92ZXJcIiB8IFwicHVzaFwiIHwgXCJzaWRlXCI7XHJcblx0bWVudUl0ZW1zPzoge1xyXG5cdFx0cm91dGU6IHN0cmluZztcclxuXHRcdGljb246IHN0cmluZztcclxuXHRcdHJvbGVzOiBzdHJpbmdbXTtcclxuXHRcdHRpdGxlOiBzdHJpbmc7XHJcblx0fVtdO1xyXG5cdHNob3dMZWZ0TmF2QmFyPzogYm9vbGVhbjtcclxuXHRzdGlja3lMZWZ0TmF2QmFyPzogYm9vbGVhbjtcclxuXHRsYXlvdXRNb2RlPzogXCJ3aXRoLW1hcmdpblwiIHwgXCJ3aXRob3V0LW1hcmdpblwiIHwgXCJkZWZhdWx0XCI7XHJcblx0dGl0bGU/OiBzdHJpbmc7XHJcblx0c2lnbm91dEFjdGlvbj86IEFjdGlvbjtcclxuXHRtZW51X2l0ZW1fYXV0aG9yaXphdGlvbl9vcGVyYXRvcj86IChbcm91dGVzLCB1c2VyXTogW2FueSwgYW55XSkgPT4gYW55W107XHJcblx0dGhlbWU/OiBzdHJpbmc7IC8vIFwidGhlbWVfQVwiIHwgXCJ0aGVtZV9CXCI7XHJcbn1cclxuXHJcbmNvbnN0IG1lbnVfaXRlbV9hdXRob3JpemF0aW9uX29wZXJhdG9yID0gZnVuY3Rpb24gKFtyb3V0ZXMsIHVzZXJdKSB7XHJcblx0aWYgKCF1c2VyLlJvbGVzKSByZXR1cm4gW107XHJcblx0aWYgKHVzZXIuUm9sZXMubGVuZ3RoID09IDApIHtcclxuXHRcdHJldHVybiBbXTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0cmV0dXJuIHJvdXRlcy5maWx0ZXIocm91dGUgPT4gdXNlci5Sb2xlcy5zb21lKHVzZXJSb2xlID0+IHJvdXRlLnJvbGVzLmluZGV4T2YodXNlclJvbGUpID4gLTEpKTtcclxuXHR9XHJcbn07XHJcbmV4cG9ydCBjb25zdCBNT0RVTEVfREVGQVVMVF9DT05GSUc6IExheW91dE1vZHVsZUNvbmZpZ01vZGVsID0ge1xyXG5cdHRoZW1lOiBcInRoZW1lX0JcIixcclxuXHRzaG93TWFpblNpZGVuYXY6IGZhbHNlLFxyXG5cdHNob3dTZWNvbmRTaWRlTmF2OiB0cnVlLFxyXG5cdHNlY29uZFNpZGVOYXZNb2RlOiBcIm92ZXJcIiwgLy8gfCBcInB1c2hcIiB8IFwic2lkZVwiLFxyXG5cdG1haW5TaWRlTmF2TW9kZTogXCJvdmVyXCIsIC8vIHwgXCJwdXNoXCIgfCBcInNpZGVcIixcclxuXHRzaG93TGVmdE5hdkJhcjogZmFsc2UsXHJcblx0c3RpY2t5TGVmdE5hdkJhcjogZmFsc2UsXHJcblx0bGF5b3V0TW9kZTogXCJ3aXRoLW1hcmdpblwiLCAvLyB8IFwid2l0aG91dC1tYXJnaW5cIiB8IFwiZGVmYXVsdFwiLFxyXG5cdHRpdGxlOiBcIlwiLFxyXG5cdG1lbnVJdGVtczogW1xyXG5cdFx0e1xyXG5cdFx0XHRyb3V0ZTogXCIvXCIsXHJcblx0XHRcdGljb246IFwibXVsdGlsaW5lX2NoYXJ0XCIsXHJcblx0XHRcdHJvbGVzOiBbXCJBZG1pblwiLCBcIlVzZXJcIl0sXHJcblx0XHRcdHRpdGxlOiBcIsOYwrXDmcKBw5jCrcOZwocgw5jCp8OYwrXDmcKEw5vCjFwiXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRyb3V0ZTogXCIvY29uZmlnc1wiLFxyXG5cdFx0XHRpY29uOiBcInNldHRpbmdzXCIsXHJcblx0XHRcdHJvbGVzOiBbXCJBZG1pblwiXSxcclxuXHRcdFx0dGl0bGU6IFwiw5jCqsOZwobDmMK4w5vCjMOZwoXDmMKnw5jCqlwiXHJcblx0XHR9LFxyXG5cdFx0e1xyXG5cdFx0XHRyb3V0ZTogXCIvc291cmNlXCIsXHJcblx0XHRcdGljb246IFwiZGV2aWNlX2h1YlwiLFxyXG5cdFx0XHRyb2xlczogW1wiQWRtaW5cIl0sXHJcblx0XHRcdHRpdGxlOiBcIsOYwqLDmMKvw5jCscOYwrMgw5jCs8OYwrHDmcKIw5vCjMOYwrMgw5nCh8OYwqdcIlxyXG5cdFx0fVxyXG5cdF0sXHJcblx0c2lnbm91dEFjdGlvbjoge30gYXMgQWN0aW9uLFxyXG5cdG1lbnVfaXRlbV9hdXRob3JpemF0aW9uX29wZXJhdG9yXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgTU9EVUxFX0NPTkZJR19UT0tFTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxMYXlvdXRNb2R1bGVDb25maWdNb2RlbD4oXCJMYXlvdXRNb2R1bGVDb25maWdNb2RlbFwiKTtcclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3RvcmUgfSBmcm9tIFwiQG5ncngvc3RvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anMvQmVoYXZpb3JTdWJqZWN0XCI7XHJcblxyXG5pbXBvcnQgeyBnZXRDb25maWdzIH0gZnJvbSBcIkBzb3VzaGlhbnMvY29uZmlnXCI7XHJcblxyXG5pbXBvcnQgeyBNT0RVTEVfQ09ORklHX1RPS0VOLCBNT0RVTEVfREVGQVVMVF9DT05GSUcgfSBmcm9tIFwiLi4vbGF5b3V0LmNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBVcGRhdGVMYXlvdXRDb25maWdBY3Rpb24gfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBMYXlvdXRNb2R1bGVDb25maWdNb2RlbCB9IGZyb20gXCIuLi9sYXlvdXQuY29uZmlnXCI7XHJcbmltcG9ydCB7IEZlYXR1cmVTdGF0ZSB9IGZyb20gXCIuLi9yZWR1Y2Vyc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG5cdHByb3ZpZGVkSW46IFwicm9vdFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRDb25maWd1cmF0aW9uU2VydmljZSB7XHJcblx0Ly8gcHJpdmF0ZSBfY29uZmlnOiBMYXlvdXRDb25maWdNb2RlbDtcclxuXHRwcml2YXRlIF9jb25maWc6IExheW91dE1vZHVsZUNvbmZpZ01vZGVsO1xyXG5cdGdldCBjb25maWcoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29uZmlnO1xyXG5cdH1cclxuXHRjb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMYXlvdXRNb2R1bGVDb25maWdNb2RlbD4odGhpcy5fY29uZmlnKTtcclxuXHJcblx0Y29uc3RydWN0b3IoQEluamVjdChNT0RVTEVfQ09ORklHX1RPS0VOKSBjb25maWdGaWxlLCBwcml2YXRlIHN0b3JlOiBTdG9yZTxGZWF0dXJlU3RhdGU+KSB7XHJcblx0XHR0aGlzLl9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBNT0RVTEVfREVGQVVMVF9DT05GSUcsIGNvbmZpZ0ZpbGUpO1xyXG5cdFx0dGhpcy5jb25maWckLm5leHQodGhpcy5fY29uZmlnKTtcclxuXHRcdHRoaXMuc3RvcmVcclxuXHRcdFx0LnNlbGVjdChnZXRDb25maWdzKVxyXG5cdFx0XHQubWFwKGNvbmZpZ3MgPT4gY29uZmlncy5maW5kKGNvbmZpZyA9PiBjb25maWcuTmFtZSA9PSBcImxheW91dF9jb25maWdcIikpXHJcblx0XHRcdC5zdWJzY3JpYmUoY29uZmlnID0+IHtcclxuXHRcdFx0XHRpZiAoIWNvbmZpZykgcmV0dXJuO1xyXG5cdFx0XHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVwZGF0ZUxheW91dENvbmZpZ0FjdGlvbihjb25maWcuQ29uZmlnKSk7XHJcblx0XHRcdFx0dGhpcy5fY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY29uZmlnLCBjb25maWcuQ29uZmlnKTtcclxuXHRcdFx0XHR0aGlzLmNvbmZpZyQubmV4dCh0aGlzLl9jb25maWcpO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqcy9PYnNlcnZhYmxlXCI7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5pbXBvcnQgeyByZXNwb25zZVN0YXR1c1R5cGVzIH0gZnJvbSBcIkBzb3VzaGlhbnMvc2hhcmVkXCI7XHJcbmltcG9ydCB7IFNpZ25pblNlcnZpY2UgfSBmcm9tIFwiQHNvdXNoaWFucy9hdXRoZW50aWNhdGlvblwiO1xyXG5cclxuaW1wb3J0IHsgRmVhdHVyZVN0YXRlIH0gZnJvbSBcIi4uLy4uL3JlZHVjZXJzXCI7XHJcbmltcG9ydCB7IExheW91dENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2xheW91dC1jb25maWd1cmF0aW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgbWFwLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IGdldEFjY291bnRJbmZvLCBVc2VyTW9kZWwgfSBmcm9tIFwiQHNvdXNoaWFucy91c2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJuZ3MtbGF5b3V0LW1haW4tbWVudVwiLFxyXG5cdHRlbXBsYXRlOiBgPG1hdC1saXN0IGNsYXNzPVwibWFpbi1tZW51LWNvbnRhaW5lclwiPlxyXG4gIDxkaXYgKm5nSWY9XCJhdXRoZW50aWNhdGVkIHwgYXN5bmNcIj5cclxuICAgIDxhICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJvdXRlcyQgfCBhc3luY1wiIChjbGljayk9XCJjbG9zZVNpZGViYXIuZW1pdCgpXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiIG1hdC1saXN0LWl0ZW0gW3JvdXRlckxpbmtdPVwiW2l0ZW0ucm91dGVdXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBtYXQtbGlzdC1pY29uPnt7aXRlbS5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICA8c3BhbiBtZExpbmU+e3tpdGVtLnRpdGxlfX08L3NwYW4+XHJcbiAgICA8L2E+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWxpc3Q+YCxcclxuXHRzdHlsZXM6IFtgLmFjdGl2ZXtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjE1KX0ubWF0LWxpc3QtaXRlbS5hY3RpdmUgbWF0LWljb257Y29sb3I6IzAwNzJhZX1hLm1hdC1saXN0LWl0ZW0uY2hpbGR7bWFyZ2luLXJpZ2h0OjIwcHh9I2NsZWFyVXNlck1lbnVJdGVte3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTNweDt0b3A6MTNweH1gXSxcclxuXHRhbmltYXRpb25zOiBbXHJcblx0XHR0cmlnZ2VyKFwiY2hpbGRNZW51XCIsIFtcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJpbmFjdGl2ZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdC8vIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyxcclxuXHRcdFx0XHRcdGhlaWdodDogXCIwcHhcIixcclxuXHRcdFx0XHRcdG9wYWNpdHk6IFwiMFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJhY3RpdmVcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHQvLyB0cmFuc2Zvcm06ICdzY2FsZSgxLjEpJyxcclxuXHRcdFx0XHRcdGhlaWdodDogXCI0OHB4XCIsXHJcblx0XHRcdFx0XHRvcGFjaXR5OiBcIjFcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJpbmFjdGl2ZSA9PiBhY3RpdmVcIiwgYW5pbWF0ZShcIjEwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiYWN0aXZlID0+IGluYWN0aXZlXCIsIGFuaW1hdGUoXCIxMDBtcyBlYXNlLW91dFwiKSlcclxuXHRcdF0pLFxyXG5cdFx0dHJpZ2dlcihcIm1lbnVJdGVtXCIsIFtcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJpbmFjdGl2ZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdGhlaWdodDogXCI0OHB4XCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImFjdGl2ZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdGhlaWdodDogXCIxMDBweFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImluYWN0aXZlID0+IGFjdGl2ZVwiLCBhbmltYXRlKFwiMTAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJhY3RpdmUgPT4gaW5hY3RpdmVcIiwgYW5pbWF0ZShcIjEwMG1zIGVhc2Utb3V0XCIpKVxyXG5cdFx0XSlcclxuXHRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYWluTWVudUNvbXBvbmVudCB7XHJcblx0QE91dHB1dCgpIGNsb3NlU2lkZWJhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHRASW5wdXQoKSBhdXRoZW50aWNhdGVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cdHVzZXIkOiBPYnNlcnZhYmxlPFVzZXJNb2RlbD47XHJcblx0Y3VzdG9tZXJTdGF0dXMkOiBPYnNlcnZhYmxlPHJlc3BvbnNlU3RhdHVzVHlwZXM+O1xyXG5cdHJvdXRlcyQ6IE9ic2VydmFibGU8YW55PjtcclxuXHJcblx0QFZpZXdDaGlsZChcImN1c3RvbWVyTW9iaWxlSW5wdXRcIikgY3VzdG9tZXJNb2JpbGVJbnB1dDogRWxlbWVudFJlZjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgc3RvcmU6IFN0b3JlPEZlYXR1cmVTdGF0ZT4sXHJcblx0XHRwdWJsaWMgc2lnbmluU2VydmljZTogU2lnbmluU2VydmljZSxcclxuXHRcdHB1YmxpYyBjb25maWd1cmF0aW9uU2VydmljZTogTGF5b3V0Q29uZmlndXJhdGlvblNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMudXNlciQgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRBY2NvdW50SW5mbyk7XHJcblx0XHR0aGlzLl9vYnNlcnZlX29uX2xheW91dF9jb25maWdfYW5kX2ZpbHRlcl9yb3V0ZXMoKTtcclxuXHR9XHJcblx0X29ic2VydmVfb25fbGF5b3V0X2NvbmZpZ19hbmRfZmlsdGVyX3JvdXRlcygpIHtcclxuXHRcdHRoaXMucm91dGVzJCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlnJC5waXBlKFxyXG5cdFx0XHRtYXAoY29uZmlnID0+IGNvbmZpZy5tZW51SXRlbXMpLFxyXG5cdFx0XHRjb21iaW5lTGF0ZXN0KHRoaXMudXNlciQpLFxyXG5cdFx0XHRtYXAodGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWckLmdldFZhbHVlKCkubWVudV9pdGVtX2F1dGhvcml6YXRpb25fb3BlcmF0b3IpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICAgICAgc2VsZWN0b3I6ICdhcHAtc2VhcmNoLWJveCcsXHJcbiAgICAgICAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwic2VhcmNoLWJveFwiPlxyXG4gIDwhLS08dGQtc2VhcmNoLWJveCBjbGFzcz1cInNlYXJjaC1ib3gtY29udGFpbmVyXCIgYmFja0ljb249XCJhcnJvd19iYWNrXCIgcGxhY2Vob2xkZXI9XCLDmMKsw5jCs8OYwqrDmMKsw5nCiFwiIFtzaG93VW5kZXJsaW5lXT1cImZhbHNlXCIgW2RlYm91bmNlXT1cIjUwMFwiIFthbHdheXNWaXNpYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAoc2VhcmNoRGVib3VuY2UpPVwic2VhcmNoSW5wdXRUZXJtID0gJGV2ZW50XCIgKHNlYXJjaCk9XCJzZWFyY2hJbnB1dFRlcm0gPSAkZXZlbnRcIiAoY2xlYXIpPVwic2VhcmNoSW5wdXRUZXJtID0gJydcIj5cclxuICA8L3RkLXNlYXJjaC1ib3g+LS0+XHJcbjwvZGl2PmAsXHJcbiAgICAgICAgc3R5bGVzOiBbYGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hCb3hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICAgICAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB9XHJcblxyXG59IiwiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQsIEFmdGVyVmlld0luaXQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tIFwicnhqcy9CZWhhdmlvclN1YmplY3RcIjtcclxuaW1wb3J0IHsgTGF5b3V0Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbGF5b3V0LWNvbmZpZ3VyYXRpb24uc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwiYXBwLWxvZ28tY29udGFpbmVyXCIsXHJcblx0dGVtcGxhdGU6IGBcclxuPCEtLTxpbWcgY2xhc3M9XCJsb2dvVHlwZUFuaW1hdGlvblwiIHNyYz0nLi4vLi4vLi4vYXNzZXRzL2ltYWdlcy9sb2dvLXR5cGUucG5nJyAvPi0tPmAsXHJcblx0c3R5bGVzOiBbYC5sb2dvQW5pbWF0aW9ue2hlaWdodDozNnB4O2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mn0jYmFja2dyb3VuZHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3dpZHRoOjMwMHB4O2hlaWdodDo3MHB4fWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dvQ29udGFpbmVyQ29tcG9uZW50IHtcclxuXHR0b29sYmFyQW5pbWF0aW9uU3RhdGU6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBzZGY6IExheW91dENvbmZpZ3VyYXRpb25TZXJ2aWNlKSB7fVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anMvQmVoYXZpb3JTdWJqZWN0XCI7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anMvT2JzZXJ2YWJsZVwiO1xyXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSBcInJ4anMvb2JzZXJ2YWJsZS9mcm9tXCI7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSBcInJ4anMvb2JzZXJ2YWJsZS9mcm9tRXZlbnRcIjtcclxuaW1wb3J0IHsgb2YgfSBmcm9tIFwicnhqcy9vYnNlcnZhYmxlL29mXCI7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCB0cmFuc2l0aW9uLCBzdHlsZSwgYW5pbWF0ZSB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5pbXBvcnQgeyBVc2VyTW9kZWwsIGdldEFjY291bnRJbmZvIH0gZnJvbSBcIkBzb3VzaGlhbnMvdXNlclwiO1xyXG5cclxuaW1wb3J0ICogYXMgZnJvbUxheW91dCBmcm9tIFwiLi4vLi4vcmVkdWNlcnNcIjtcclxuaW1wb3J0IHtcclxuXHREb1NpZ25vdXRBY3Rpb24sXHJcblx0T3BlblNlY29uZFNpZGVuYXZBY3Rpb24sXHJcblx0Q2xvc2VTZWNvbmRTaWRlbmF2QWN0aW9uLFxyXG5cdENsb3NlU2lkZW5hdkFjdGlvbixcclxuXHRPcGVuU2lkZW5hdkFjdGlvbixcclxuXHRDaGFuZ2VUb29sYmF0VG9Db21mb3J0YWJsZU1vZGVBY3Rpb24sXHJcblx0Q2hhbmdlVG9vbGJhdFRvQ29tcGFjdE1vZGVBY3Rpb24sXHJcblx0Q2hhbmdlVG9vbGJhdFRvU3VtbWFyeU1vZGVBY3Rpb25cclxufSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBGZWF0dXJlU3RhdGUsIGdldFNob3dTZWNvbmRTaWRlYmFyU3RhdHVzLCBnZXRMYXlvdXRUb29sYmFyIH0gZnJvbSBcIi4uLy4uL3JlZHVjZXJzXCI7XHJcblxyXG5pbXBvcnQgeyBMYXlvdXRDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0YXRlIGFzIHRvb2xiYXJTdGF0ZSB9IGZyb20gXCIuLi8uLi9yZWR1Y2Vycy90b29sYmFyLnJlZHVjZXJcIjtcclxuaW1wb3J0IHsgbWFwLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJsYXlvdXQtdG9vbGJhclwiLFxyXG5cdHRlbXBsYXRlOiBgPG1hdC10b29sYmFyIFtAdG9vbGJhckFuaW1hdGlvbl09XCJ0b29sYmFyQW5pbWF0aW9uU3RhdGVcIj5cclxuICA8bWF0LXRvb2xiYXItcm93IGlkPVwiZmlyc3RUb29sYmFyXCI+XHJcbiAgICA8IS0tIDxkaXYgaWQ9XCJiYWNrZ3JvdW5kXCI+PC9kaXY+IC0tPlxyXG4gICAgPGltZyBbQGxvZ29BbmltYXRpb25dPVwibG9nb0FuaW1hdGlvblN0YXRlXCIgaWQ9XCJsb2dvXCIgcm91dGVyTGluaz0nLycgc3JjPSdhc3NldHMvaW1hZ2VzL3NoYXRlbC1sb2dvLnBuZycgLz5cclxuXHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAqbmdJZj0nc2hvd1NpZGViYXJNZW51ICYmIGZhbHNlJyAoY2xpY2spPVwidG9nZ2xlTWFpblNpZGViYXIoKVwiIG1hdC1pY29uLWJ1dHRvbiBmeEZsZXg9XCJub2dyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGFuIFtAdGl0bGVBbmltYXRpb25dPVwidGl0bGVBbmltYXRpb25TdGF0ZVwiIGlkPSdhcHAtbmFtZSc+XHJcbiAgICAgIHt7YXBwX2NvbmZpZz8uQ29uZmlnLkFwcFRpdGxlfX1cclxuICAgIDwvc3Bhbj5cclxuICAgIDxhcHAtdGl0bGUgZnhGbGV4IGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj48L2FwcC10aXRsZT5cclxuICAgIDxhcHAtc2VhcmNoLWJveCBmeEZsZXggZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIj48L2FwcC1zZWFyY2gtYm94PlxyXG5cclxuXHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIWRpc3BsYXlOYW1lXCIgbWF0LWJ1dHRvbiByb3V0ZXJMaW5rPVwiYXV0aC9zaWduaW5cIj5cclxuICAgICAgw5nCiMOYwrHDmcKIw5jCr1xyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiIWRpc3BsYXlOYW1lXCIgbWF0LWJ1dHRvbiByb3V0ZXJMaW5rPVwiYXV0aC9zaWdudXBcIj5cclxuICAgICAgw5jCq8OYwqjDmMKqIMOZwobDmMKnw5nChVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uICpuZ0lmPVwiZGlzcGxheU5hbWVcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInRvb2xiYXJNZW51MVwiPlxyXG4gICAgICA8bWF0LWljb24+YWNjb3VudF9jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8bWF0LW1lbnUgI3Rvb2xiYXJNZW51MSBjbGFzcz1cInJ0bC1kaXJcIj5cclxuICAgICAgPGRpdiBpZD1cImFjY2NvdW50TmFtZVwiPlxyXG4gICAgICAgIHt7ZGlzcGxheU5hbWV9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGJ1dHRvbiByb3V0ZXJMaW5rPScvdXNlci9wYW5lbCcgbWF0LW1lbnUtaXRlbSBjbGFzcz1cInJ0bC1kaXJcIj5cclxuICAgICAgICA8bWF0LWljb24+ZmluZ2VycHJpbnQ8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgw5nChcOYwq/Dm8KMw5jCscObwozDmMKqIMOawqnDmMKnw5jCscOYwqjDmMKxw5vCjFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT0nc2lnbm91dCgpJyBtYXQtbWVudS1pdGVtIGNsYXNzPVwicnRsLWRpclwiPlxyXG4gICAgICAgIDxtYXQtaWNvbj5leGl0X3RvX2FwcDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+w5jCrsOYwrHDmcKIw5jCrDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVTZWNvbmRTaWRlYmFyKClcIiBmeEZsZXg9XCJub2dyb3dcIiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+bm90aWZpY2F0aW9uczwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9J2dvYmFjaygpJz5cclxuICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gIDwvbWF0LXRvb2xiYXItcm93PlxyXG4gIDxtYXQtdG9vbGJhci1yb3c+XHJcbiAgICA8ZGl2IGlkPVwic2Vjb25kVG9vbGJhclwiIFtAbWVudUFuaW1hdGlvbl09XCJtZW51QW5pbWF0aW9uU3RhdGVcIj5cclxuICAgICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cIm5ncy1sYXlvdXQtYmVmb3JlLXRvb2xiYXItbWVudVwiPjwvcm91dGVyLW91dGxldD5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVJdGVtcyQgfCBhc3luY1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIiBbcm91dGVyTGlua109XCJbbWVudS5yb3V0ZV1cIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbiBtYXQtbGlzdC1pY29uPnt7bWVudS5pY29ufX08L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3Bhbj57e21lbnUudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxyb3V0ZXItb3V0bGV0IG5hbWU9XCJuZ3MtbGF5b3V0LWFmdGVyLXRvb2xiYXItbWVudVwiPjwvcm91dGVyLW91dGxldD5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXRvb2xiYXItcm93PlxyXG48L21hdC10b29sYmFyPmAsXHJcblx0c3R5bGVzOiBbYG1hdC10b29sYmFye2JhY2tncm91bmQtY29sb3I6I2ZmZiFpbXBvcnRhbnQ7dG9wOjA7Ym94LXNoYWRvdzpyZ2JhKDAsMCwwLC41KSAxcHggMXB4IDNweCFpbXBvcnRhbnR9I3NlY29uZFRvb2xiYXJ7dHJhbnNpdGlvbjpub25lO3Bvc2l0aW9uOmFic29sdXRlfSNzZWNvbmRUb29sYmFyIGJ1dHRvbntvcGFjaXR5Oi42O2ZvbnQtZmFtaWx5OmlyYW4tc2Fucy1ib2xkLHNhbnMtc2VyaWYhaW1wb3J0YW50O2ZvbnQtc2l6ZTouNjVlbSFpbXBvcnRhbnR9I3NlY29uZFRvb2xiYXIuYWN0aXZle29wYWNpdHk6MX0jbG9nb3t0cmFuc2l0aW9uOm5vbmU7cG9zaXRpb246YWJzb2x1dGV9I2FwcC1uYW1le3BhZGRpbmctcmlnaHQ6OHB4O2ZvbnQtZmFtaWx5OmlyYW4tc2Fucy1ib2xkLHNhbnMtc2VyaWYhaW1wb3J0YW50fWJ1dHRvbi5ydGwtZGlye2RpcmVjdGlvbjpydGwhaW1wb3J0YW50fSNhY2Njb3VudE5hbWV7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOnJpZ2h0O3BhZGRpbmctcmlnaHQ6MjBweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDpib2xkZXJ9YF0sXHJcblx0YW5pbWF0aW9uczogW1xyXG5cdFx0dHJpZ2dlcihcImxvZ29BbmltYXRpb25cIiwgW1xyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbWZvcnRhYmxlXCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0d2lkdGg6IFwiOTBweFwiLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBcIjkwcHhcIixcclxuXHRcdFx0XHRcdHRvcDogXCI1MHB4XCIsXHJcblx0XHRcdFx0XHRyaWdodDogXCJjYWxjKDUwJSAtIDUwcHgpXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbXBhY3RcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHR3aWR0aDogXCIzNnB4XCIsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IFwiMzZweFwiLFxyXG5cdFx0XHRcdFx0dG9wOiBcIjEzcHhcIixcclxuXHRcdFx0XHRcdHJpZ2h0OiBcIjEzcHhcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwic3VtbWFyeVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdHdpZHRoOiBcIjM2cHhcIixcclxuXHRcdFx0XHRcdGhlaWdodDogXCIzNnB4XCIsXHJcblx0XHRcdFx0XHR0b3A6IFwiNzZweFwiLFxyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiMTBweFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJoaWRlXCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0d2lkdGg6IFwiMFwiLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBcIjBcIixcclxuXHRcdFx0XHRcdHRvcDogXCI3NnB4XCIsXHJcblx0XHRcdFx0XHRyaWdodDogXCIxMHB4XCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gaGlkZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJoaWRlID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gaGlkZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJoaWRlID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdC8vIHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBjb21mb3J0YWJsZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBjb21mb3J0YWJsZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI0MDBtcyBlYXNlLW91dFwiKSlcclxuXHRcdF0pLFxyXG5cdFx0dHJpZ2dlcihcIm1lbnVBbmltYXRpb25cIiwgW1xyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbWZvcnRhYmxlXCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiNTAlXCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCg1MCUpXCIsXHJcblx0XHRcdFx0XHRib3R0b206IFwiMjVweFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJjb21wYWN0XCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiNDVweFwiLFxyXG5cdFx0XHRcdFx0dHJhbnNmb3JtOiBcInRyYW5zbGF0ZVgoMClcIixcclxuXHRcdFx0XHRcdGJvdHRvbTogXCIxM3B4XCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcInN1bW1hcnlcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRyaWdodDogXCI3NXB4XCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwKVwiLFxyXG5cdFx0XHRcdFx0Ym90dG9tOiBcIjE0cHhcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiaGlkZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdHJpZ2h0OiBcIjc1cHhcIixcclxuXHRcdFx0XHRcdHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDApXCIsXHJcblx0XHRcdFx0XHRib3R0b206IFwiMTRweFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gaGlkZVwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJoaWRlID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI2MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gaGlkZVwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJoaWRlID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjYwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBoaWRlXCIsIGFuaW1hdGUoXCI0MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiNjAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdC8vIHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBjb21mb3J0YWJsZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBjb21mb3J0YWJsZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI0MDBtcyBlYXNlLWluXCIpKVxyXG5cdFx0XSksXHJcblx0XHR0cmlnZ2VyKFwidGl0bGVBbmltYXRpb25cIiwgW1xyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbWZvcnRhYmxlXCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0XCJtYXJnaW4tcmlnaHRcIjogXCIwcHhcIixcclxuXHRcdFx0XHRcdFwiZm9udC1zaXplXCI6IFwibGFyZ2VyXCIsXHJcblx0XHRcdFx0XHRcImZvbnQtd2VpZ2h0XCI6IFwiYm9sZGVyXCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCg1MCUpXCIsXHJcblx0XHRcdFx0XHRyaWdodDogXCJjYWxjKDUwJSlcIixcclxuXHRcdFx0XHRcdGJvdHRvbTogXCI3NXB4XCIsXHJcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxyXG5cdFx0XHRcdFx0cGFkZGluZzogMFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiY29tcGFjdFwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdFwibWFyZ2luLXJpZ2h0XCI6IFwiMHB4XCIsXHJcblx0XHRcdFx0XHRcImZvbnQtc2l6ZVwiOiBcIjE2cHhcIixcclxuXHRcdFx0XHRcdFwiZm9udC13ZWlnaHRcIjogXCJib2xkZXJcIixcclxuXHRcdFx0XHRcdHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDApXCIsXHJcblx0XHRcdFx0XHRyaWdodDogXCI2MHB4XCIsXHJcblx0XHRcdFx0XHRib3R0b206IFwiNzlweFwiLFxyXG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYWJzb2x1dGVcIixcclxuXHRcdFx0XHRcdHBhZGRpbmc6IDBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcInN1bW1hcnlcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRcIm1hcmdpbi1yaWdodFwiOiBcIjBweFwiLFxyXG5cdFx0XHRcdFx0XCJmb250LXNpemVcIjogXCIxNnB4XCIsXHJcblx0XHRcdFx0XHRcImZvbnQtd2VpZ2h0XCI6IFwiYm9sZGVyXCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwKVwiLFxyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiNjBweFwiLFxyXG5cdFx0XHRcdFx0Ym90dG9tOiBcIjc5cHhcIixcclxuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXHJcblx0XHRcdFx0XHRwYWRkaW5nOiAwXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJoaWRlXCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0XCJtYXJnaW4tcmlnaHRcIjogXCIwcHhcIixcclxuXHRcdFx0XHRcdFwiZm9udC1zaXplXCI6IFwiMXB4XCIsXHJcblx0XHRcdFx0XHRcImZvbnQtd2VpZ2h0XCI6IFwiYm9sZGVyXCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwKVwiLFxyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiNjBweFwiLFxyXG5cdFx0XHRcdFx0Ym90dG9tOiBcIjc5cHhcIixcclxuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXHJcblx0XHRcdFx0XHRwYWRkaW5nOiAwXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjg1MG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBjb21mb3J0YWJsZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gaGlkZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJoaWRlID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHQvLyB0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1pblwiKSlcclxuXHRcdF0pLFxyXG5cdFx0dHJpZ2dlcihcInRvb2xiYXJBbmltYXRpb25cIiwgW1xyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbWZvcnRhYmxlXCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0Ly8gYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMTE5LDE4MSw2MywxKVwiLFxyXG5cdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcInJnYmEoMjU2LDI1NiwyNTYsMSlcIixcclxuXHRcdFx0XHRcdGNvbG9yOiBcInJnYmEoMzAsMzAsMzAsMSlcIixcclxuXHRcdFx0XHRcdGhlaWdodDogXCIzM3ZoXCIsXHJcblx0XHRcdFx0XHR0b3A6IFwiMFwiLFxyXG5cdFx0XHRcdFx0Ym94U2hhZG93OiBcIjFweCAxcHggM3B4IHJnYmEoMCwwLDAsMClcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiY29tcGFjdFwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDI1NiwyNTYsMjU2LDEpXCIsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IFwiMTI4cHhcIixcclxuXHRcdFx0XHRcdHRvcDogXCIwXCIsXHJcblx0XHRcdFx0XHRib3hTaGFkb3c6IFwiMXB4IDFweCAzcHggcmdiYSgwLDAsMCwwLjUpXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcInN1bW1hcnlcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTYsMjU2LDI1NiwxKVwiLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBcIjEyOHB4XCIsXHJcblx0XHRcdFx0XHR0b3A6IFwiLTY0cHhcIixcclxuXHRcdFx0XHRcdGJveFNoYWRvdzogXCIxcHggMXB4IDNweCByZ2JhKDAsMCwwLDAuNSlcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiaGlkZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDI1NiwyNTYsMjU2LDEpXCIsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IFwiMTI4cHhcIixcclxuXHRcdFx0XHRcdHRvcDogXCItMTI4cHhcIixcclxuXHRcdFx0XHRcdGJveFNoYWRvdzogXCIxcHggMXB4IDNweCByZ2JhKDAsMCwwLDAuNSlcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBjb21mb3J0YWJsZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gaGlkZVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJoaWRlID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHQvLyB0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1pblwiKSlcclxuXHRcdF0pXHJcblx0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9vbGJhck1lbnVDb21wb25lbnQge1xyXG5cdHNob3dTZWNvbmRTaWRlbmF2OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cdEBJbnB1dCgpIHNob3dTaWRlYmFyTWVudTtcclxuXHRASW5wdXQoXCJhcHAtY29uZmlnXCIpIGFwcF9jb25maWc7XHJcblx0QElucHV0KCkgdXNlcjogVXNlck1vZGVsO1xyXG5cdEBJbnB1dCgpIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcblx0dXNlciQ6IE9ic2VydmFibGU8VXNlck1vZGVsPjtcclxuXHRzaG93TWFpblNpZGVuYXY6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblx0dG9vbGJhckFuaW1hdGlvblN0YXRlOiBcImNvbWZvcnRhYmxlXCIgfCBcImNvbXBhY3RcIiB8IFwic3VtbWFyeVwiIHwgXCJoaWRlXCIgPSBcImNvbXBhY3RcIjtcclxuXHRtZW51QW5pbWF0aW9uU3RhdGU6IFwiY29tZm9ydGFibGVcIiB8IFwiY29tcGFjdFwiIHwgXCJzdW1tYXJ5XCIgfCBcImhpZGVcIiA9IFwiY29tcGFjdFwiO1xyXG5cdGxvZ29BbmltYXRpb25TdGF0ZTogXCJjb21mb3J0YWJsZVwiIHwgXCJjb21wYWN0XCIgfCBcInN1bW1hcnlcIiB8IFwiaGlkZVwiID0gXCJjb21wYWN0XCI7XHJcblx0dGl0bGVBbmltYXRpb25TdGF0ZTogXCJjb21mb3J0YWJsZVwiIHwgXCJjb21wYWN0XCIgfCBcInN1bW1hcnlcIiB8IFwiaGlkZVwiID0gXCJjb21wYWN0XCI7XHJcblx0bWVudUl0ZW1zJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcblx0bGFzdFNjcm9sbDogbnVtYmVyO1xyXG5cdGNvbmZpZzogdG9vbGJhclN0YXRlO1xyXG5cdGNvbmZpZyQ6IE9ic2VydmFibGU8dG9vbGJhclN0YXRlPjtcclxuXHRhbmNob3JzTW9kZSA9IGZhbHNlO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0QEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LFxyXG5cdFx0cHJpdmF0ZSBfbG9jYXRpb246IExvY2F0aW9uLFxyXG5cdFx0cHJpdmF0ZSBzdG9yZTogU3RvcmU8RmVhdHVyZVN0YXRlPixcclxuXHRcdHB1YmxpYyBjb25maWd1cmF0aW9uU2VydmljZTogTGF5b3V0Q29uZmlndXJhdGlvblNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMudXNlciQgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRBY2NvdW50SW5mbyk7XHJcblx0XHR0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDaGFuZ2VUb29sYmF0VG9Db21mb3J0YWJsZU1vZGVBY3Rpb24oKSk7XHJcblx0XHR0aGlzLmNvbmZpZyQgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRMYXlvdXRUb29sYmFyKTtcclxuXHRcdHRoaXMuY29uZmlnJC5zdWJzY3JpYmUoY29uZmlnID0+ICh0aGlzLmNvbmZpZyA9IGNvbmZpZykpO1xyXG5cdFx0dGhpcy5sYXN0U2Nyb2xsID0gdGhpcy5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcclxuXHRcdHRoaXMuc2hvd1NlY29uZFNpZGVuYXYgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRTaG93U2Vjb25kU2lkZWJhclN0YXR1cyk7XHJcblx0XHR0aGlzLnNob3dNYWluU2lkZW5hdiA9IHRoaXMuc3RvcmUuc2VsZWN0KGZyb21MYXlvdXQuZ2V0U2hvd01haW5TaWRlbmF2KTtcclxuXHRcdHRoaXMuc3RvcmUuc2VsZWN0KGZyb21MYXlvdXQuZ2V0TGF5b3V0VG9vbGJhck1vZGUpLnN1YnNjcmliZShzdGF0ZSA9PiB7XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubWVudUFuaW1hdGlvblN0YXRlID0gc3RhdGUpLCAxKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiAodGhpcy5sb2dvQW5pbWF0aW9uU3RhdGUgPSBzdGF0ZSksIDEpO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+ICh0aGlzLnRpdGxlQW5pbWF0aW9uU3RhdGUgPSBzdGF0ZSksIDEpO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+ICh0aGlzLnRvb2xiYXJBbmltYXRpb25TdGF0ZSA9IHN0YXRlKSwgMSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuX29ic2VydmVfb25fbGF5b3V0X2NvbmZpZ19hbmRfZmlsdGVyX3JvdXRlcygpO1xyXG5cclxuXHRcdGZyb21FdmVudCh0aGlzLmRvY3VtZW50LmJvZHksIFwic2Nyb2xsXCIpLnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdGNvbnN0IHNjcm9sbGVkQW1vdW50ID0gdGhpcy5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcclxuXHRcdFx0Y29uc3Qgc2Nyb2xsVG9Ub3AgPVxyXG5cdFx0XHRcdHNjcm9sbGVkQW1vdW50IC0gdGhpcy5sYXN0U2Nyb2xsIDwgMCAmJiB0aGlzLmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsZWRBbW91bnQgPCAzMDA7XHJcblx0XHRcdC8vIGxldCBzY3JvbGxUb1RvcCA9IHNjcm9sbGVkQW1vdW50IC0gdGhpcy5sYXN0U2Nyb2xsIDwgMDtcclxuXHRcdFx0dGhpcy5sYXN0U2Nyb2xsID0gdGhpcy5kb2N1bWVudC5ib2R5LnNjcm9sbFRvcDtcclxuXHRcdFx0aWYgKCF0aGlzLmNvbmZpZy52aXNpYmlsaXR5KSByZXR1cm47XHJcblx0XHRcdGlmIChzY3JvbGxlZEFtb3VudCA9PSAwKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlnLm1vZGUgPT0gXCJjb21mb3J0YWJsZVwiKSByZXR1cm47XHJcblx0XHRcdFx0dGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2hhbmdlVG9vbGJhdFRvQ29tZm9ydGFibGVNb2RlQWN0aW9uKCkpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHNjcm9sbGVkQW1vdW50IDwgMjAwIHx8IHNjcm9sbFRvVG9wKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuY29uZmlnLm1vZGUgPT0gXCJjb21wYWN0XCIpIHJldHVybjtcclxuXHRcdFx0XHR0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDaGFuZ2VUb29sYmF0VG9Db21wYWN0TW9kZUFjdGlvbigpKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcubW9kZSA9PSBcInN1bW1hcnlcIikgcmV0dXJuO1xyXG5cdFx0XHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENoYW5nZVRvb2xiYXRUb1N1bW1hcnlNb2RlQWN0aW9uKCkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdEBIb3N0TGlzdGVuZXIoXCJib2R5OnNjcm9sbFwiLCBbXSlcclxuXHRvbldpbmRvd1Njcm9sbCgpIHtcclxuXHRcdC8vIG9mKDEpXHJcblx0fVxyXG5cdHNpZ25vdXQoKSB7XHJcblx0XHR0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBEb1NpZ25vdXRBY3Rpb24oKSk7XHJcblx0fVxyXG5cdGdvYmFjaygpIHtcclxuXHRcdHRoaXMuX2xvY2F0aW9uLmJhY2soKTtcclxuXHR9XHJcblx0dG9nZ2xlU2Vjb25kU2lkZWJhcigpIHtcclxuXHRcdGxldCBhY3Rpb247XHJcblx0XHR0aGlzLnNob3dTZWNvbmRTaWRlbmF2LnN1YnNjcmliZShzdGF0ZSA9PiB7XHJcblx0XHRcdGFjdGlvbiA9IHN0YXRlID8gbmV3IENsb3NlU2Vjb25kU2lkZW5hdkFjdGlvbigpIDogbmV3IE9wZW5TZWNvbmRTaWRlbmF2QWN0aW9uKCk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2goYWN0aW9uKTtcclxuXHR9XHJcblx0dG9nZ2xlTWFpblNpZGViYXIoKSB7XHJcblx0XHRsZXQgYWN0aW9uO1xyXG5cdFx0dGhpcy5zaG93TWFpblNpZGVuYXYuc3Vic2NyaWJlKHN0YXRlID0+IHtcclxuXHRcdFx0YWN0aW9uID0gc3RhdGUgPyBuZXcgQ2xvc2VTaWRlbmF2QWN0aW9uKCkgOiBuZXcgT3BlblNpZGVuYXZBY3Rpb24oKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5zdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG5cdH1cclxuXHRfb2JzZXJ2ZV9vbl9sYXlvdXRfY29uZmlnX2FuZF9maWx0ZXJfcm91dGVzKCkge1xyXG5cdFx0dGhpcy5tZW51SXRlbXMkID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWckLnBpcGUoXHJcblx0XHRcdG1hcChjb25maWcgPT4gY29uZmlnLm1lbnVJdGVtcyksXHJcblx0XHRcdGNvbWJpbmVMYXRlc3QodGhpcy51c2VyJCksXHJcblx0XHRcdG1hcCh0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNvbmZpZyQuZ2V0VmFsdWUoKS5tZW51X2l0ZW1fYXV0aG9yaXphdGlvbl9vcGVyYXRvcilcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJhcHAtZm9vdGVyXCIsXHJcblx0dGVtcGxhdGU6IGA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgY2xhc3M9XCJmb290ZXItdGV4dFwiPlxyXG4gICAge3thcHBfY29uZmlnPy5Db25maWcuRm9vdGVyQ29weXJpZ2h0fX1cclxuPC9kaXY+YCxcclxuXHRzdHlsZXM6IFtgOmhvc3R7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U1ZTVlNTtwYWRkaW5nOjhweDtvdmVyZmxvdzpoaWRkZW59LmZvb3Rlci10ZXh0e3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDoxMnB4fWBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGb290ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBJbnB1dChcImFwcC1jb25maWdcIikgYXBwX2NvbmZpZztcclxuXHJcblx0Y29uc3RydWN0b3IoKSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anMvQmVoYXZpb3JTdWJqZWN0XCI7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuaW1wb3J0IHsgVGl0bGVDaGFuZ2VkQWN0aW9uIH0gZnJvbSBcIi4uLy4uL2FjdGlvbnNcIjtcclxuaW1wb3J0IHsgRmVhdHVyZVN0YXRlLCBnZXRUaXRsZSB9IGZyb20gXCIuLi8uLi9yZWR1Y2Vyc1wiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anMvT2JzZXJ2YWJsZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZSwgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwiYXBwLXRpdGxlXCIsXHJcblx0dGVtcGxhdGU6IGA8ZGl2IGlkPVwidGl0bGVcIj5cclxuICAgIHt7dGl0bGUkIHwgYXN5bmN9fVxyXG48L2Rpdj5gLFxyXG5cdHN0eWxlczogW2AjdGl0bGV7bWFyZ2luLXJpZ2h0Oi0zMHB4O2ZvbnQtd2VpZ2h0OmJvbGRlcjtmb250LXNpemU6MTNweDtwYWRkaW5nOjE4cHggNDBweH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGl0bGVDb21wb25lbnQge1xyXG5cdHRpdGxlJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cdG1hcHBlcjogeyAodmFsOiBOYXZpZ2F0aW9uRW5kKTogc3RyaW5nIH1bXTtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8RmVhdHVyZVN0YXRlPiwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG5cdFx0dGhpcy5tYXBwZXIgPSBbXTtcclxuXHRcdC8vIHRoaXMubWFwcGVyLnB1c2goKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcblx0XHQvLyAgICAgcmV0dXJuIChldmVudC51cmwuZW5kc1dpdGgoJ3Byb2ZpbGUtZWRpdCcpKSA/ICfDmcKIw5vCjMOYwrHDmMKnw5vCjMOYwrQgw5jCp8OYwrfDmcKEw5jCp8OYwrnDmMKnw5jCqiDDmsKpw5jCp8OYwrHDmMKow5jCscObwownIDogbnVsbDtcclxuXHRcdC8vIH0pO1xyXG5cdFx0Ly8gdGhpcy5tYXBwZXIucHVzaCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuXHRcdC8vICAgICByZXR1cm4gKGV2ZW50LnVybC5lbmRzV2l0aCgnc3VjY2Vzcy1wYXltZW50LXJlcG9ydCcpKSA/ICfDmsKvw5jCssOYwqfDmMKxw5jCtCDDmcK+w5jCscOYwq/DmMKnw5jCrsOYwqogw5nCh8OYwqfDm8KMIMOZwoXDmcKIw5nCgcOZwoInIDogbnVsbDtcclxuXHRcdC8vIH0pO1xyXG5cdFx0Ly8gdGhpcy5tYXBwZXIucHVzaCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuXHRcdC8vICAgICByZXR1cm4gKGV2ZW50LnVybC5lbmRzV2l0aCgnZmFpbGVkLWxvZ2luLXJlcG9ydCcpKSA/ICfDmsKvw5jCssOYwqfDmMKxw5jCtCDDmMKuw5jCt8OYwqfDmcKHw5jCpycgOiBudWxsO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHQvLyB0aGlzLm1hcHBlci5wdXNoKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG5cdFx0Ly8gICAgIHJldHVybiAoZXZlbnQudXJsLmVuZHNXaXRoKCdhY3RpdmUtc2Vzc2lvbi1pbmZvJykpID8gJ8OYwqzDmMKyw5jCpsObwozDmMKnw5jCqiDDmMKow5jCs8OYwqrDmcKHIMOZwoHDmMK5w5jCp8OZwoQnIDogbnVsbDtcclxuXHRcdC8vIH0pO1xyXG5cdFx0Ly8gdGhpcy5tYXBwZXIucHVzaCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IHtcclxuXHRcdC8vICAgICByZXR1cm4gKGV2ZW50LnVybC5lbmRzV2l0aCgnc2Vzc2lvbi1kZXRhaWwtcmVwb3J0JykpID8gJ8OYwqzDmMKyw5jCpsObwozDmMKnw5jCqiDDmMKnw5jCqsOYwrXDmMKnw5nChCcgOiBudWxsO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHQvLyB0aGlzLm1hcHBlci5wdXNoKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG5cdFx0Ly8gICAgIHJldHVybiAoZXZlbnQudXJsLmVuZHNXaXRoKCdkYWlseS1zZXNzaW9uLXJlcG9ydCcpKSA/ICfDmsKvw5jCssOYwqfDmMKxw5jCtCDDmMKqw5jCrMOZwoXDm8KMw5jCucObwowgw5jCscOZwojDmMKyw5jCp8OZwobDmcKHJyA6IG51bGw7XHJcblx0XHQvLyB9KTtcclxuXHRcdC8vIHRoaXMubWFwcGVyLnB1c2goKGV2ZW50OiBOYXZpZ2F0aW9uRW5kKSA9PiB7XHJcblx0XHQvLyAgICAgcmV0dXJuIChldmVudC51cmwuZW5kc1dpdGgoJ21vbnRobHktc2Vzc2lvbi1yZXBvcnQnKSkgPyAnw5rCr8OYwrLDmMKnw5jCscOYwrQgw5jCqsOYwqzDmcKFw5vCjMOYwrnDm8KMIMOZwoXDmMKnw5nCh8OYwqfDmcKGw5nChycgOiBudWxsO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHQvLyB0aGlzLm1hcHBlci5wdXNoKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG5cdFx0Ly8gICAgIHJldHVybiAoZXZlbnQudXJsLnN0YXJ0c1dpdGgoJy9wYWNrYWdlcy91c2VyLXBhY2thZ2VzJykpID8gJ8OZwoTDm8KMw5jCs8OYwqogw5nCvsOawqnDm8KMw5jCrCDDmcKHw5jCpycgOiBudWxsO1xyXG5cdFx0Ly8gfSk7XHJcblx0XHQvLyB0aGlzLm1hcHBlci5wdXNoKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4ge1xyXG5cdFx0Ly8gICAgIHJldHVybiAoZXZlbnQudXJsLmVuZHNXaXRoKCcvY2hhbmdlLXBhc3N3b3JkJykpID8gJ8OYwqrDmMK6w5vCjMObwozDmMKxIMOawqnDmcKEw5nChcOZwocgw5jCucOYwqjDmcKIw5jCsScgOiBudWxsO1xyXG5cdFx0Ly8gfSk7XHJcblxyXG5cdFx0dGhpcy50aXRsZSQgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRUaXRsZSk7XHJcblxyXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShldmVudCA9PiB7XHJcblx0XHRcdGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcclxuXHRcdFx0XHR2YXIgdGl0bGUgPSBcIlwiO1xyXG5cdFx0XHRcdHRoaXMubWFwcGVyLmZvckVhY2gobWFwcGVyID0+IHtcclxuXHRcdFx0XHRcdGxldCByZXMgPSBtYXBwZXIoZXZlbnQpO1xyXG5cdFx0XHRcdFx0aWYgKHJlcykge1xyXG5cdFx0XHRcdFx0XHR0aXRsZSA9IHJlcztcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFRpdGxlQ2hhbmdlZEFjdGlvbihcIi8gXCIgKyB0aXRsZSB8fCBcIlwiKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJbnB1dCwgSG9zdEJpbmRpbmcgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqcy9PYnNlcnZhYmxlXCI7XHJcbi8vIGltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gXCJyeGpzL0JlaGF2aW9yU3ViamVjdFwiO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xyXG5pbXBvcnQgeyBTd1B1c2ggfSBmcm9tIFwiQGFuZ3VsYXIvc2VydmljZS13b3JrZXJcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTWF0U2lkZW5hdiwgTWF0U2lkZW5hdkNvbnRhaW5lciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBDb25maWdNb2RlbCwgZ2V0QXBwQ29uZmlnIH0gZnJvbSBcIkBzb3VzaGlhbnMvY29uZmlnXCI7XHJcbmltcG9ydCB7IFVzZXJNb2RlbCB9IGZyb20gXCJAc291c2hpYW5zL3VzZXJcIjtcclxuXHJcbmltcG9ydCB7XHJcblx0RmVhdHVyZVN0YXRlLFxyXG5cdGdldFNob3dNYWluU2lkZW5hdixcclxuXHRnZXRNYWluU2lkZU5hdk1vZGUsXHJcblx0Z2V0U2hvd1NlY29uZFNpZGViYXJTdGF0dXMsXHJcblx0Z2V0U2Vjb25kU2lkZWJhck1vZGUsXHJcblx0Z2V0TGF5b3V0TW9kZSxcclxuXHRnZXRMYXlvdXRUb29sYmFyTW9kZSxcclxuXHRnZXRGdWxsc2NyZWVuTW9kZVxyXG59IGZyb20gXCIuLi8uLi9yZWR1Y2Vyc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRDaGFuZ2VUb29sYmF0VG9Db21mb3J0YWJsZU1vZGVBY3Rpb24sXHJcblx0Q2xvc2VTZWNvbmRTaWRlbmF2QWN0aW9uLFxyXG5cdENoYW5nZVNlY29uZFNpZGVuYXZNb2RlLFxyXG5cdE9wZW5TZWNvbmRTaWRlbmF2QWN0aW9uLFxyXG5cdENsb3NlU2lkZW5hdkFjdGlvbixcclxuXHRDaGFuZ2VTaWRlTmF2TW9kZSxcclxuXHRPcGVuU2lkZW5hdkFjdGlvbixcclxuXHRDaGFuZ2VMYXlvdXRcclxufSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBMYXlvdXRDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVzZXJGYWNhZGVTZXJ2aWNlIH0gZnJvbSBcIkBzb3VzaGlhbnMvdXNlclwiO1xyXG5pbXBvcnQgeyB0cmlnZ2VyLCBzdGF0ZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSwgc3R5bGUgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwibGF5b3V0LW1haW5cIixcclxuXHR0ZW1wbGF0ZTogYDxkaXYgI21haW5TaWRlTmF2IFtuZ0NsYXNzXT1cInRvb2xiYXJBbmltYXRpb25TdGF0ZSB8IGFzeW5jXCIgW2NsYXNzLmZ1bGxzY3JlZW5dPVwiaXNGdWxsc2NyZWVuJCB8IGFzeW5jXCI+XHJcbiAgPCEtLSA8bWF0LXByb2dyZXNzLWJhciAqbmdJZj0ncHJvZ3Jlc3NTdGF0dXMkIHwgYXN5bmMnIGNvbG9yPVwicHJpbWFyeVwiIG1vZGU9XCJxdWVyeVwiPjwvbWF0LXByb2dyZXNzLWJhcj4gLS0+XHJcbiAgPGxheW91dC10b29sYmFyICAqbmdJZj1cInRoZW1lID09ICd0aGVtZV9BJ1wiIFt1c2VyXT1cInVzZXIkIHwgYXN5bmNcIiBbZGlzcGxheU5hbWVdPVwiZGlzcGxheU5hbWUkIHwgYXN5bmNcIiBbc2hvd1NpZGViYXJNZW51XT0nc2hvd1NpZGViYXJNZW51IHwgYXN5bmMnIFthcHAtY29uZmlnXT1cImFwcF9jb25maWdcIj48L2xheW91dC10b29sYmFyPlxyXG4gIDxsYXlvdXQtdG9vbGJhci1iICpuZ0lmPVwidGhlbWUgPT0gJ3RoZW1lX0InXCIgW3VzZXJdPVwidXNlciQgfCBhc3luY1wiIFtkaXNwbGF5TmFtZV09XCJkaXNwbGF5TmFtZSQgfCBhc3luY1wiIFtzaG93U2lkZWJhck1lbnVdPSdzaG93U2lkZWJhck1lbnUgfCBhc3luYycgW2FwcC1jb25maWddPVwiYXBwX2NvbmZpZ1wiPjwvbGF5b3V0LXRvb2xiYXItYj5cclxuICBcclxuICA8bWF0LXNpZGVuYXYtY29udGFpbmVyIGlkPVwibGF5b3V0LXNpZG5hdlwiIFtjbGFzc05hbWVdPVwibGF5b3V0TW9kZSB8IGFzeW5jXCI+XHJcbiAgICA8bWF0LXNpZGVuYXYgW21vZGVdPVwibWFpblNpZGVuYXZNb2RlIHwgYXN5bmNcIiBbb3BlbmVkXT0nc2hvd01haW5TaWRlbmF2IHwgYXN5bmMnICNzaWRlYmFyIChjbG9zZWRTdGFydCk9XCJvblNpZGViYXJDbG9zZWRTdGFydCgpXCI+XHJcbiAgICAgIDxtYXQtbmF2LWxpc3Q+XHJcbiAgICAgICAgPG5ncy1sYXlvdXQtbWFpbi1tZW51IFthdXRoZW50aWNhdGVkXT0nc2hvd1NpZGViYXJNZW51JyAoY2xvc2VTaWRlYmFyKT1cInNpZGViYXIuY2xvc2UoKVwiIChjbGljayk9XCJvblNlY29uZFNpZGViYXJDbG9zZWRTdGFydCgpXCI+PC9uZ3MtbGF5b3V0LW1haW4tbWVudT5cclxuICAgICAgPC9tYXQtbmF2LWxpc3Q+XHJcbiAgICA8L21hdC1zaWRlbmF2PlxyXG4gICAgPCEtLSA8bWF0LXNpZGVuYXYgW21vZGVdPVwic2Vjb25kU2lkZW5hdk1vZGUgfCBhc3luY1wiIFtvcGVuZWRdPSdzaG93U2Vjb25kU2lkZW5hdiB8IGFzeW5jJyAoY2xvc2VkU3RhcnQpPVwib25TZWNvbmRTaWRlYmFyQ2xvc2VkU3RhcnQoKVwiXHJcbiAgICAgIHBvc2l0aW9uPVwiZW5kXCIgI3NlY29uZF9zaWRlYmFyIGNsYXNzPVwic2Vjb25kX3NpZGViYXJcIj5cclxuICAgICAgPG1hdC1uYXYtbGlzdCBmeExheW91dD0nY29sdW1uJz5cclxuICAgICAgPC9tYXQtbmF2LWxpc3Q+XHJcbiAgICA8L21hdC1zaWRlbmF2PiAtLT5cclxuICAgIDxkaXYgZnhGbGV4TGF5b3V0PSdjb2x1bW4nIGlkPVwiYXBwLW1haW4tY29udGFpbmVyXCIgZnhMYXlvdXRBbGlnbj0nY2VudGVyIGNlbnRlcic+XHJcbiAgICAgIDxkaXYgZnhGbGV4PScwIDAgMTAwJz5cclxuICAgICAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICAgICAgPGZvb3RlciBbQG1vZGVdPVwibW9kZSQgfCBhc3luY1wiIHJ1bGVBbmNob3I9XCJsYXlvdXRfZm9vdGVyXCI+XHJcbiAgICAgICAgICA8cm91dGVyLW91dGxldCBuYW1lPVwiZm9vdGVyX0FcIj48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICAgICAgICA8cm91dGVyLW91dGxldCBuYW1lPVwiZm9vdGVyX0JcIj48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICAgICAgICA8YXBwLWZvb3RlciBbYXBwLWNvbmZpZ109XCJhcHBfY29uZmlnXCI+PC9hcHAtZm9vdGVyPlxyXG4gICAgICAgIDwvZm9vdGVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxyXG48L2Rpdj5gLFxyXG5cdHN0eWxlczogW2AjcHVyY2hhc2UtZmFiLWJ1dHRvbntwb3NpdGlvbjpmaXhlZDtib3R0b206MjNweDtsZWZ0OjMxcHh9bWQtcHJvZ3Jlc3MtYmFye3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudH0ud2l0aC1tYXJnaW4gI2FwcC1tYWluLWNvbnRhaW5lcnttYXJnaW4tdG9wOjI1cHg7cGFkZGluZy1yaWdodDoyNXB4O3BhZGRpbmctbGVmdDoyNXB4fS5zZWNvbmRfc2lkZWJhcnt3aWR0aDozODBweH0ubW9yZS1kZXRhaWx7bWFyZ2luOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxMHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjk2JTtib3JkZXI6MXB4IHNvbGlkICNkZWRlZGU7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246LjNzfS5tb3JlLWRldGFpbDpob3ZlcntiYWNrZ3JvdW5kOiNlZWV9Zm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7bWFyZ2luLXRvcDoyNXB4O2JhY2tncm91bmQtY29sb3I6I2YxZjFmMX1gXSxcclxuXHRhbmltYXRpb25zOiBbXHJcblx0XHR0cmlnZ2VyKFwibW9kZVwiLCBbXHJcblx0XHRcdHN0YXRlKFwidmlzaWJsZVwiLCBzdHlsZSh7IHRyYW5zZm9ybTogXCJzY2FsZVkoMSkgdHJhbnNsYXRlWSgwKVwiIH0pKSxcclxuXHRcdFx0c3RhdGUoXCJpbnZpc2libGVcIiwgc3R5bGUoeyBoZWlnaHQ6IFwiMFwiLCB0cmFuc2Zvcm06IFwic2NhbGVZKDApIHRyYW5zbGF0ZVkoMTAwJSlcIiB9KSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJ2aXNpYmxlID0+IGludmlzaWJsZVwiLCBbYW5pbWF0ZShcIjEwMDBtc1wiKV0pLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaW52aXNpYmxlID0+IHZpc2libGVcIiwgW2FuaW1hdGUoXCIxMDAwbXNcIildKVxyXG5cdFx0XSlcclxuXHRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3NMYXlvdXRNYWluQ29tcG9uZW50IHtcclxuXHRASW5wdXQoXCJhcHAtY29uZmlnXCIpIGFwcF9jb25maWc6IENvbmZpZ01vZGVsPGFueT47XHJcblx0bW9kZSQ6IE9ic2VydmFibGU8XCJ2aXNpYmxlXCIgfCBcImludmlzaWJsZVwiPjtcclxuXHR0aGVtZTogc3RyaW5nO1xyXG5cdHVzZXIkOiBPYnNlcnZhYmxlPFVzZXJNb2RlbD47XHJcblx0ZGlzcGxheU5hbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblx0aXNGdWxsc2NyZWVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHRwcm9ncmVzc1N0YXR1cyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcblx0c2hvd1NpZGViYXJNZW51ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcclxuXHQvLyB1c2VyJDogT2JzZXJ2YWJsZTxVc2VyTW9kZWw+O1xyXG5cdHNob3dNYWluU2lkZW5hdjogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHRtYWluU2lkZW5hdk1vZGU6IE9ic2VydmFibGU8XCJzaWRlXCIgfCBcIm92ZXJcIiB8IFwicHVzaFwiPjtcclxuXHRsYXlvdXRNb2RlOiBPYnNlcnZhYmxlPFwid2l0aC1tYXJnaW5cIiB8IFwid2l0aG91dC1tYXJnaW5cIiB8IFwiZGVmYXVsdFwiPjtcclxuXHR3aWR0aCA9IDEwMDtcclxuXHRzaG93U2Vjb25kU2lkZW5hdjogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHRzZWNvbmRTaWRlbmF2TW9kZTogT2JzZXJ2YWJsZTxcInNpZGVcIiB8IFwib3ZlclwiIHwgXCJwdXNoXCI+O1xyXG5cdHRvb2xiYXJBbmltYXRpb25TdGF0ZTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cdEBWaWV3Q2hpbGQoXCJtYWluU2lkZU5hdlwiKSBtYWluU2lkZU5hdjogRWxlbWVudFJlZjtcclxuXHRASG9zdEJpbmRpbmcoXCJjbGFzcy50aGVtZV9BXCIpIHRoZW1lX0E6IGJvb2xlYW47XHJcblx0QEhvc3RCaW5kaW5nKFwiY2xhc3MudGhlbWVfQlwiKSB0aGVtZV9COiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBzdG9yZTogU3RvcmU8RmVhdHVyZVN0YXRlPixcclxuXHRcdHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcblx0XHRwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IExheW91dENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB1c2VyRmFjYWRlU2VydmljZTogVXNlckZhY2FkZVNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMuX3NldF9pMThuX3Jlc291cmNlKCk7XHJcblx0XHR0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnJC5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xyXG5cdFx0XHRkZWJ1Z2dlcjtcclxuXHRcdFx0dGhpcy50aGVtZSA9IGNvbmZpZy50aGVtZTtcclxuXHRcdFx0dGhpcy50aGVtZV9BID0gY29uZmlnLnRoZW1lID09IFwidGhlbWVfQVwiO1xyXG5cdFx0XHR0aGlzLnRoZW1lX0IgPSBjb25maWcudGhlbWUgPT0gXCJ0aGVtZV9CXCI7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENoYW5nZVNpZGVOYXZNb2RlKFwicHVzaFwiKSk7XHJcblx0XHR0aGlzLnVzZXIkID0gdGhpcy5zdG9yZS5zZWxlY3QoKHMpID0+IChzIGFzIGFueSkudXNlci51c2VyLmRhdGEpO1xyXG5cdFx0dGhpcy5kaXNwbGF5TmFtZSQgPSB0aGlzLnVzZXJGYWNhZGVTZXJ2aWNlLmdldERpc3BsYXlOYW1lKCk7XHJcblx0XHR0aGlzLnNob3dNYWluU2lkZW5hdiA9IHRoaXMuc3RvcmUuc2VsZWN0KGdldFNob3dNYWluU2lkZW5hdik7XHJcblx0XHR0aGlzLm1haW5TaWRlbmF2TW9kZSA9IHRoaXMuc3RvcmUuc2VsZWN0KGdldE1haW5TaWRlTmF2TW9kZSk7XHJcblx0XHR0aGlzLnRvb2xiYXJBbmltYXRpb25TdGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KGdldExheW91dFRvb2xiYXJNb2RlKTtcclxuXHJcblx0XHR0aGlzLmlzRnVsbHNjcmVlbiQgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRGdWxsc2NyZWVuTW9kZSk7XHJcblx0XHR0aGlzLm1vZGUkID0gdGhpcy5pc0Z1bGxzY3JlZW4kLm1hcCgobW9kZSkgPT4gKG1vZGUgPyBcImludmlzaWJsZVwiIDogXCJ2aXNpYmxlXCIpKTtcclxuXHJcblx0XHQvLyNyZWdpb24gbWFuYWdlIHNlY29uZCBzaWRlYmFyXHJcblx0XHR0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDaGFuZ2VTZWNvbmRTaWRlbmF2TW9kZShcInB1c2hcIikpO1xyXG5cdFx0dGhpcy5zaG93U2Vjb25kU2lkZW5hdiA9IHRoaXMuc3RvcmUuc2VsZWN0KGdldFNob3dTZWNvbmRTaWRlYmFyU3RhdHVzKTtcclxuXHRcdHRoaXMuc2Vjb25kU2lkZW5hdk1vZGUgPSB0aGlzLnN0b3JlLnNlbGVjdChnZXRTZWNvbmRTaWRlYmFyTW9kZSk7XHJcblx0XHQvLyNlbmRyZWdpb24gbWFuYWdlIHNlY29uZCBzaWRlYmFyXHJcblxyXG5cdFx0dGhpcy5sYXlvdXRNb2RlID0gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0TGF5b3V0TW9kZSk7XHJcblxyXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzLmZpbHRlcigoZGF0YSkgPT4gZGF0YSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuXHRcdFx0Y29uc3QgaGlkZVNpdHVhdGlvbnMgPSBbXHJcblx0XHRcdFx0KGV2ZW50IGFzIE5hdmlnYXRpb25FbmQpLnVybEFmdGVyUmVkaXJlY3RzID09IFwiL2F1dGgvc2lnbmluXCIsXHJcblx0XHRcdFx0KGV2ZW50IGFzIE5hdmlnYXRpb25FbmQpLnVybEFmdGVyUmVkaXJlY3RzID09IFwiL2F1dGgvc2lnbnVwL3JlZ2lzdGVyXCIsXHJcblx0XHRcdFx0KGV2ZW50IGFzIE5hdmlnYXRpb25FbmQpLnVybEFmdGVyUmVkaXJlY3RzID09IFwiL2F1dGgvc2lnbnVwL3ZlcmlmaWNhdGlvblwiLFxyXG5cdFx0XHRcdChldmVudCBhcyBOYXZpZ2F0aW9uRW5kKS51cmxBZnRlclJlZGlyZWN0cyA9PSBcIi91c2VyL3Bhc3N3b3JkL3Jlc2V0XCJcclxuXHRcdFx0XTtcclxuXHRcdFx0aWYgKGhpZGVTaXR1YXRpb25zLnNvbWUoKGkpID0+IGkpKSB0aGlzLnNob3dTaWRlYmFyTWVudS5uZXh0KGZhbHNlKTtcclxuXHRcdFx0ZWxzZSB0aGlzLnNob3dTaWRlYmFyTWVudS5uZXh0KHRydWUpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcblx0Ly8gXHR0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDaGFuZ2VMYXlvdXQoXCJ3aXRoLW1hcmdpblwiKSk7XHJcblx0Ly8gfVxyXG5cclxuXHRvblNlY29uZFNpZGViYXJDbG9zZWRTdGFydCgpIHtcclxuXHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENsb3NlU2Vjb25kU2lkZW5hdkFjdGlvbigpKTtcclxuXHR9XHJcblxyXG5cdG9uU2lkZWJhckNsb3NlZFN0YXJ0KCkge1xyXG5cdFx0dGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2xvc2VTaWRlbmF2QWN0aW9uKCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogcHJpdmF0ZSBtZXRob2RzXHJcblx0ICovXHJcblx0X3NldF9pMThuX3Jlc291cmNlKCkge1xyXG5cdFx0dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdlbicsIHtcclxuXHRcdFx0X19TaWduaW46ICdTaWduaW4nLFxyXG5cdFx0XHRfX1NpZ251cDogJ1NpZ251cCdcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdmYScsIHtcclxuXHRcdFx0U2lnbmluOiAnw5nCiMOYwrHDmcKIw5jCrycsXHJcblx0XHRcdFNpZ251cDogJ8OYwqvDmMKow5jCqiDDmcKGw5jCp8OZwoUnXHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzL09ic2VydmFibGVcIjtcclxuaW1wb3J0IFwicnhqcy9hZGQvb3BlcmF0b3IvbWFwXCI7XHJcbmltcG9ydCBcInJ4anMvYWRkL29wZXJhdG9yL21lcmdlTWFwXCI7XHJcbmltcG9ydCBcInJ4anMvYWRkL29wZXJhdG9yL2RvXCI7XHJcbmltcG9ydCBcInJ4anMvYWRkL29wZXJhdG9yL2NhdGNoXCI7XHJcbmltcG9ydCBcInJ4anMvYWRkL29ic2VydmFibGUvZW1wdHlcIjtcclxuaW1wb3J0IHsgQWN0aW9uLCBTdG9yZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBFZmZlY3QgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXJBY3Rpb24gfSBmcm9tIFwiQG5ncngvcm91dGVyLXN0b3JlXCI7XHJcbmltcG9ydCB7IHN3aXRjaE1hcCwgbWFwLCBjYXRjaEVycm9yLCB0YXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5pbXBvcnQgeyBEb1NpZ25vdXRBY3Rpb24gfSBmcm9tIFwiQHNvdXNoaWFucy9hdXRoZW50aWNhdGlvblwiO1xyXG5cclxuaW1wb3J0IHtcclxuXHRMYXlvdXRBY3Rpb25UeXBlcyxcclxuXHRJbnZpc2libGVUb29sYmFyQWN0aW9uLFxyXG5cdFZpc2libGVUb29sYmFyQWN0aW9uLFxyXG5cdEV4aXRGdWxsc2NyZWVuQWN0aW9uLFxyXG5cdEZ1bGxzY3JlZW5BY3Rpb25cclxufSBmcm9tIFwiLi9hY3Rpb25zXCI7XHJcbmltcG9ydCB7IEZlYXR1cmVTdGF0ZSwgZ2V0RnVsbHNjcmVlbk1vZGUgfSBmcm9tIFwiLi9yZWR1Y2Vyc1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0RWZmZWN0cyB7XHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucywgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBzdG9yZTogU3RvcmU8RmVhdHVyZVN0YXRlPikge31cclxuXHJcblx0QEVmZmVjdCgpIERvU2lnbm91dCQgPSB0aGlzLmFjdGlvbnMkLm9mVHlwZShMYXlvdXRBY3Rpb25UeXBlcy5ET19TSUdOT1VUKS5waXBlKG1hcCgoKSA9PiBuZXcgRG9TaWdub3V0QWN0aW9uKCkpKTtcclxuXHJcblx0QEVmZmVjdCgpXHJcblx0ZnVsbHNjcmVlbiQgPSB0aGlzLmFjdGlvbnMkLm9mVHlwZShMYXlvdXRBY3Rpb25UeXBlcy5GVUxMU0NSRUVOKS5waXBlKG1hcCgoKSA9PiBuZXcgSW52aXNpYmxlVG9vbGJhckFjdGlvbigpKSk7XHJcblxyXG5cdEBFZmZlY3QoKVxyXG5cdGV4aXRfZnVsbHNjcmVlbiQgPSB0aGlzLmFjdGlvbnMkXHJcblx0XHQub2ZUeXBlKExheW91dEFjdGlvblR5cGVzLkVYSVRfRlVMTFNDUkVFTilcclxuXHRcdC5waXBlKG1hcCgoKSA9PiBuZXcgVmlzaWJsZVRvb2xiYXJBY3Rpb24oKSkpO1xyXG5cclxuXHRARWZmZWN0KClcclxuXHRmdWxsc2NyZW5fdG9vbGJhciQgPSB0aGlzLmFjdGlvbnMkLm9mVHlwZShMYXlvdXRBY3Rpb25UeXBlcy5UT0dHTEVfRlVMTFNDUkVFTikucGlwZShcclxuXHRcdHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RvcmUuc2VsZWN0KGdldEZ1bGxzY3JlZW5Nb2RlKSksXHJcblx0XHRtYXAoKFsgYWN0aW9uLCB0b29sYmFyTW9kZSBdKSA9PiB7XHJcblx0XHRcdGlmICh0b29sYmFyTW9kZSkgcmV0dXJuIG5ldyBFeGl0RnVsbHNjcmVlbkFjdGlvbigpO1xyXG5cdFx0XHRlbHNlIHJldHVybiBuZXcgRnVsbHNjcmVlbkFjdGlvbigpO1xyXG5cdFx0fSlcclxuXHQpO1xyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEhvc3RMaXN0ZW5lciwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSBcInJ4anMvQmVoYXZpb3JTdWJqZWN0XCI7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSBcIkBuZ3J4L3N0b3JlXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anMvT2JzZXJ2YWJsZVwiO1xyXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSBcInJ4anMvb2JzZXJ2YWJsZS9mcm9tXCI7XHJcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSBcInJ4anMvb2JzZXJ2YWJsZS9mcm9tRXZlbnRcIjtcclxuaW1wb3J0IHsgb2YgfSBmcm9tIFwicnhqcy9vYnNlcnZhYmxlL29mXCI7XHJcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCB0cmFuc2l0aW9uLCBzdHlsZSwgYW5pbWF0ZSB9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcblxyXG5pbXBvcnQgeyBVc2VyTW9kZWwsIGdldEFjY291bnRJbmZvIH0gZnJvbSBcIkBzb3VzaGlhbnMvdXNlclwiO1xyXG5cclxuaW1wb3J0ICogYXMgZnJvbUxheW91dCBmcm9tIFwiLi4vLi4vcmVkdWNlcnNcIjtcclxuaW1wb3J0IHtcclxuXHREb1NpZ25vdXRBY3Rpb24sXHJcblx0T3BlblNlY29uZFNpZGVuYXZBY3Rpb24sXHJcblx0Q2xvc2VTZWNvbmRTaWRlbmF2QWN0aW9uLFxyXG5cdENsb3NlU2lkZW5hdkFjdGlvbixcclxuXHRPcGVuU2lkZW5hdkFjdGlvbixcclxuXHRDaGFuZ2VUb29sYmF0VG9Db21mb3J0YWJsZU1vZGVBY3Rpb24sXHJcblx0Q2hhbmdlVG9vbGJhdFRvQ29tcGFjdE1vZGVBY3Rpb24sXHJcblx0Q2hhbmdlVG9vbGJhdFRvU3VtbWFyeU1vZGVBY3Rpb25cclxufSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xyXG5pbXBvcnQgeyBGZWF0dXJlU3RhdGUsIGdldFNob3dTZWNvbmRTaWRlYmFyU3RhdHVzLCBnZXRMYXlvdXRUb29sYmFyIH0gZnJvbSBcIi4uLy4uL3JlZHVjZXJzXCI7XHJcblxyXG5pbXBvcnQgeyBMYXlvdXRDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9sYXlvdXQtY29uZmlndXJhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0YXRlIGFzIHRvb2xiYXJTdGF0ZSB9IGZyb20gXCIuLi8uLi9yZWR1Y2Vycy90b29sYmFyLnJlZHVjZXJcIjtcclxuaW1wb3J0IHsgbWFwLCBjb21iaW5lTGF0ZXN0IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogXCJsYXlvdXQtdG9vbGJhci1iXCIsXHJcblx0dGVtcGxhdGU6IGA8bWF0LXRvb2xiYXIgZGlyPVwicnRsXCIgY29sb3I9XCJwcmltYXJ5XCIgW0B0b29sYmFyQW5pbWF0aW9uXT1cInRvb2xiYXJBbmltYXRpb25TdGF0ZVwiPlxyXG4gIDxtYXQtdG9vbGJhci1yb3cgZGlyPVwicnRsXCIgaWQ9XCJmaXJzdFRvb2xiYXJcIj5cclxuICAgIDwhLS0gPGRpdiBpZD1cImJhY2tncm91bmRcIj48L2Rpdj4gLS0+XHJcbiAgICA8aW1nIFtAbG9nb0FuaW1hdGlvbl09XCJsb2dvQW5pbWF0aW9uU3RhdGVcIiBpZD1cImxvZ29cIiByb3V0ZXJMaW5rPScvJyBzcmM9J2Fzc2V0cy9sb2dvcy9sb2dvLXR5cGUucG5nJyAvPlxyXG5cclxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPSdzaG93U2lkZWJhck1lbnUgJiYgZmFsc2UnIChjbGljayk9XCJ0b2dnbGVNYWluU2lkZWJhcigpXCIgbWF0LWljb24tYnV0dG9uIGZ4RmxleD1cIm5vZ3Jvd1wiXHJcbiAgICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPHNwYW4gW0B0aXRsZUFuaW1hdGlvbl09XCJ0aXRsZUFuaW1hdGlvblN0YXRlXCIgaWQ9J2FwcC1uYW1lJz5cclxuICAgICAge3thcHBfY29uZmlnPy5Db25maWcuQXBwVGl0bGV9fVxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGFwcC10aXRsZSBmeEZsZXggZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPjwvYXBwLXRpdGxlPlxyXG4gICAgPGFwcC1zZWFyY2gtYm94IGZ4RmxleCBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiPjwvYXBwLXNlYXJjaC1ib3g+XHJcblxyXG5cclxuICAgIDxidXR0b24gKm5nSWY9XCIhZGlzcGxheU5hbWVcIiBtYXQtYnV0dG9uIHJvdXRlckxpbms9XCJhdXRoL3NpZ25pblwiPlxyXG4gICAgICA8c3BhbiBbdHJhbnNsYXRlXT1cIidfX1NpZ25pbidcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gdHJhbnNsYXRlICpuZ0lmPVwiIWRpc3BsYXlOYW1lXCIgbWF0LWJ1dHRvbiByb3V0ZXJMaW5rPVwiYXV0aC9zaWdudXBcIj5cclxuICAgICAgX19TaWdudXBcclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cImRpc3BsYXlOYW1lXCIgbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0b29sYmFyTWVudTFcIj5cclxuICAgICAgPG1hdC1pY29uPmFjY291bnRfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPG1hdC1tZW51ICN0b29sYmFyTWVudTEgY2xhc3M9XCJydGwtZGlyXCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJhY2Njb3VudE5hbWVcIj5cclxuICAgICAgICB7e2Rpc3BsYXlOYW1lfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxidXR0b24gcm91dGVyTGluaz0nL3VzZXIvcGFuZWwnIG1hdC1tZW51LWl0ZW0gY2xhc3M9XCJydGwtZGlyXCI+XHJcbiAgICAgICAgPG1hdC1pY29uPmZpbmdlcnByaW50PC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgIMOZwoXDmMKvw5vCjMOYwrHDm8KMw5jCqiDDmsKpw5jCp8OYwrHDmMKow5jCscObwoxcclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9J3NpZ25vdXQoKScgbWF0LW1lbnUtaXRlbSBjbGFzcz1cInJ0bC1kaXJcIj5cclxuICAgICAgICA8bWF0LWljb24+ZXhpdF90b19hcHA8L21hdC1pY29uPlxyXG4gICAgICAgIDxzcGFuPsOYwq7DmMKxw5nCiMOYwqw8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9tYXQtbWVudT5cclxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9nZ2xlU2Vjb25kU2lkZWJhcigpXCIgZnhGbGV4PVwibm9ncm93XCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPm5vdGlmaWNhdGlvbnM8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSdnb2JhY2soKSc+XHJcbiAgICAgIDxtYXQtaWNvbj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICA8L21hdC10b29sYmFyLXJvdz5cclxuICA8bWF0LXRvb2xiYXItcm93PlxyXG4gICAgPGRpdiBpZD1cInNlY29uZFRvb2xiYXJcIiBbQG1lbnVBbmltYXRpb25dPVwibWVudUFuaW1hdGlvblN0YXRlXCI+XHJcbiAgICAgIDxyb3V0ZXItb3V0bGV0IG5hbWU9XCJuZ3MtbGF5b3V0LWJlZm9yZS10b29sYmFyLW1lbnVcIj48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAqbmdGb3I9XCJsZXQgbWVudSBvZiBtZW51SXRlbXMkIHwgYXN5bmNcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCIgW3JvdXRlckxpbmtdPVwiW21lbnUucm91dGVdXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24gbWF0LWxpc3QtaWNvbj57e21lbnUuaWNvbn19PC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHNwYW4+e3ttZW51LnRpdGxlfX08L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8cm91dGVyLW91dGxldCBuYW1lPVwibmdzLWxheW91dC1hZnRlci10b29sYmFyLW1lbnVcIj48L3JvdXRlci1vdXRsZXQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC10b29sYmFyLXJvdz5cclxuPC9tYXQtdG9vbGJhcj5gLFxyXG5cdHN0eWxlczogW2Ajc2Vjb25kVG9vbGJhcnt0cmFuc2l0aW9uOm5vbmU7cG9zaXRpb246YWJzb2x1dGV9I3NlY29uZFRvb2xiYXIgYnV0dG9ue29wYWNpdHk6LjY7Zm9udC1mYW1pbHk6aXJhbi1zYW5zLWJvbGQsc2Fucy1zZXJpZiFpbXBvcnRhbnQ7Zm9udC1zaXplOi42NWVtIWltcG9ydGFudDtoZWlnaHQ6NTBweCFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czowIWltcG9ydGFudH0jc2Vjb25kVG9vbGJhciBidXR0b24uYWN0aXZle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICNmZjc0MDA7b3BhY2l0eToxfSNsb2dve3RyYW5zaXRpb246bm9uZTtwb3NpdGlvbjphYnNvbHV0ZX0jYXBwLW5hbWV7cGFkZGluZy1yaWdodDo4cHg7Zm9udC1mYW1pbHk6aXJhbi1zYW5zLWJvbGQsc2Fucy1zZXJpZiFpbXBvcnRhbnR9YnV0dG9uLnJ0bC1kaXJ7ZGlyZWN0aW9uOnJ0bCFpbXBvcnRhbnR9I2FjY2NvdW50TmFtZXtkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246cmlnaHQ7cGFkZGluZy1yaWdodDoyMHB4O2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0OmJvbGRlcn1gXSxcclxuXHRhbmltYXRpb25zOiBbXHJcblx0XHR0cmlnZ2VyKFwibG9nb0FuaW1hdGlvblwiLCBbXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiY29tZm9ydGFibGVcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRoZWlnaHQ6IFwiNDhweFwiLFxyXG5cdFx0XHRcdFx0dG9wOiBcIjUwcHhcIixcclxuXHRcdFx0XHRcdHJpZ2h0OiBcImNhbGMoNTAlIC0gNTBweClcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiY29tcGFjdFwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdGhlaWdodDogXCIzNnB4XCIsXHJcblx0XHRcdFx0XHR0b3A6IFwiMTNweFwiLFxyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiMTNweFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJzdW1tYXJ5XCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0aGVpZ2h0OiBcIjM2cHhcIixcclxuXHRcdFx0XHRcdHRvcDogXCI1N3B4XCIsXHJcblx0XHRcdFx0XHRyaWdodDogXCIxMHB4XCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImhpZGVcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHR3aWR0aDogXCIwXCIsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IFwiMFwiLFxyXG5cdFx0XHRcdFx0dG9wOiBcIjU3cHhcIixcclxuXHRcdFx0XHRcdHJpZ2h0OiBcIjEwcHhcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0Ly8gdHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI0MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2Utb3V0XCIpKVxyXG5cdFx0XSksXHJcblx0XHR0cmlnZ2VyKFwibWVudUFuaW1hdGlvblwiLCBbXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiY29tZm9ydGFibGVcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRyaWdodDogXCI1MCVcIixcclxuXHRcdFx0XHRcdHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDUwJSlcIixcclxuXHRcdFx0XHRcdGJvdHRvbTogXCIwXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbXBhY3RcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRyaWdodDogXCI1MCVcIixcclxuXHRcdFx0XHRcdHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDUwJSlcIixcclxuXHRcdFx0XHRcdGJvdHRvbTogXCIwXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcInN1bW1hcnlcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRyaWdodDogXCI3NXB4XCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCgwKVwiLFxyXG5cdFx0XHRcdFx0Ym90dG9tOiBcIjBcIlxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiaGlkZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdHJpZ2h0OiBcIjc1cHhcIixcclxuXHRcdFx0XHRcdHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDApXCIsXHJcblx0XHRcdFx0XHRib3R0b206IFwiMFwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW4tb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IGhpZGVcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2UtaW4tb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjYwMG1zIGVhc2UtaW4tb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gaGlkZVwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1pbi1vdXRcIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI2MDBtcyBlYXNlLWluLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGhpZGVcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2UtaW4tb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiNjAwbXMgZWFzZS1pbi1vdXRcIikpLFxyXG5cdFx0XHQvLyB0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGNvbXBhY3RcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcInN1bW1hcnkgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2Utb3V0XCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImNvbXBhY3QgPT4gc3VtbWFyeVwiLCBhbmltYXRlKFwiNDAwbXMgZWFzZS1pbi1vdXRcIikpXHJcblx0XHRdKSxcclxuXHRcdHRyaWdnZXIoXCJ0aXRsZUFuaW1hdGlvblwiLCBbXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiY29tZm9ydGFibGVcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRcIm1hcmdpbi1yaWdodFwiOiBcIjBweFwiLFxyXG5cdFx0XHRcdFx0XCJmb250LXNpemVcIjogXCJsYXJnZXJcIixcclxuXHRcdFx0XHRcdFwiZm9udC13ZWlnaHRcIjogXCJib2xkZXJcIixcclxuXHRcdFx0XHRcdHRyYW5zZm9ybTogXCJ0cmFuc2xhdGVYKDUwJSlcIixcclxuXHRcdFx0XHRcdHJpZ2h0OiBcImNhbGMoNTAlKVwiLFxyXG5cdFx0XHRcdFx0Ym90dG9tOiBcIjc1cHhcIixcclxuXHRcdFx0XHRcdHBvc2l0aW9uOiBcImFic29sdXRlXCIsXHJcblx0XHRcdFx0XHRwYWRkaW5nOiAwXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJjb21wYWN0XCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0XCJtYXJnaW4tcmlnaHRcIjogXCIwcHhcIixcclxuXHRcdFx0XHRcdFwiZm9udC1zaXplXCI6IFwiMTZweFwiLFxyXG5cdFx0XHRcdFx0XCJmb250LXdlaWdodFwiOiBcImJvbGRlclwiLFxyXG5cdFx0XHRcdFx0cmlnaHQ6IFwiNTAlXCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCg1MCUpXCIsXHJcblx0XHRcdFx0XHRib3R0b206IFwiNTFweFwiLFxyXG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYWJzb2x1dGVcIixcclxuXHRcdFx0XHRcdHBhZGRpbmc6IDBcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcInN1bW1hcnlcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHRcIm1hcmdpbi1yaWdodFwiOiBcIjBweFwiLFxyXG5cdFx0XHRcdFx0XCJmb250LXNpemVcIjogXCIxNnB4XCIsXHJcblx0XHRcdFx0XHRcImZvbnQtd2VpZ2h0XCI6IFwiYm9sZGVyXCIsXHJcblx0XHRcdFx0XHR0cmFuc2Zvcm06IFwidHJhbnNsYXRlWCg1MCUpXCIsXHJcblx0XHRcdFx0XHRyaWdodDogXCI1MCVcIixcclxuXHRcdFx0XHRcdGJvdHRvbTogXCI3OXB4XCIsXHJcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxyXG5cdFx0XHRcdFx0cGFkZGluZzogMFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHN0YXRlKFxyXG5cdFx0XHRcdFwiaGlkZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdFwibWFyZ2luLXJpZ2h0XCI6IFwiMHB4XCIsXHJcblx0XHRcdFx0XHRcImZvbnQtc2l6ZVwiOiBcIjFweFwiLFxyXG5cdFx0XHRcdFx0XCJmb250LXdlaWdodFwiOiBcImJvbGRlclwiLFxyXG5cdFx0XHRcdFx0Ly8gdHJhbnNmb3JtOiBcInRyYW5zbGF0ZVgoMClcIixcclxuXHRcdFx0XHRcdC8vIHJpZ2h0OiBcIjYwcHhcIixcclxuXHRcdFx0XHRcdGJvdHRvbTogXCI3OXB4XCIsXHJcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxyXG5cdFx0XHRcdFx0cGFkZGluZzogMFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI4NTBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0Ly8gdHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI0MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2UtaW5cIikpXHJcblx0XHRdKSxcclxuXHRcdHRyaWdnZXIoXCJ0b29sYmFyQW5pbWF0aW9uXCIsIFtcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJjb21mb3J0YWJsZVwiLFxyXG5cdFx0XHRcdHN0eWxlKHtcclxuXHRcdFx0XHRcdC8vIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDExOSwxODEsNjMsMSlcIixcclxuXHRcdFx0XHRcdGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDI1NiwyNTYsMjU2LDEpXCIsXHJcblx0XHRcdFx0XHRjb2xvcjogXCJyZ2JhKDMwLDMwLDMwLDEpXCIsXHJcblx0XHRcdFx0XHRoZWlnaHQ6IFwiMzN2aFwiLFxyXG5cdFx0XHRcdFx0dG9wOiBcIjBcIixcclxuXHRcdFx0XHRcdC8vIGJveFNoYWRvdzogXCIwcHggMXB4IDNweCByZ2JhKDAsMCwwLDApXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImNvbXBhY3RcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHQvLyBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTYsMjU2LDI1NiwxKVwiLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBcIjEwMHB4XCIsXHJcblx0XHRcdFx0XHR0b3A6IFwiMFwiLFxyXG5cdFx0XHRcdFx0Ly8gYm94U2hhZG93OiBcIjFweCAxcHggM3B4IHJnYmEoMCwwLDAsMC41KVwiXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSxcclxuXHRcdFx0c3RhdGUoXHJcblx0XHRcdFx0XCJzdW1tYXJ5XCIsXHJcblx0XHRcdFx0c3R5bGUoe1xyXG5cdFx0XHRcdFx0Ly8gYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMjU2LDI1NiwyNTYsMSlcIixcclxuXHRcdFx0XHRcdGhlaWdodDogXCIxMDBweFwiLFxyXG5cdFx0XHRcdFx0dG9wOiBcIi01MHB4XCIsXHJcblx0XHRcdFx0XHQvLyBib3hTaGFkb3c6IFwiMXB4IDFweCAzcHggcmdiYSgwLDAsMCwwLjUpXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHRzdGF0ZShcclxuXHRcdFx0XHRcImhpZGVcIixcclxuXHRcdFx0XHRzdHlsZSh7XHJcblx0XHRcdFx0XHQvLyBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTYsMjU2LDI1NiwxKVwiLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBcIjEwMHB4XCIsXHJcblx0XHRcdFx0XHR0b3A6IFwiLTEwMHB4XCIsXHJcblx0XHRcdFx0XHQvLyBib3hTaGFkb3c6IFwiMXB4IDFweCAzcHggcmdiYSgwLDAsMCwwLjUpXCJcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tZm9ydGFibGUgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21mb3J0YWJsZSA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tZm9ydGFibGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiY29tcGFjdCA9PiBoaWRlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0dHJhbnNpdGlvbihcImhpZGUgPT4gY29tcGFjdFwiLCBhbmltYXRlKFwiODAwbXMgZWFzZS1pblwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGhpZGVcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwiaGlkZSA9PiBzdW1tYXJ5XCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLWluXCIpKSxcclxuXHRcdFx0Ly8gdHJhbnNpdGlvbihcImNvbWZvcnRhYmxlID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjgwMG1zIGVhc2UtaW5cIikpLFxyXG5cdFx0XHR0cmFuc2l0aW9uKFwic3VtbWFyeSA9PiBjb21wYWN0XCIsIGFuaW1hdGUoXCI0MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJzdW1tYXJ5ID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IGNvbWZvcnRhYmxlXCIsIGFuaW1hdGUoXCI4MDBtcyBlYXNlLW91dFwiKSksXHJcblx0XHRcdHRyYW5zaXRpb24oXCJjb21wYWN0ID0+IHN1bW1hcnlcIiwgYW5pbWF0ZShcIjQwMG1zIGVhc2UtaW5cIikpXHJcblx0XHRdKVxyXG5cdF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRvb2xiYXJNZW51VGhlbWVCQ29tcG9uZW50IHtcclxuXHRzaG93U2Vjb25kU2lkZW5hdjogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHRASW5wdXQoKSBzaG93U2lkZWJhck1lbnU7XHJcblx0QElucHV0KFwiYXBwLWNvbmZpZ1wiKSBhcHBfY29uZmlnO1xyXG5cdEBJbnB1dCgpIHVzZXI6IFVzZXJNb2RlbDtcclxuXHRASW5wdXQoKSBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG5cdHVzZXIkOiBPYnNlcnZhYmxlPFVzZXJNb2RlbD47XHJcblx0c2hvd01haW5TaWRlbmF2OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cdHRvb2xiYXJBbmltYXRpb25TdGF0ZTogXCJjb21mb3J0YWJsZVwiIHwgXCJjb21wYWN0XCIgfCBcInN1bW1hcnlcIiB8IFwiaGlkZVwiID0gXCJjb21wYWN0XCI7XHJcblx0bWVudUFuaW1hdGlvblN0YXRlOiBcImNvbWZvcnRhYmxlXCIgfCBcImNvbXBhY3RcIiB8IFwic3VtbWFyeVwiIHwgXCJoaWRlXCIgPSBcImNvbXBhY3RcIjtcclxuXHRsb2dvQW5pbWF0aW9uU3RhdGU6IFwiY29tZm9ydGFibGVcIiB8IFwiY29tcGFjdFwiIHwgXCJzdW1tYXJ5XCIgfCBcImhpZGVcIiA9IFwiY29tcGFjdFwiO1xyXG5cdHRpdGxlQW5pbWF0aW9uU3RhdGU6IFwiY29tZm9ydGFibGVcIiB8IFwiY29tcGFjdFwiIHwgXCJzdW1tYXJ5XCIgfCBcImhpZGVcIiA9IFwiY29tcGFjdFwiO1xyXG5cdG1lbnVJdGVtcyQ6IE9ic2VydmFibGU8YW55W10+O1xyXG5cdGxhc3RTY3JvbGw6IG51bWJlcjtcclxuXHRjb25maWc6IHRvb2xiYXJTdGF0ZTtcclxuXHRjb25maWckOiBPYnNlcnZhYmxlPHRvb2xiYXJTdGF0ZT47XHJcblx0YW5jaG9yc01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSxcclxuXHRcdHByaXZhdGUgX2xvY2F0aW9uOiBMb2NhdGlvbixcclxuXHRcdHByaXZhdGUgc3RvcmU6IFN0b3JlPEZlYXR1cmVTdGF0ZT4sXHJcblx0XHRwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwdWJsaWMgY29uZmlndXJhdGlvblNlcnZpY2U6IExheW91dENvbmZpZ3VyYXRpb25TZXJ2aWNlXHJcblx0KSB7XHJcblx0XHRkZWJ1Z2dlcjtcclxuXHRcdHRyYW5zbGF0ZVNlcnZpY2UuZ2V0KCdfX1NpZ25pbicpLnN1YnNjcmliZSgocmVzOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0ZGVidWdnZXI7XHJcblx0XHRcdGNvbnNvbGUubG9nKHJlcyk7XHJcblx0XHRcdC8vPT4gJ2hlbGxvIHdvcmxkJ1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnVzZXIkID0gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0QWNjb3VudEluZm8pO1xyXG5cdFx0dGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2hhbmdlVG9vbGJhdFRvQ29tZm9ydGFibGVNb2RlQWN0aW9uKCkpO1xyXG5cdFx0dGhpcy5jb25maWckID0gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0TGF5b3V0VG9vbGJhcik7XHJcblx0XHR0aGlzLmNvbmZpZyQuc3Vic2NyaWJlKGNvbmZpZyA9PiAodGhpcy5jb25maWcgPSBjb25maWcpKTtcclxuXHRcdHRoaXMubGFzdFNjcm9sbCA9IHRoaXMuZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XHJcblx0XHR0aGlzLnNob3dTZWNvbmRTaWRlbmF2ID0gdGhpcy5zdG9yZS5zZWxlY3QoZ2V0U2hvd1NlY29uZFNpZGViYXJTdGF0dXMpO1xyXG5cdFx0dGhpcy5zaG93TWFpblNpZGVuYXYgPSB0aGlzLnN0b3JlLnNlbGVjdChmcm9tTGF5b3V0LmdldFNob3dNYWluU2lkZW5hdik7XHJcblx0XHR0aGlzLnN0b3JlLnNlbGVjdChmcm9tTGF5b3V0LmdldExheW91dFRvb2xiYXJNb2RlKS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm1lbnVBbmltYXRpb25TdGF0ZSA9IHN0YXRlKSwgMSk7XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gKHRoaXMubG9nb0FuaW1hdGlvblN0YXRlID0gc3RhdGUpLCAxKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiAodGhpcy50aXRsZUFuaW1hdGlvblN0YXRlID0gc3RhdGUpLCAxKTtcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiAodGhpcy50b29sYmFyQW5pbWF0aW9uU3RhdGUgPSBzdGF0ZSksIDEpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLl9vYnNlcnZlX29uX2xheW91dF9jb25maWdfYW5kX2ZpbHRlcl9yb3V0ZXMoKTtcclxuXHJcblx0XHRmcm9tRXZlbnQodGhpcy5kb2N1bWVudC5ib2R5LCBcInNjcm9sbFwiKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRsZXQgc2Nyb2xsZWRBbW91bnQgPSB0aGlzLmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO1xyXG5cdFx0XHRsZXQgc2Nyb2xsVG9Ub3AgPVxyXG5cdFx0XHRcdHNjcm9sbGVkQW1vdW50IC0gdGhpcy5sYXN0U2Nyb2xsIDwgMCAmJlxyXG5cdFx0XHRcdHRoaXMuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQgLSBkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCAtIHNjcm9sbGVkQW1vdW50ID4gMzAwO1xyXG5cdFx0XHQvLyBsZXQgc2Nyb2xsVG9Ub3AgPSBzY3JvbGxlZEFtb3VudCAtIHRoaXMubGFzdFNjcm9sbCA8IDA7XHJcblx0XHRcdHRoaXMubGFzdFNjcm9sbCA9IHNjcm9sbGVkQW1vdW50O1xyXG5cdFx0XHRpZiAoIXRoaXMuY29uZmlnLnZpc2liaWxpdHkpIHJldHVybjtcclxuXHRcdFx0aWYgKHNjcm9sbGVkQW1vdW50ID09IDApIHtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcubW9kZSA9PSBcImNvbWZvcnRhYmxlXCIpIHJldHVybjtcclxuXHRcdFx0XHR0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDaGFuZ2VUb29sYmF0VG9Db21mb3J0YWJsZU1vZGVBY3Rpb24oKSk7XHJcblx0XHRcdH0gZWxzZSBpZiAoc2Nyb2xsZWRBbW91bnQgPCAxNTAgfHwgc2Nyb2xsVG9Ub3ApIHtcclxuXHRcdFx0XHRpZiAodGhpcy5jb25maWcubW9kZSA9PSBcImNvbXBhY3RcIikgcmV0dXJuO1xyXG5cdFx0XHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENoYW5nZVRvb2xiYXRUb0NvbXBhY3RNb2RlQWN0aW9uKCkpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZy5tb2RlID09IFwic3VtbWFyeVwiKSByZXR1cm47XHJcblx0XHRcdFx0dGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQ2hhbmdlVG9vbGJhdFRvU3VtbWFyeU1vZGVBY3Rpb24oKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0QEhvc3RMaXN0ZW5lcihcImJvZHk6c2Nyb2xsXCIsIFtdKVxyXG5cdG9uV2luZG93U2Nyb2xsKCkge1xyXG5cdFx0Ly8gb2YoMSlcclxuXHR9XHJcblx0c2lnbm91dCgpIHtcclxuXHRcdHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IERvU2lnbm91dEFjdGlvbigpKTtcclxuXHR9XHJcblx0Z29iYWNrKCkge1xyXG5cdFx0dGhpcy5fbG9jYXRpb24uYmFjaygpO1xyXG5cdH1cclxuXHR0b2dnbGVTZWNvbmRTaWRlYmFyKCkge1xyXG5cdFx0bGV0IGFjdGlvbjtcclxuXHRcdHRoaXMuc2hvd1NlY29uZFNpZGVuYXYuc3Vic2NyaWJlKHN0YXRlID0+IHtcclxuXHRcdFx0YWN0aW9uID0gc3RhdGUgPyBuZXcgQ2xvc2VTZWNvbmRTaWRlbmF2QWN0aW9uKCkgOiBuZXcgT3BlblNlY29uZFNpZGVuYXZBY3Rpb24oKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5zdG9yZS5kaXNwYXRjaChhY3Rpb24pO1xyXG5cdH1cclxuXHR0b2dnbGVNYWluU2lkZWJhcigpIHtcclxuXHRcdGxldCBhY3Rpb247XHJcblx0XHR0aGlzLnNob3dNYWluU2lkZW5hdi5zdWJzY3JpYmUoc3RhdGUgPT4ge1xyXG5cdFx0XHRhY3Rpb24gPSBzdGF0ZSA/IG5ldyBDbG9zZVNpZGVuYXZBY3Rpb24oKSA6IG5ldyBPcGVuU2lkZW5hdkFjdGlvbigpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGlvbik7XHJcblx0fVxyXG5cdF9vYnNlcnZlX29uX2xheW91dF9jb25maWdfYW5kX2ZpbHRlcl9yb3V0ZXMoKSB7XHJcblx0XHR0aGlzLm1lbnVJdGVtcyQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNvbmZpZyQucGlwZShcclxuXHRcdFx0bWFwKGNvbmZpZyA9PiBjb25maWcubWVudUl0ZW1zKSxcclxuXHRcdFx0Y29tYmluZUxhdGVzdCh0aGlzLnVzZXIkKSxcclxuXHRcdFx0bWFwKHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuY29uZmlnJC5nZXRWYWx1ZSgpLm1lbnVfaXRlbV9hdXRob3JpemF0aW9uX29wZXJhdG9yKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMsIExPQ0FMRV9JRCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJyb3dzZXJNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBTdG9yZU1vZHVsZSB9IGZyb20gXCJAbmdyeC9zdG9yZVwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2ZsZXgtbGF5b3V0XCI7XHJcbmltcG9ydCB7IEVmZmVjdHNNb2R1bGUgfSBmcm9tIFwiQG5ncngvZWZmZWN0c1wiO1xyXG5pbXBvcnQge1xyXG5cdE1hdEljb25Nb2R1bGUsXHJcblx0TWF0QnV0dG9uTW9kdWxlLFxyXG5cdE1hdENhcmRNb2R1bGUsXHJcblx0TWF0U25hY2tCYXJNb2R1bGUsXHJcblx0TWF0U2lkZW5hdk1vZHVsZSxcclxuXHRNYXRFeHBhbnNpb25Nb2R1bGUsXHJcblx0TWF0U2VsZWN0TW9kdWxlLFxyXG5cdE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuXHRNYXRMaXN0TW9kdWxlLFxyXG5cdE1hdE1lbnVNb2R1bGUsXHJcblx0TWF0UmFkaW9Nb2R1bGUsXHJcblx0TWF0SW5wdXRNb2R1bGUsXHJcblx0TWF0VG9vbGJhck1vZHVsZSxcclxuXHRNYXREYXRlcGlja2VyTW9kdWxlLFxyXG5cdE1hdFByb2dyZXNzQmFyTW9kdWxlXHJcbn0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgTmdzQ29uZmlnTW9kdWxlIH0gZnJvbSBcIkBzb3VzaGlhbnMvY29uZmlnXCI7XHJcblxyXG5pbXBvcnQgeyBMYXlvdXRSZWR1Y2VycyB9IGZyb20gXCIuL3JlZHVjZXJzL2luZGV4XCI7XHJcblxyXG5pbXBvcnQgeyBNT0RVTEVfQ09ORklHX1RPS0VOLCBMYXlvdXRNb2R1bGVDb25maWdNb2RlbCB9IGZyb20gXCIuL2xheW91dC5jb25maWdcIjtcclxuaW1wb3J0IHsgTWFpbk1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9kdW1iLWNvbXBvbmVudHMvbWFpbi1tZW51L21haW4tbWVudS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU2VhcmNoQm94Q29tcG9uZW50IH0gZnJvbSBcIi4vZHVtYi1jb21wb25lbnRzL3NlYXJjaC1ib3gvc2VhcmNoLWJveC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTG9nb0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gXCIuL2R1bWItY29tcG9uZW50cy9sb2dvLWNvbnRhaW5lci9sb2dvLWNvbnRhaW5lci5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVG9vbGJhck1lbnVDb21wb25lbnQgfSBmcm9tIFwiLi9kdW1iLWNvbXBvbmVudHMvdG9vbGJhci1tZW51L3Rvb2xiYXItbWVudS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRm9vdGVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZHVtYi1jb21wb25lbnRzL2Zvb3Rlci9mb290ZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vZHVtYi1jb21wb25lbnRzL3RpdGxlL3RpdGxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBOZ3NMYXlvdXRNYWluQ29tcG9uZW50IH0gZnJvbSBcIi4vZHVtYi1jb21wb25lbnRzL21haW4vbWFpbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWZmZWN0cyB9IGZyb20gXCIuL2xheW91dC5lZmZlY3RzXCI7XHJcbmltcG9ydCB7IFJ1bGVNb2R1bGUgfSBmcm9tIFwiQHNvdXNoaWFucy9ydWxlXCI7XHJcbmltcG9ydCB7IFRvb2xiYXJNZW51VGhlbWVCQ29tcG9uZW50IH0gZnJvbSBcIi4vZHVtYi1jb21wb25lbnRzL3Rvb2xiYXItbWVudS10aGVtZS1iL3Rvb2xiYXItbWVudS10aGVtZS1iXCI7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG5cdGltcG9ydHM6IFtcclxuXHRcdENvbW1vbk1vZHVsZSxcclxuXHRcdEJyb3dzZXJNb2R1bGUsXHJcblx0XHRSb3V0ZXJNb2R1bGUsXHJcblx0XHRGb3Jtc01vZHVsZSxcclxuXHRcdEh0dHBDbGllbnRNb2R1bGUsXHJcblx0XHRGbGV4TGF5b3V0TW9kdWxlLFxyXG5cdFx0TWF0SWNvbk1vZHVsZSxcclxuXHRcdE1hdEJ1dHRvbk1vZHVsZSxcclxuXHRcdE1hdENhcmRNb2R1bGUsXHJcblx0XHRNYXRTbmFja0Jhck1vZHVsZSxcclxuXHRcdE1hdFNpZGVuYXZNb2R1bGUsXHJcblx0XHRNYXRFeHBhbnNpb25Nb2R1bGUsXHJcblx0XHRNYXRTZWxlY3RNb2R1bGUsXHJcblx0XHRNYXRGb3JtRmllbGRNb2R1bGUsXHJcblx0XHRNYXRMaXN0TW9kdWxlLFxyXG5cdFx0TWF0TWVudU1vZHVsZSxcclxuXHRcdE1hdFJhZGlvTW9kdWxlLFxyXG5cdFx0TWF0SW5wdXRNb2R1bGUsXHJcblx0XHRNYXRUb29sYmFyTW9kdWxlLFxyXG5cdFx0TWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuXHRcdE1hdFByb2dyZXNzQmFyTW9kdWxlLFxyXG5cdFx0Um91dGVyTW9kdWxlLFxyXG5cdFx0TmdzQ29uZmlnTW9kdWxlLFxyXG5cdFx0UnVsZU1vZHVsZVxyXG5cdF0sXHJcblx0ZGVjbGFyYXRpb25zOiBbXHJcblx0XHRNYWluTWVudUNvbXBvbmVudCxcclxuXHRcdFNlYXJjaEJveENvbXBvbmVudCxcclxuXHRcdExvZ29Db250YWluZXJDb21wb25lbnQsXHJcblx0XHRUb29sYmFyTWVudUNvbXBvbmVudCxcclxuXHRcdFRvb2xiYXJNZW51VGhlbWVCQ29tcG9uZW50LFxyXG5cdFx0Rm9vdGVyQ29tcG9uZW50LFxyXG5cdFx0VGl0bGVDb21wb25lbnQsXHJcblx0XHROZ3NMYXlvdXRNYWluQ29tcG9uZW50XHJcblx0XSxcclxuXHRleHBvcnRzOiBbXHJcblx0XHRNYWluTWVudUNvbXBvbmVudCxcclxuXHRcdFNlYXJjaEJveENvbXBvbmVudCxcclxuXHRcdExvZ29Db250YWluZXJDb21wb25lbnQsXHJcblx0XHRUb29sYmFyTWVudUNvbXBvbmVudCxcclxuXHRcdFRvb2xiYXJNZW51VGhlbWVCQ29tcG9uZW50LFxyXG5cdFx0Rm9vdGVyQ29tcG9uZW50LFxyXG5cdFx0VGl0bGVDb21wb25lbnQsXHJcblx0XHROZ3NMYXlvdXRNYWluQ29tcG9uZW50LFxyXG5cdFx0VHJhbnNsYXRlTW9kdWxlXHJcblx0XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdzTGF5b3V0TW9kdWxlIHtcclxuXHRzdGF0aWMgZm9yUm9vdChjb25maWc/OiBMYXlvdXRNb2R1bGVDb25maWdNb2RlbCk6IE1vZHVsZVdpdGhQcm92aWRlcnMge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bmdNb2R1bGU6IFJvb3ROZ3NMYXlvdXRNb2R1bGUsXHJcblx0XHRcdHByb3ZpZGVyczogW1xyXG5cdFx0XHRcdHsgcHJvdmlkZTogTE9DQUxFX0lELCB1c2VWYWx1ZTogJ2VuIGVuLVVTJyB9LFxyXG5cdFx0XHRcdHsgcHJvdmlkZTogTU9EVUxFX0NPTkZJR19UT0tFTiwgdXNlVmFsdWU6IGNvbmZpZyB9XVxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuXHJcbkBOZ01vZHVsZSh7XHJcblx0aW1wb3J0czogW1xyXG5cdFx0TmdzTGF5b3V0TW9kdWxlLFxyXG5cdFx0U3RvcmVNb2R1bGUuZm9yRmVhdHVyZShcImxheW91dFwiLCBMYXlvdXRSZWR1Y2VycyksXHJcblx0XHRFZmZlY3RzTW9kdWxlLmZvckZlYXR1cmUoW0xheW91dEVmZmVjdHNdKVxyXG5cdF0sXHJcblx0ZXhwb3J0czogW05nc0xheW91dE1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJvb3ROZ3NMYXlvdXRNb2R1bGUgeyB9XHJcbiIsImV4cG9ydCBlbnVtIExheW91dE91dGxldHMge1xyXG5cdC8vIFRPRE86IHJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24gOiA2LjAuNDVcclxuXHRuZ3NfbGF5b3V0X3Rvb2xiYXJfbWVudSA9IFwibmdzLWxheW91dC1hZnRlci10b29sYmFyLW1lbnVcIixcclxuXHRuZ3NfbGF5b3V0X2FmdGVyX3Rvb2xiYXJfbWVudSA9IFwibmdzLWxheW91dC1hZnRlci10b29sYmFyLW1lbnVcIixcclxuXHRuZ3NfbGF5b3V0X2JlZm9yZV90b29sYmFyX21lbnUgPSBcIm5ncy1sYXlvdXQtYmVmb3JlLXRvb2xiYXItbWVudVwiLFxyXG5cdGZvb3Rlcl9CID0gXCJmb290ZXJfQlwiLFxyXG5cdGZvb3Rlcl9BID0gXCJmb290ZXJfQVwiXHJcbn1cclxuIl0sIm5hbWVzIjpbIkRvU2lnbm91dEFjdGlvbiIsInN0YXRlIiwibGF5b3V0LkxheW91dEFjdGlvblR5cGVzIiwibGF5b3V0LkNMT1NFX1NJREVOQVYiLCJsYXlvdXQuT1BFTl9TSURFTkFWIiwiaW5pdGlhbFN0YXRlIiwibGF5b3V0LlJlZHVjZXIiLCJmcm9tVG9vbGJhci5SZWR1Y2VyIiwiZ2V0VGl0bGUiLCJsYXlvdXQuZ2V0VGl0bGUiLCJnZXRTaG93TWFpblNpZGVuYXYiLCJsYXlvdXQuZ2V0U2hvd01haW5TaWRlbmF2IiwiZ2V0TWFpblNpZGVOYXZNb2RlIiwibGF5b3V0LmdldE1haW5TaWRlTmF2TW9kZSIsImdldExheW91dE1vZGUiLCJsYXlvdXQuZ2V0TGF5b3V0TW9kZSIsImdldFNob3dTZWNvbmRTaWRlYmFyU3RhdHVzIiwibGF5b3V0LmdldFNob3dTZWNvbmRTaWRlYmFyU3RhdHVzIiwiZ2V0U2Vjb25kU2lkZWJhck1vZGUiLCJsYXlvdXQuZ2V0U2Vjb25kU2lkZWJhck1vZGUiLCJnZXRGdWxsc2NyZWVuTW9kZSIsImxheW91dC5nZXRGdWxsc2NyZWVuTW9kZSIsImZyb21Ub29sYmFyLmdldFRvb2xiYXJNb2RlIiwiZnJvbUxheW91dC5nZXRTaG93TWFpblNpZGVuYXYiLCJmcm9tTGF5b3V0LmdldExheW91dFRvb2xiYXJNb2RlIiwiQmVoYXZpb3JTdWJqZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFhLFlBQVksR0FBRyx1QkFBdUIsQ0FBQzs7QUFDcEQsSUFBYSxhQUFhLEdBQUcsd0JBQXdCLENBQUM7OztJQUdyRCxzQkFBdUIsK0JBQStCO0lBQ3RELFlBQWEscUJBQXFCO0lBQ2xDLGVBQWdCLHdCQUF3QjtJQUN4QyxlQUFnQix3QkFBd0I7SUFDeEMsMkJBQTRCLG1DQUFtQztJQUMvRCxxQkFBc0IsOEJBQThCO0lBQ3BELHNC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 |
\ | No newline at end of file |