@arsedizioni/ars-utils 18.2.115 → 18.2.117

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  import { Signal } from '@angular/core';
2
- import { ClipperDocumentInfo } from '@arsedizioni/ars-utils/clipper.common';
2
+ import { ClipperDocumentInfo, ClipperQueryReferencesMode } from '@arsedizioni/ars-utils/clipper.common';
3
3
  import { ClipperSearchResultManager } from '../search-result-manager/search-result-manager';
4
4
  import { ClipperDocumentManager } from '../document-manager/document-manager';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class ClipperDocumentMenuComponent extends ClipperDocumentManager {
7
- selectionSource: import("@angular/core").InputSignal<"none" | "selection" | "bag">;
7
+ selectionSource: import("@angular/core").InputSignal<"bag" | "selection" | "none">;
8
8
  protected selection: Signal<ClipperDocumentInfo[]>;
9
9
  useSelections: import("@angular/core").InputSignal<boolean>;
10
10
  parent: import("@angular/core").InputSignal<ClipperSearchResultManager>;
@@ -16,6 +16,7 @@ export declare class ClipperDocumentMenuComponent extends ClipperDocumentManager
16
16
  isLaw: import("@angular/core").InputSignal<boolean>;
17
17
  canPrint: import("@angular/core").InputSignal<boolean>;
18
18
  canFind: import("@angular/core").InputSignal<boolean>;
19
+ doOpenReferences(documentId: string | null, mode?: ClipperQueryReferencesMode | null): void;
19
20
  /**
20
21
  * Check if current item or selection is read
21
22
  * @returns 0 if not read, 1 if read, 2 if unknown
@@ -1,7 +1,7 @@
1
1
  import { BreakpointObserver } from '@angular/cdk/layout';
2
2
  import { ChangeDetectorRef, OnDestroy } from '@angular/core';
3
3
  import { MatPaginator } from '@angular/material/paginator';
4
- import { ClipperDocumentInfo, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsResult, ClipperSearchParams, ClipperSearchResult, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
4
+ import { ClipperDocumentInfo, ClipperQueryReferencesMode, ClipperSearchCalendarSnapshotResult, ClipperSearchFacetsResult, ClipperSearchParams, ClipperSearchResult, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
5
5
  import { BroadcastService, NameValueItem, ScreenService, SelectableModel } from '@arsedizioni/ars-utils/core';
6
6
  import { ApplicationDialogService } from '@arsedizioni/ars-utils/ui.application';
7
7
  import { Subject } from 'rxjs';
@@ -149,6 +149,16 @@ export declare class ClipperSearchResultManager implements OnDestroy {
149
149
  * @param query: the query string
150
150
  */
151
151
  openDocument(documentId: string | null | undefined, query?: string | null | undefined): void;
152
+ /**
153
+ * Open a references dialog
154
+ * @param documentId : the document id
155
+ * @param mode: the optional mode. Default is references in
156
+ * @param model: the optional document model
157
+ * @param anchor: the optional document anchor
158
+ * @param anchorTitle: : the optional anchor title
159
+ * @param update: true if is an update
160
+ */
161
+ openReferences(documentId: string | null, mode?: ClipperQueryReferencesMode | null, model?: number | null | undefined, anchor?: string | null | undefined, anchorTitle?: string | null | undefined, update?: boolean | null | undefined): void;
152
162
  /**
153
163
  * Save restorable data
154
164
  * @param id : the restorable id
@@ -142,6 +142,7 @@ export class ClipperDocumentManager {
142
142
  showLink(item) {
143
143
  if (!item)
144
144
  return;
145
+ console.log(JSON.stringify(item));
145
146
  let id = item.id ? item.id : item.documentId;
146
147
  let channels = item.channelName
147
148
  ? 'Canali: ' + item.channelName + '<br>'
@@ -286,6 +287,7 @@ export class ClipperDocumentManager {
286
287
  * @param update: true if is an update
287
288
  */
288
289
  openReferences(documentId, mode = ClipperQueryReferencesMode.ReferencesIn, model = null, anchor = null, anchorTitle = null, update = true) {
290
+ console.log("OPENING 2");
289
291
  const d = this.dialogService.open(ClipperReferencesComponent, {
290
292
  ariaLabel: 'documento',
291
293
  autoFocus: false,
@@ -430,4 +432,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
430
432
  ]
431
433
  }]
432
434
  }] });
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQW1DLE1BQU0sb0NBQW9DLENBQUM7QUFDakgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUFUbkM7UUFXYyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0F3YTlEO0lBdGFHOzs7R0FHRDtJQUNDLFNBQVMsQ0FBQyxJQUF5QjtRQUMv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QztJQUN6RixDQUFDO0lBRUQ7OztNQUdFO0lBQ0YsY0FBYyxDQUFDLFFBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7OEdBMWFRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdFQVJyQixhQUFhOzsyRkFRZCxzQkFBc0I7a0JBVGxDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFO3dCQUNMLDBCQUEwQjt3QkFDMUIsd0JBQXdCO3FCQUMzQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlck1lc3NhZ2VzLCBDbGlwcGVyTW9kZWwsIENsaXBwZXJNb2R1bGUsIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyU2VhcmNoUGFyYW1zLCBDbGlwcGVyU2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBCcm9hZGNhc3RTZXJ2aWNlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSwgU2VuZFRvRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCBzYXZlQXMgZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudHNVdGlscyB9IGZyb20gJy4uLy4uL2RvY3VtZW50cyc7XHJcbmltcG9ydCB7IENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LCBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nQ2xvc2VJbmZvIH0gZnJvbSAnLi4vcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudENvbXBvbmVudCB9IGZyb20gJy4uL2RvY3VtZW50L2RvY3VtZW50LmNvbXBvbmVudCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+JyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCxcclxuICAgICAgICBDbGlwcGVyRG9jdW1lbnRDb21wb25lbnRcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJEb2N1bWVudE1hbmFnZXIge1xyXG5cclxuICAgIHByb3RlY3RlZCBjbGlwYm9hcmQgPSBpbmplY3QoQ2xpcGJvYXJkKTtcclxuICAgIHByb3RlY3RlZCBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgICBwcm90ZWN0ZWQgYnJvYWRjYXN0U2VydmljZSA9IGluamVjdChCcm9hZGNhc3RTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFwcGxpY2F0aW9uRGlhbG9nU2VydmljZSk7XHJcblxyXG4gICAgLyoqXHJcbiAqIEV4cG9ydCBhIGRvY3VtZW50IGluIHBkZiBmb3JtYXRcclxuICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnQgdG8gZXhwb3J0XHJcbiAqL1xyXG4gICAgZXhwb3J0UGRmKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZVxyXG4gICAgICAgICAgICAuY29uZmlybShcIkNvbmZlcm1pIGwnZXNwb3J0YXppb25lP1wiLCAnQXR0ZW56aW9uZSEnKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuY2hvb3Nlbi5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIucmVzdWx0ID09PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtLmlkIHx8IGl0ZW0uZG9jdW1lbnRJZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnRXNwb3J0YXppb25lIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5leHBvcnRQZGYoaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogKHIyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlQXMocjIsIChpdGVtLnRpdGxlMSA/IGl0ZW0udGl0bGUxIDogaWQpICsgJy5wZGYnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZSBjdXJyZW50IGRvY3VtZW50IGxpc3Qgb3IganVzdCB0aGUgc2VsZWN0ZWQgZG9jdW1lbnRzIGFzIGEgY3N2XHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqIEBwYXJhbSBzZWFyY2hQYXJhbXM6IHRoZSBzZWFyY2ggcGFyYW1zXHJcbiAgICAgKi9cclxuICAgIGV4cG9ydEl0ZW1zKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10sIHNlYXJjaFBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIGxldCBtb2RlbDogYW55ID0geyBpZHM6IGlkcywgcXVlcnk6IG51bGwsIGZvcm1hdDogMSB9O1xyXG4gICAgICAgIGlmIChtb2RlbC5pZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIG1vZGVsLnF1ZXJ5ID0gc2VhcmNoUGFyYW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnU2FsdmF0YWdnaW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydChtb2RlbClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiAocikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyLCAnZWxlbmNvLmNzdicpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyY2hpdmUgYSBsaXN0IG9mIGl0ZW1zXHJcbiAgICAgKiBAcGFyYW0gaXRlbXM6IHRoZSBpdGVtIGxpc3RcclxuICAgICAqL1xyXG4gICAgYWRkVG9BcmNoaXZlKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQVJDSElWRV9BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBhIG5ldyBkZWFkbGluZVxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgICAqL1xyXG4gICAgYWRkVG9DYWxlbmRhcihpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5DT01NQU5EX0NBTEVOREFSX0FERCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAqIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuICogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4gKi9cclxuICAgIGFkZEl0ZW1zVG9Xb3JraW5nRG9jdW1lbnRzKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfV09SS0lOR19BREQsIGl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuKiBBZGQgYSBsaXN0IG9mIGl0ZW1zIHRvIHdvcmtpbmcgZG9jdW1lbnRzXHJcbiogQHBhcmFtIGl0ZW1zIDogdGhlIGl0ZW0gbGlzdFxyXG4qL1xyXG4gICAgYWRkSXRlbXNUb0JhZyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuYWRkVG9CYWcoaWRzKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ09wZXJhemlvbmUgY29tcGxldGF0YSBjb24gc3VjY2Vzc28uJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcHkgbWV0YWRhdGEgdG8gY2xpcGJvYXJkXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGNvcHlcclxuICAgICAqL1xyXG4gICAgY29weU1ldGFkYXRhVG9DbGlwYm9hcmQoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghaXRlbSB8fCBpdGVtLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuQ29vcmRpbmFtZW50bykgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXRhID1cclxuICAgICAgICAgICAgKGl0ZW0uaWQgPz8gaXRlbS5kb2N1bWVudElkKSArICdcXHQnICtcclxuICAgICAgICAgICAgaXRlbS50aXRsZTE/LnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpICsgJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0udGl0bGUyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0udGl0bGUyLnJlcGxhY2VBbGwoXCJcXHJcXG5cIiwgXCIgXCIpO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ubnVtYmVyKVxyXG4gICAgICAgICAgICBtZXRhICs9IGl0ZW0ubnVtYmVyO1xyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHVibGlzaGluZ0RhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5wdWJsaXNoaW5nRGF0ZSA9IG5ldyBEYXRlKGl0ZW0ucHVibGlzaGluZ0RhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmRhdGUpIHtcclxuICAgICAgICAgICAgaXRlbS5kYXRlID0gbmV3IERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICAgICAgbWV0YSArPSBTeXN0ZW1VdGlscy5mb3JtYXREYXRlKGl0ZW0uZGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1ldGEgKz0gJ1xcdCc7XHJcbiAgICAgICAgaWYgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5vcmlnaW5EZXNjcmlwdGlvblxyXG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkobWV0YSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRvYXN0KFwiTWV0YWRhdGkgY29waWF0aSBuZWdsaSBhcHB1bnRpLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkb2N1bWVudCBwZXJtYWxpbmtcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gc2hvdyB0aGUgbGluayBmb3JcclxuICAgICAqL1xyXG4gICAgc2hvd0xpbmsoaXRlbTogYW55KSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGlkID0gaXRlbS5pZCA/IGl0ZW0uaWQgOiBpdGVtLmRvY3VtZW50SWQ7XHJcbiAgICAgICAgbGV0IGNoYW5uZWxzID0gaXRlbS5jaGFubmVsTmFtZVxyXG4gICAgICAgICAgICA/ICdDYW5hbGk6ICcgKyBpdGVtLmNoYW5uZWxOYW1lICsgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IG9yaWdpbiA9IGl0ZW0ub3JpZ2luXHJcbiAgICAgICAgICAgID8gJ09yaWdpbmU6ICcgK1xyXG4gICAgICAgICAgICBpdGVtLm9yaWdpbiArXHJcbiAgICAgICAgICAgICcgLSAnICtcclxuICAgICAgICAgICAgKGl0ZW0ub3JpZ2luRGVzY3JpcHRpb24gPyBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uIDogJycpICtcclxuICAgICAgICAgICAgJzxicj4nXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICAgICAgbGV0IHRvcGljcyA9IGl0ZW0udG9waWNzID8gJ0FyZ29tZW50bzogJyArIGl0ZW0udG9waWNzICsgJzxicj4nIDogJyc7XHJcbiAgICAgICAgaWYgKCFpZCkgcmV0dXJuO1xyXG4gICAgICAgIGxldCBtZXNzYWdlID1cclxuICAgICAgICAgICAgXCI8cCA+SWwgbGluayBjaGUgdHJvdmkgcXVpIHNvdHRvIMOoIHVuIHJpZmVyaW1lbnRvIGRpcmV0dG8gYWwgZG9jdW1lbnRvIHNlbGV6aW9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPkxvIHB1b2kgdXRpbGl6emFyZSBuZWxsYSB0dWEgZG9jdW1lbnRhemlvbmUgbyBpbnZpYXJsbyBwZXIgZW1haWwgYWQgdW4gdHVvIGNvbGxlZ2EuIExhIHBlcnNvbmEgY2hlIGRlc2lkZXJlcsOgIHZpc3VhbGl6emFyZSBpbCBkb2N1bWVudG8gZG92csOgIG5lY2Vzc2FyaWFtZW50ZSBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLjwvcD5cIiArXHJcbiAgICAgICAgICAgIFwiPHAgPlNlbGV6aW9uYSBlIGNvcGlhIChmYWkgQ1RSTCtDKSBpbCBsaW5rIHF1aSBzb3R0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NtYWxsIGFjY2VudCc+XCIgK1xyXG4gICAgICAgICAgICAnaHR0cHM6Ly9jbGlwcGVyLmFyc2VkaXppb25pLml0Lz9pZD0nICtcclxuICAgICAgICAgICAgaWQgK1xyXG4gICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8YnI+JyArXHJcbiAgICAgICAgICAgICc8aHI+JyArXHJcbiAgICAgICAgICAgICc8cCBjbGFzcz1cInNtYWxsXCI+JyArXHJcbiAgICAgICAgICAgIGNoYW5uZWxzICtcclxuICAgICAgICAgICAgb3JpZ2luICtcclxuICAgICAgICAgICAgdG9waWNzXHJcbiAgICAgICAgJzwvcD4nO1xyXG5cclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhtZXNzYWdlLCAnQ29waWEgbGluaycsICdDaGl1ZGknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlbmQgZG9jdW1lbnRzIGxpbmtzIGJ5IGVtYWlsXHJcbiAgICAgKiBAcGFyYW0gaXRlbXMgOiB0aGUgZG9jdW1lbnQgbGlzdFxyXG4gICAgICovXHJcbiAgICBzZW5kSXRlbXNUbyhpdGVtczogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKCkpIHJldHVybjtcclxuICAgICAgICBpZiAoIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihTZW5kVG9EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgYXJpYUxhYmVsOiAnaW52aWEgZG9jdW1lbnRpIHBlciBlbWFpbCcsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgaW5mbzpcclxuICAgICAgICAgICAgICAgICAgICAnUHVvaSBpbnZpYXJlIGkgZG9jdW1lbnRpIGEgY2hpIHZ1b2kgbWEsIHBlciBwb3RlcmxpIHZpc3VhbGl6emFyZSwgw6ggbmVjZXNzYXJpbyBlc3NlcmUgdW4gdXRlbnRlIGFiYm9uYXRvLicsXHJcbiAgICAgICAgICAgICAgICBjb3VudDogaXRlbXMubGVuZ3RoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByLmlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSgnSW52aW8gaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2Uuc2VuZFRvKHIpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyMjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXIyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3IocjIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnSW52aW8gY29tcGxldGF0byBjb24gc3VjY2Vzc28uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkXHJcbiAgICAgKiBAcGFyYW0gdGl0bGU6IHRoZSBkb2N1bWVudCBzaG9ydCB0aXRsZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVwb3J0KGRvY3VtZW50SWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5SZXBvcnQoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSxcclxuICAgICAgICAgICAgZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheSBhIGRvY3VtZW50IHJlcG9ydFxyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcmVwb3J0KGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybjtcclxuICAgICAgICBpZiAoaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSAmJiBpdGVtLm1vZGVsICE9IENsaXBwZXJNb2RlbC5TY2FkZW56ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mbyhcIlF1ZXN0YSBmdW56aW9uYWxpdMOgIG5vbiDDqCBkaXNwb25pYmlsZSBwZXIgcXVlc3RvIHRpcG8gZGkgZG9jdW1lbnRvLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblJlcG9ydChpdGVtLmRvY3VtZW50SWQsIGl0ZW0udGl0bGUxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE9wZW4gYW4gaXRlbVxyXG4gICAgKiBUaGlzIHNob3VsZCBiZSBhbHdheXMgb3ZlcnJpZGRlblxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgKiBAcGFyYW0gcXVlcnk6IHRoZSBxdWVyeSBzdHJpbmdcclxuICAgICogQHBhcmFtIG5ld1dpbmRvdzogdHJ1ZSBpZiB0aGUgZG9jdW1lbnQgbXVzdCBiZSBvcGVuIGludG8gYSBuZXcgd2luZG93XHJcbiAgICAqL1xyXG4gICAgb3Blbihkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsIG5ld1dpbmRvdzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCFuZXdXaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuRG9jdW1lbnQoZG9jdW1lbnRJZCwgcXVlcnkpO1xyXG4gICAgICAgIH0gZWxzZSB3aW5kb3cub3BlbignL2RvY3VtZW50by8nICsgZG9jdW1lbnRJZCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIGRvY3VtZW50XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAgKi9cclxuICAgIG9wZW5Eb2N1bWVudChkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkLCBxdWVyeTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgICAgIGFyaWFMYWJlbDogJ2RvY3VtZW50bycsXHJcbiAgICAgICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdG9yZUZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGRvY3VtZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnk6IHF1ZXJ5XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzE0MDBweCcsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICc5OSUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSByZWZlcmVuY2VzIGRpYWxvZ1xyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWQgICBcclxuICAgICAqIEBwYXJhbSBtb2RlOiB0aGUgb3B0aW9uYWwgbW9kZS4gRGVmYXVsdCBpcyByZWZlcmVuY2VzIGluXHJcbiAgICAgKiBAcGFyYW0gbW9kZWw6IHRoZSBvcHRpb25hbCBkb2N1bWVudCBtb2RlbFxyXG4gICAgICogQHBhcmFtIGFuY2hvcjogdGhlIG9wdGlvbmFsIGRvY3VtZW50IGFuY2hvclxyXG4gICAgICogQHBhcmFtIGFuY2hvclRpdGxlOiA6IHRoZSBvcHRpb25hbCBhbmNob3IgdGl0bGVcclxuICAgICAqIEBwYXJhbSB1cGRhdGU6IHRydWUgaWYgaXMgYW4gdXBkYXRlXHJcbiAgICAgKi9cclxuICAgIG9wZW5SZWZlcmVuY2VzKFxyXG4gICAgICAgIGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICAgICAgbW9kZTogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsID0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuUmVmZXJlbmNlc0luLFxyXG4gICAgICAgIG1vZGVsOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICBhbmNob3I6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLFxyXG4gICAgICAgIGFuY2hvclRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICB1cGRhdGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBhcmlhTGFiZWw6ICdkb2N1bWVudG8nLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBpZDogZG9jdW1lbnRJZCxcclxuICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsXHJcbiAgICAgICAgICAgICAgICBtb2RlbDogbW9kZWwsXHJcbiAgICAgICAgICAgICAgICBhbmNob3I6IGFuY2hvcixcclxuICAgICAgICAgICAgICAgIGFuY2hvclRpdGxlOiBhbmNob3JUaXRsZSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgICAgICAgbWF4V2lkdGg6ICcxMDAwcHgnLFxyXG4gICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzk5JSdcclxuICAgICAgICB9KTtcclxuICAgICAgICBkLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocjogQ2xpcHBlclJlZmVyZW5jZURpYWxvZ0Nsb3NlSW5mbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHIgJiYgci5kb2N1bWVudElkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKHIuZG9jdW1lbnRJZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWFuYWdlIGNsaXBwZXIgYmFnXHJcbiAgICAgKi9cclxuICAgIG9wZW5CYWcoKSB7XHJcbiAgICAgICAgQ2xpcHBlckRvY3VtZW50c1V0aWxzLm9wZW5CYWcoXHJcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZSxcclxuICAgICAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVja3MgaWYgYSBtb2R1bGUgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAqIEBwYXJhbSBtb2R1bGUgOiB0aGUgbW9kdWxlIHRvIGNoZWNrXHJcbiAgICAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2R1bGUgaXMgc3VwcG9ydGVkXHJcbiAgICAqL1xyXG4gICAgaXNNb2R1bGVTdXBwb3J0ZWRCeVJTKG1vZHVsZTogQ2xpcHBlck1vZHVsZSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuR2F6emV0dGVCb2xsZXR0aW5pRUZvbnRpRGl2ZXJzZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICBtb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuU2NhZGVuemVFU2VnbmFsYXppb25pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIGEgbW9kZWwgaXMgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAgKiBAcGFyYW0gbW9kZWwgOiB0aGUgbW9kZWwgdG8gY2hlY2tcclxuICAgICAqIEByZXR1cm5zOiB0cnVlIGlmIHRoZSBtb2RlbCBpcyBzdXBwb3J0ZWRcclxuICAgICAqL1xyXG4gICAgaXNNb2RlbFN1cHBvcnRlZEJ5UlMobW9kZWw6IENsaXBwZXJNb2RlbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemU7XHJcblxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByaW50IGN1cnJlbnQgZG9jdW1lbnRcclxuICAgICAqL1xyXG4gICAgcHJpbnQoKSB7XHJcbiAgICAgICAgbGV0IGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2xpcHBlci1kb2N1bWVudC1pZnJhbWUnKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGYpIHtcclxuICAgICAgICAgICAgZi5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKCd7XCJ0eXBlXCI6IFwicHJpbnRcIn0nLCAnKicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgaW4gY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBmaW5kKCkge1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvKCdQZXIgY2VyY2FyZSBuZWwgZG9jdW1lbnRvIHByZW1pIENUUkwgKyBGLicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBDaGVja3MgaWYgYWxsIGRvY3VtZW50cyBhcmUgc3VwcG9ydGVkIGJ5IFJTXHJcbiAgICAqIEBwYXJhbSBpdGVtcyA6IHRoZSBsaXN0IG9mIGRvY3VtZW5zXHJcbiAgICAqIEByZXR1cm5zOiB0cnVlIGlmIGFsbCBkb2N1bWVudHMgc3VwcG9ydHMgUlNcclxuICAgICovXHJcbiAgICBjYW5TdXBwb3J0UlMoaXRlbXM6IFtdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgaXRlbXMuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGFsbG93ID0gdGhpcy5pc01vZGVsU3VwcG9ydGVkQnlSUyhuLm1vZGVsKTtcclxuICAgICAgICAgICAgaWYgKCFhbGxvdykgcmV0dXJuO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbGxvdztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBSUyBpcyBlbmFibGVkIGZvciBhbGwgZ2l2ZW4gZG9jdW1lbnRzXHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRzIDogdGhlIGRvY3VtZW50cyB0byBjaGVja1xyXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBhbGxhIGRvY3VtZW50cyBhciBSUyBlbmFibGVkXHJcbiAgICAgKi9cclxuICAgIFJTX2VuYWJsZWQoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50cyB8fCBkb2N1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgbGV0IGFsbG93ID0gZmFsc2U7XHJcbiAgICAgICAgZG9jdW1lbnRzLmZvckVhY2gobiA9PiB7XHJcbiAgICAgICAgICAgIGFsbG93ID0gbiAmJiAobi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5BZ2dpb3JuYW1lbnRvTm9ybWF0aXZvIHx8XHJcbiAgICAgICAgICAgICAgICBuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBOZXcgbGF3XHJcbiAgICAqIEBwYXJhbSBkb2N1bWVudHM6IHRoZSBhcnJheSBvZiBkb2N1bWVudHMgdG8gbGluayB0byB0aGUgbGF3XHJcbiAgICAqL1xyXG4gICAgUlNfbmV3TGF3KGRvY3VtZW50czogQ2xpcHBlckRvY3VtZW50SW5mb1tdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19ORVdfTEFXLCBkb2N1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmV3IGFjdGl2aXR5XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBkb2N1bWVudCB0byBsaW5rIHRvIHRoZSBhY3Rpdml0eVxyXG4gICAgICovXHJcbiAgICBSU19uZXdBY3Rpdml0eShkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19BQ1RJVklUWSwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBEb2N1bWVudCB1c2FnZSByZXBvcnRcclxuICAgICogQHBhcmFtIGRvY3VtZW50OiB0aGUgbGF3XHJcbiAgICAqL1xyXG4gICAgUlNfdXNhZ2VSZXBvcnQoZG9jdW1lbnQ6IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICBpZiAoIWRvY3VtZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLnN1cHBvcnRzUlMoKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuSU5URVJPUF9SU19VU0FHRV9SRVBPUlQsIGRvY3VtZW50KTtcclxuICAgIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
435
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9jbGlwcGVyLnVpL3VpL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUF1QixlQUFlLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSwwQkFBMEIsRUFBdUIsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0wsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzVFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hHLE9BQU8sTUFBTSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsMEJBQTBCLEVBQW1DLE1BQU0sb0NBQW9DLENBQUM7QUFDakgsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0FBWTFFLE1BQU0sT0FBTyxzQkFBc0I7SUFUbkM7UUFXYyxjQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLGtCQUFhLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7S0EyYTlEO0lBemFHOzs7R0FHRDtJQUNDLFNBQVMsQ0FBQyxJQUF5QjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixJQUFJLENBQUMsYUFBYTthQUNiLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxhQUFhLENBQUM7YUFDbEQsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7cUJBQzVCLFNBQVMsQ0FBQztvQkFDUCxJQUFJLEVBQUUsQ0FBQyxFQUFPLEVBQUUsRUFBRTt3QkFDZCxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQzFELENBQUM7b0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTt3QkFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNuQyxDQUFDO2lCQUNKLENBQUMsQ0FBQztZQUNYLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLEtBQTRCLEVBQUUsZUFBMkMsSUFBSTtRQUNyRixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEQsSUFBSSxLQUFLLEdBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3RELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzVCLFNBQVMsQ0FBQztZQUNQLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNSLE1BQU0sQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxLQUE0QjtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLElBQXlCO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7O0dBR0Q7SUFDQywwQkFBMEIsQ0FBQyxLQUE0QjtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7OztFQUdGO0lBQ0UsYUFBYSxDQUFDLEtBQTRCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUFFLE9BQU87UUFDNUMsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDeEMsSUFBSSxFQUFFLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO2dCQUNuRSxDQUFDO1lBQ0wsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHRDs7O09BR0c7SUFDSCx1QkFBdUIsQ0FBQyxJQUF5QjtRQUM3QyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQy9ELElBQUksSUFBSSxHQUNKLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSTtZQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2hELElBQUksSUFBSSxDQUFDLE1BQU07WUFDWCxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksSUFBSSxJQUFJLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyxNQUFNO1lBQ1gsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDeEIsSUFBSSxJQUFJLElBQUksQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3BELElBQUksSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQ3RCLElBQUksSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUE7UUFDbEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxDQUFDLElBQVM7UUFFZCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUM3QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVztZQUMzQixDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTTtZQUN4QyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDcEIsQ0FBQyxDQUFDLFdBQVc7Z0JBQ2IsSUFBSSxDQUFDLE1BQU07Z0JBQ1gsS0FBSztnQkFDTCxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RELE1BQU07WUFDTixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckUsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLElBQUksT0FBTyxHQUNQLHdGQUF3RjtZQUN4RixrTUFBa007WUFDbE0sMkRBQTJEO1lBQzNELDRCQUE0QjtZQUM1QixxQ0FBcUM7WUFDckMsRUFBRTtZQUNGLFFBQVE7WUFDUixNQUFNO1lBQ04sTUFBTTtZQUNOLG1CQUFtQjtZQUNuQixRQUFRO1lBQ1IsTUFBTTtZQUNOLE1BQU0sQ0FBQTtRQUNWLE1BQU0sQ0FBQztRQUVQLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsQ0FBQyxLQUE0QjtRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFBRSxPQUFPO1FBQzVDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTztRQUN6QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNyRCxTQUFTLEVBQUUsMkJBQTJCO1lBQ3RDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFlBQVksRUFBRSxLQUFLO1lBQ25CLFlBQVksRUFBRSxLQUFLO1lBQ25CLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsSUFBSSxFQUFFO2dCQUNGLElBQUksRUFDQSwyR0FBMkc7Z0JBQy9HLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTTthQUN0QjtZQUNELFFBQVEsRUFBRSxPQUFPO1lBQ2pCLFFBQVEsRUFBRSxPQUFPO1lBQ2pCLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUk7YUFDbkIsU0FBUyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDbEIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUN4QixTQUFTLENBQUM7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsRUFBTyxFQUFFLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO3dCQUMzRCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2QsQ0FBQztnQkFDTCxDQUFDO2dCQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQzthQUNKLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUdEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsVUFBa0IsRUFBRSxRQUFtQyxJQUFJO1FBQ2xFLHFCQUFxQixDQUFDLFVBQVUsQ0FDNUIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsVUFBVSxFQUNWLEtBQUssQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxJQUF5QjtRQUM1QixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1lBQy9GLE9BQU87UUFDWCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEQsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O01BTUU7SUFDRixJQUFJLENBQUMsVUFBcUMsRUFBRSxRQUFtQyxJQUFJLEVBQUUsWUFBcUIsS0FBSztRQUMzRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDOztZQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxVQUFxQyxFQUFFLFFBQW1DLElBQUk7UUFDdkYsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFO2dCQUM5QyxTQUFTLEVBQUUsV0FBVztnQkFDdEIsU0FBUyxFQUFFLEtBQUs7Z0JBQ2hCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsSUFBSSxFQUFFO29CQUNGLEVBQUUsRUFBRSxVQUFVO29CQUNkLEtBQUssRUFBRSxLQUFLO2lCQUNmO2dCQUNELFFBQVEsRUFBRSxPQUFPO2dCQUNqQixRQUFRLEVBQUUsUUFBUTtnQkFDbEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osTUFBTSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGNBQWMsQ0FDVixVQUF5QixFQUN6QixPQUEwQywwQkFBMEIsQ0FBQyxZQUFZLEVBQ2pGLFFBQW1DLElBQUksRUFDdkMsU0FBb0MsSUFBSSxFQUN4QyxjQUF5QyxJQUFJLEVBQzdDLFNBQXFDLElBQUk7UUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMxRCxTQUFTLEVBQUUsV0FBVztZQUN0QixTQUFTLEVBQUUsS0FBSztZQUNoQixZQUFZLEVBQUUsS0FBSztZQUNuQixZQUFZLEVBQUUsS0FBSztZQUNuQixJQUFJLEVBQUU7Z0JBQ0YsRUFBRSxFQUFFLFVBQVU7Z0JBQ2QsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osTUFBTSxFQUFFLE1BQU07Z0JBQ2QsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLE1BQU0sRUFBRSxNQUFNO2FBQ2pCO1lBQ0QsUUFBUSxFQUFFLE9BQU87WUFDakIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxDQUFDLENBQUMsV0FBVyxFQUFFO2FBQ1YsU0FBUyxDQUFDLENBQUMsQ0FBa0MsRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNILHFCQUFxQixDQUFDLE9BQU8sQ0FDekIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFHRDs7OztNQUlFO0lBQ0YscUJBQXFCLENBQUMsTUFBcUI7UUFDdkMsT0FBTyxNQUFNLEtBQUssYUFBYSxDQUFDLCtCQUErQjtZQUMzRCxNQUFNLEtBQUssYUFBYSxDQUFDLGdCQUFnQjtZQUN6QyxNQUFNLEtBQUssYUFBYSxDQUFDLHFCQUFxQixDQUFDO0lBQ3ZELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsb0JBQW9CLENBQUMsS0FBbUI7UUFDcEMsT0FBTyxLQUFLLEtBQUssWUFBWSxDQUFDLHNCQUFzQjtZQUNoRCxLQUFLLEtBQUssWUFBWSxDQUFDLGdCQUFnQjtZQUN2QyxLQUFLLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUV4QyxDQUFDO0lBR0Q7O09BRUc7SUFDSCxLQUFLO1FBQ0QsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBUSxDQUFDO1FBQ2xFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSTtRQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVEOzs7O01BSUU7SUFDRixZQUFZLENBQUMsS0FBUztRQUNsQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3JCLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLO2dCQUFFLE9BQU87UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxTQUFnQztRQUN2QyxJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2xCLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7Z0JBQ25ELENBQUMsQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLHNCQUFzQjtnQkFDL0MsQ0FBQyxDQUFDLEtBQUssS0FBSyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O01BR0U7SUFDRixTQUFTLENBQUMsU0FBZ0M7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLFFBQTZCO1FBQ3hDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7WUFBRSxPQUFPO1FBQzlDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O01BR0U7SUFDRixjQUFjLENBQUMsUUFBNkI7UUFDeEMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekYsQ0FBQzs4R0E3YVEsc0JBQXNCO2tHQUF0QixzQkFBc0Isd0VBUnJCLGFBQWE7OzJGQVFkLHNCQUFzQjtrQkFUbEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUU7d0JBQ0wsMEJBQTBCO3dCQUMxQix3QkFBd0I7cUJBQzNCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTWVzc2FnZXMsIENsaXBwZXJNb2RlbCwgQ2xpcHBlck1vZHVsZSwgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUsIENsaXBwZXJTZWFyY2hQYXJhbXMsIENsaXBwZXJTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IEJyb2FkY2FzdFNlcnZpY2UsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlLCBTZW5kVG9EaWFsb2dDb21wb25lbnQgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uJztcclxuaW1wb3J0IHNhdmVBcyBmcm9tICdmaWxlLXNhdmVyJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50c1V0aWxzIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnRzJztcclxuaW1wb3J0IHsgQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnQsIENsaXBwZXJSZWZlcmVuY2VEaWFsb2dDbG9zZUluZm8gfSBmcm9tICcuLi9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vZG9jdW1lbnQvZG9jdW1lbnQuY29tcG9uZW50JztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LFxyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudENvbXBvbmVudFxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWFuYWdlciB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNsaXBib2FyZCA9IGluamVjdChDbGlwYm9hcmQpO1xyXG4gICAgcHJvdGVjdGVkIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICAgIHByb3RlY3RlZCBicm9hZGNhc3RTZXJ2aWNlID0gaW5qZWN0KEJyb2FkY2FzdFNlcnZpY2UpO1xyXG4gICAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAvKipcclxuICogRXhwb3J0IGEgZG9jdW1lbnQgaW4gcGRmIGZvcm1hdFxyXG4gKiBAcGFyYW0gaXRlbSA6IHRoZSBkb2N1bWVudCB0byBleHBvcnRcclxuICovXHJcbiAgICBleHBvcnRQZGYoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5jb25maXJtKFwiQ29uZmVybWkgbCdlc3BvcnRhemlvbmU/XCIsICdBdHRlbnppb25lIScpXHJcbiAgICAgICAgICAgIC5jb21wb25lbnRJbnN0YW5jZS5jaG9vc2VuLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoci5yZXN1bHQgPT09ICdvaycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW0uaWQgfHwgaXRlbS5kb2N1bWVudElkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdFc3BvcnRhemlvbmUgaW4gY29yc28uLi4nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmV4cG9ydFBkZihpZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVBcyhyMiwgKGl0ZW0udGl0bGUxID8gaXRlbS50aXRsZTEgOiBpZCkgKyAnLnBkZicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlIGN1cnJlbnQgZG9jdW1lbnQgbGlzdCBvciBqdXN0IHRoZSBzZWxlY3RlZCBkb2N1bWVudHMgYXMgYSBjc3ZcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICogQHBhcmFtIHNlYXJjaFBhcmFtczogdGhlIHNlYXJjaCBwYXJhbXNcclxuICAgICAqL1xyXG4gICAgZXhwb3J0SXRlbXMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSwgc2VhcmNoUGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zIHwgbnVsbCA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgbGV0IG1vZGVsOiBhbnkgPSB7IGlkczogaWRzLCBxdWVyeTogbnVsbCwgZm9ybWF0OiAxIH07XHJcbiAgICAgICAgaWYgKG1vZGVsLmlkcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgbW9kZWwucXVlcnkgPSBzZWFyY2hQYXJhbXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdTYWx2YXRhZ2dpbyBpbiBjb3Jzby4uLicpO1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UuZXhwb3J0KG1vZGVsKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUFzKHIsICdlbGVuY28uY3N2Jyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJjaGl2ZSBhIGxpc3Qgb2YgaXRlbXNcclxuICAgICAqIEBwYXJhbSBpdGVtczogdGhlIGl0ZW0gbGlzdFxyXG4gICAgICovXHJcbiAgICBhZGRUb0FyY2hpdmUoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9BUkNISVZFX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IGRlYWRsaW5lXHJcbiAgICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIHRvIGFkZFxyXG4gICAgICovXHJcbiAgICBhZGRUb0NhbGVuZGFyKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLkNPTU1BTkRfQ0FMRU5EQVJfQURELCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICogQWRkIGEgbGlzdCBvZiBpdGVtcyB0byB3b3JraW5nIGRvY3VtZW50c1xyXG4gKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiAqL1xyXG4gICAgYWRkSXRlbXNUb1dvcmtpbmdEb2N1bWVudHMoaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0U2VydmljZS5zZW5kTWVzc2FnZShDbGlwcGVyTWVzc2FnZXMuQ09NTUFORF9XT1JLSU5HX0FERCwgaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4qIEFkZCBhIGxpc3Qgb2YgaXRlbXMgdG8gd29ya2luZyBkb2N1bWVudHNcclxuKiBAcGFyYW0gaXRlbXMgOiB0aGUgaXRlbSBsaXN0XHJcbiovXHJcbiAgICBhZGRJdGVtc1RvQmFnKGl0ZW1zOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4oKSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zPy5tYXAobiA9PiBuLmRvY3VtZW50SWQgPz8gbi5pZCkgPz8gW107XHJcbiAgICAgICAgdGhpcy5jbGlwcGVyU2VydmljZS5hZGRUb0JhZyhpZHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50b2FzdCgnT3BlcmF6aW9uZSBjb21wbGV0YXRhIGNvbiBzdWNjZXNzby4nKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29weSBtZXRhZGF0YSB0byBjbGlwYm9hcmRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gdG8gY29weVxyXG4gICAgICovXHJcbiAgICBjb3B5TWV0YWRhdGFUb0NsaXBib2FyZChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtIHx8IGl0ZW0ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5Db29yZGluYW1lbnRvKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG1ldGEgPVxyXG4gICAgICAgICAgICAoaXRlbS5pZCA/PyBpdGVtLmRvY3VtZW50SWQpICsgJ1xcdCcgK1xyXG4gICAgICAgICAgICBpdGVtLnRpdGxlMT8ucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIikgKyAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS50aXRsZTIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS50aXRsZTIucmVwbGFjZUFsbChcIlxcclxcblwiLCBcIiBcIik7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5udW1iZXIpXHJcbiAgICAgICAgICAgIG1ldGEgKz0gaXRlbS5udW1iZXI7XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5wdWJsaXNoaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLnB1Ymxpc2hpbmdEYXRlID0gbmV3IERhdGUoaXRlbS5wdWJsaXNoaW5nRGF0ZSk7XHJcbiAgICAgICAgICAgIG1ldGEgKz0gU3lzdGVtVXRpbHMuZm9ybWF0RGF0ZShpdGVtLnB1Ymxpc2hpbmdEYXRlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uZGF0ZSkge1xyXG4gICAgICAgICAgICBpdGVtLmRhdGUgPSBuZXcgRGF0ZShpdGVtLmRhdGUpO1xyXG4gICAgICAgICAgICBtZXRhICs9IFN5c3RlbVV0aWxzLmZvcm1hdERhdGUoaXRlbS5kYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWV0YSArPSAnXFx0JztcclxuICAgICAgICBpZiAoaXRlbS5vcmlnaW5EZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgbWV0YSArPSBpdGVtLm9yaWdpbkRlc2NyaXB0aW9uXHJcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShtZXRhKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoXCJNZXRhZGF0aSBjb3BpYXRpIG5lZ2xpIGFwcHVudGkuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIGRvY3VtZW50IHBlcm1hbGlua1xyXG4gICAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBzaG93IHRoZSBsaW5rIGZvclxyXG4gICAgICovXHJcbiAgICBzaG93TGluayhpdGVtOiBhbnkpIHtcclxuICAgIFxyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuOyAgICAgICAgXHJcbiAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xyXG4gICAgICAgIGxldCBpZCA9IGl0ZW0uaWQgPyBpdGVtLmlkIDogaXRlbS5kb2N1bWVudElkO1xyXG4gICAgICAgIGxldCBjaGFubmVscyA9IGl0ZW0uY2hhbm5lbE5hbWVcclxuICAgICAgICAgICAgPyAnQ2FuYWxpOiAnICsgaXRlbS5jaGFubmVsTmFtZSArICc8YnI+J1xyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIGxldCBvcmlnaW4gPSBpdGVtLm9yaWdpblxyXG4gICAgICAgICAgICA/ICdPcmlnaW5lOiAnICtcclxuICAgICAgICAgICAgaXRlbS5vcmlnaW4gK1xyXG4gICAgICAgICAgICAnIC0gJyArXHJcbiAgICAgICAgICAgIChpdGVtLm9yaWdpbkRlc2NyaXB0aW9uID8gaXRlbS5vcmlnaW5EZXNjcmlwdGlvbiA6ICcnKSArXHJcbiAgICAgICAgICAgICc8YnI+J1xyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgICAgIGxldCB0b3BpY3MgPSBpdGVtLnRvcGljcyA/ICdBcmdvbWVudG86ICcgKyBpdGVtLnRvcGljcyArICc8YnI+JyA6ICcnO1xyXG4gICAgICAgIGlmICghaWQpIHJldHVybjtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9XHJcbiAgICAgICAgICAgIFwiPHAgPklsIGxpbmsgY2hlIHRyb3ZpIHF1aSBzb3R0byDDqCB1biByaWZlcmltZW50byBkaXJldHRvIGFsIGRvY3VtZW50byBzZWxlemlvbmF0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxwID5MbyBwdW9pIHV0aWxpenphcmUgbmVsbGEgdHVhIGRvY3VtZW50YXppb25lIG8gaW52aWFybG8gcGVyIGVtYWlsIGFkIHVuIHR1byBjb2xsZWdhLiBMYSBwZXJzb25hIGNoZSBkZXNpZGVyZXLDoCB2aXN1YWxpenphcmUgaWwgZG9jdW1lbnRvIGRvdnLDoCBuZWNlc3NhcmlhbWVudGUgZXNzZXJlIHVuIHV0ZW50ZSBhYmJvbmF0by48L3A+XCIgK1xyXG4gICAgICAgICAgICBcIjxwID5TZWxlemlvbmEgZSBjb3BpYSAoZmFpIENUUkwrQykgaWwgbGluayBxdWkgc290dG8uPC9wPlwiICtcclxuICAgICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzbWFsbCBhY2NlbnQnPlwiICtcclxuICAgICAgICAgICAgJ2h0dHBzOi8vY2xpcHBlci5hcnNlZGl6aW9uaS5pdC8/aWQ9JyArXHJcbiAgICAgICAgICAgIGlkICtcclxuICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAnPGJyPicgK1xyXG4gICAgICAgICAgICAnPGhyPicgK1xyXG4gICAgICAgICAgICAnPHAgY2xhc3M9XCJzbWFsbFwiPicgK1xyXG4gICAgICAgICAgICBjaGFubmVscyArXHJcbiAgICAgICAgICAgIG9yaWdpbiArXHJcbiAgICAgICAgICAgIHRvcGljc1xyXG4gICAgICAgICc8L3A+JztcclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8obWVzc2FnZSwgJ0NvcGlhIGxpbmsnLCAnQ2hpdWRpJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZW5kIGRvY3VtZW50cyBsaW5rcyBieSBlbWFpbFxyXG4gICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGRvY3VtZW50IGxpc3RcclxuICAgICAqL1xyXG4gICAgc2VuZEl0ZW1zVG8oaXRlbXM6IENsaXBwZXJEb2N1bWVudEluZm9bXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbigpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oU2VuZFRvRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGFyaWFMYWJlbDogJ2ludmlhIGRvY3VtZW50aSBwZXIgZW1haWwnLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGluZm86XHJcbiAgICAgICAgICAgICAgICAgICAgJ1B1b2kgaW52aWFyZSBpIGRvY3VtZW50aSBhIGNoaSB2dW9pIG1hLCBwZXIgcG90ZXJsaSB2aXN1YWxpenphcmUsIMOoIG5lY2Vzc2FyaW8gZXNzZXJlIHVuIHV0ZW50ZSBhYmJvbmF0by4nLFxyXG4gICAgICAgICAgICAgICAgY291bnQ6IGl0ZW1zLmxlbmd0aCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWluV2lkdGg6ICczNzVweCcsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiAnNjAwcHgnLFxyXG4gICAgICAgICAgICB3aWR0aDogJzk5JScsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZC5jb21wb25lbnRJbnN0YW5jZS5kb25lXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgci5pZHMgPSBpdGVtcz8ubWFwKG4gPT4gbi5kb2N1bWVudElkID8/IG4uaWQpID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3koJ0ludmlvIGluIGNvcnNvLi4uJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnNlbmRUbyhyKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiAocjI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyMi5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UudG9hc3QoJ0ludmlvIGNvbXBsZXRhdG8gY29uIHN1Y2Nlc3NvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jbGVhckJ1c3koKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5IGEgZG9jdW1lbnQgcmVwb3J0XHJcbiAgICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAgICogQHBhcmFtIHRpdGxlOiB0aGUgZG9jdW1lbnQgc2hvcnQgdGl0bGVcclxuICAgICAqL1xyXG4gICAgb3BlblJlcG9ydChkb2N1bWVudElkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCkge1xyXG4gICAgICAgIENsaXBwZXJEb2N1bWVudHNVdGlscy5vcGVuUmVwb3J0KFxyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UsXHJcbiAgICAgICAgICAgIGRvY3VtZW50SWQsXHJcbiAgICAgICAgICAgIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERpc3BsYXkgYSBkb2N1bWVudCByZXBvcnRcclxuICAgICAqIEBwYXJhbSBpdGVtIDogdGhlIGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIHJlcG9ydChpdGVtOiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGl0ZW0ubW9kZWwgIT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgJiYgaXRlbS5tb2RlbCAhPSBDbGlwcGVyTW9kZWwuU2NhZGVuemUpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oXCJRdWVzdGEgZnVuemlvbmFsaXTDoCBub24gw6ggZGlzcG9uaWJpbGUgcGVyIHF1ZXN0byB0aXBvIGRpIGRvY3VtZW50by5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5SZXBvcnQoaXRlbS5kb2N1bWVudElkLCBpdGVtLnRpdGxlMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBPcGVuIGFuIGl0ZW1cclxuICAgICogVGhpcyBzaG91bGQgYmUgYWx3YXlzIG92ZXJyaWRkZW5cclxuICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICogQHBhcmFtIHF1ZXJ5OiB0aGUgcXVlcnkgc3RyaW5nXHJcbiAgICAqIEBwYXJhbSBuZXdXaW5kb3c6IHRydWUgaWYgdGhlIGRvY3VtZW50IG11c3QgYmUgb3BlbiBpbnRvIGEgbmV3IHdpbmRvd1xyXG4gICAgKi9cclxuICAgIG9wZW4oZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsLCBuZXdXaW5kb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghbmV3V2luZG93KSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbkRvY3VtZW50KGRvY3VtZW50SWQsIHF1ZXJ5KTtcclxuICAgICAgICB9IGVsc2Ugd2luZG93Lm9wZW4oJy9kb2N1bWVudG8vJyArIGRvY3VtZW50SWQsICdfYmxhbmsnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAgICogQHBhcmFtIGRvY3VtZW50SWQgOiB0aGUgZG9jdW1lbnQgaWRcclxuICAgICAqIEBwYXJhbSBxdWVyeTogdGhlIHF1ZXJ5IHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBvcGVuRG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcXVlcnk6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQ2xpcHBlckRvY3VtZW50Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgICAgICBhcmlhTGFiZWw6ICdkb2N1bWVudG8nLFxyXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBxdWVyeVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcxNDAwcHgnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAnOTklJ1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVuIGEgcmVmZXJlbmNlcyBkaWFsb2dcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudElkIDogdGhlIGRvY3VtZW50IGlkICAgXHJcbiAgICAgKiBAcGFyYW0gbW9kZTogdGhlIG9wdGlvbmFsIG1vZGUuIERlZmF1bHQgaXMgcmVmZXJlbmNlcyBpblxyXG4gICAgICogQHBhcmFtIG1vZGVsOiB0aGUgb3B0aW9uYWwgZG9jdW1lbnQgbW9kZWxcclxuICAgICAqIEBwYXJhbSBhbmNob3I6IHRoZSBvcHRpb25hbCBkb2N1bWVudCBhbmNob3JcclxuICAgICAqIEBwYXJhbSBhbmNob3JUaXRsZTogOiB0aGUgb3B0aW9uYWwgYW5jaG9yIHRpdGxlXHJcbiAgICAgKiBAcGFyYW0gdXBkYXRlOiB0cnVlIGlmIGlzIGFuIHVwZGF0ZVxyXG4gICAgICovXHJcbiAgICBvcGVuUmVmZXJlbmNlcyhcclxuICAgICAgICBkb2N1bWVudElkOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgIG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlIHwgbnVsbCA9IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbixcclxuICAgICAgICBtb2RlbDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgYW5jaG9yOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkID0gbnVsbCxcclxuICAgICAgICBhbmNob3JUaXRsZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCA9IG51bGwsXHJcbiAgICAgICAgdXBkYXRlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHRydWUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJPUEVOSU5HIDJcIik7XHJcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIGFyaWFMYWJlbDogJ2RvY3VtZW50bycsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3RvcmVGb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgIGlkOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgICAgICAgbW9kZTogbW9kZSxcclxuICAgICAgICAgICAgICAgIG1vZGVsOiBtb2RlbCxcclxuICAgICAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yLFxyXG4gICAgICAgICAgICAgICAgYW5jaG9yVGl0bGU6IGFuY2hvclRpdGxlLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiB1cGRhdGUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICAgICAgICBtYXhXaWR0aDogJzEwMDBweCcsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnOTklJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGQuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyOiBDbGlwcGVyUmVmZXJlbmNlRGlhbG9nQ2xvc2VJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiByLmRvY3VtZW50SWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oci5kb2N1bWVudElkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYW5hZ2UgY2xpcHBlciBiYWdcclxuICAgICAqL1xyXG4gICAgb3BlbkJhZygpIHtcclxuICAgICAgICBDbGlwcGVyRG9jdW1lbnRzVXRpbHMub3BlbkJhZyhcclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG4gICAgICAgICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrcyBpZiBhIG1vZHVsZSBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICogQHBhcmFtIG1vZHVsZSA6IHRoZSBtb2R1bGUgdG8gY2hlY2tcclxuICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZHVsZSBpcyBzdXBwb3J0ZWRcclxuICAgICovXHJcbiAgICBpc01vZHVsZVN1cHBvcnRlZEJ5UlMobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5Ob3JtYXRpdmFWaWdlbnRlIHx8XHJcbiAgICAgICAgICAgIG1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5TY2FkZW56ZUVTZWduYWxhemlvbmk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgYSBtb2RlbCBpcyBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICAqIEBwYXJhbSBtb2RlbCA6IHRoZSBtb2RlbCB0byBjaGVja1xyXG4gICAgICogQHJldHVybnM6IHRydWUgaWYgdGhlIG1vZGVsIGlzIHN1cHBvcnRlZFxyXG4gICAgICovXHJcbiAgICBpc01vZGVsU3VwcG9ydGVkQnlSUyhtb2RlbDogQ2xpcHBlck1vZGVsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIG1vZGVsID09PSBDbGlwcGVyTW9kZWwuQWdnaW9ybmFtZW50b05vcm1hdGl2byB8fFxyXG4gICAgICAgICAgICBtb2RlbCA9PT0gQ2xpcHBlck1vZGVsLk5vcm1hdGl2YVZpZ2VudGUgfHxcclxuICAgICAgICAgICAgbW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZTtcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJpbnQgY3VycmVudCBkb2N1bWVudFxyXG4gICAgICovXHJcbiAgICBwcmludCgpIHtcclxuICAgICAgICBsZXQgZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLWRvY3VtZW50LWlmcmFtZScpIGFzIGFueTtcclxuICAgICAgICBpZiAoZikge1xyXG4gICAgICAgICAgICBmLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoJ3tcInR5cGVcIjogXCJwcmludFwifScsICcqJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBpbiBjdXJyZW50IGRvY3VtZW50XHJcbiAgICAgKi9cclxuICAgIGZpbmQoKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmluZm8oJ1BlciBjZXJjYXJlIG5lbCBkb2N1bWVudG8gcHJlbWkgQ1RSTCArIEYuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENoZWNrcyBpZiBhbGwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQgYnkgUlNcclxuICAgICogQHBhcmFtIGl0ZW1zIDogdGhlIGxpc3Qgb2YgZG9jdW1lbnNcclxuICAgICogQHJldHVybnM6IHRydWUgaWYgYWxsIGRvY3VtZW50cyBzdXBwb3J0cyBSU1xyXG4gICAgKi9cclxuICAgIGNhblN1cHBvcnRSUyhpdGVtczogW10pOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSB0aGlzLmlzTW9kZWxTdXBwb3J0ZWRCeVJTKG4ubW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbG93KSByZXR1cm47XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFsbG93O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIFJTIGlzIGVuYWJsZWQgZm9yIGFsbCBnaXZlbiBkb2N1bWVudHNcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudHMgOiB0aGUgZG9jdW1lbnRzIHRvIGNoZWNrXHJcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGFsbGEgZG9jdW1lbnRzIGFyIFJTIGVuYWJsZWRcclxuICAgICAqL1xyXG4gICAgUlNfZW5hYmxlZChkb2N1bWVudHM6IENsaXBwZXJEb2N1bWVudEluZm9bXSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnRzIHx8IGRvY3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgICAgICBsZXQgYWxsb3cgPSBmYWxzZTtcclxuICAgICAgICBkb2N1bWVudHMuZm9yRWFjaChuID0+IHtcclxuICAgICAgICAgICAgYWxsb3cgPSBuICYmIChuLm1vZGVsID09PSBDbGlwcGVyTW9kZWwuTm9ybWF0aXZhVmlnZW50ZSB8fFxyXG4gICAgICAgICAgICAgICAgbi5tb2RlbCA9PT0gQ2xpcHBlck1vZGVsLkFnZ2lvcm5hbWVudG9Ob3JtYXRpdm8gfHxcclxuICAgICAgICAgICAgICAgIG4ubW9kZWwgPT09IENsaXBwZXJNb2RlbC5TY2FkZW56ZSk7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3cpIHJldHVybjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYWxsb3c7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE5ldyBsYXdcclxuICAgICogQHBhcmFtIGRvY3VtZW50czogdGhlIGFycmF5IG9mIGRvY3VtZW50cyB0byBsaW5rIHRvIHRoZSBsYXdcclxuICAgICovXHJcbiAgICBSU19uZXdMYXcoZG9jdW1lbnRzOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10pIHtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX05FV19MQVcsIGRvY3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXcgYWN0aXZpdHlcclxuICAgICAqIEBwYXJhbSBkb2N1bWVudDogdGhlIGRvY3VtZW50IHRvIGxpbmsgdG8gdGhlIGFjdGl2aXR5XHJcbiAgICAgKi9cclxuICAgIFJTX25ld0FjdGl2aXR5KGRvY3VtZW50OiBDbGlwcGVyRG9jdW1lbnRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJyb2FkY2FzdFNlcnZpY2Uuc2VuZE1lc3NhZ2UoQ2xpcHBlck1lc3NhZ2VzLklOVEVST1BfUlNfTkVXX0FDVElWSVRZLCBkb2N1bWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIERvY3VtZW50IHVzYWdlIHJlcG9ydFxyXG4gICAgKiBAcGFyYW0gZG9jdW1lbnQ6IHRoZSBsYXdcclxuICAgICovXHJcbiAgICBSU191c2FnZVJlcG9ydChkb2N1bWVudDogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5icm9hZGNhc3RTZXJ2aWNlLnNlbmRNZXNzYWdlKENsaXBwZXJNZXNzYWdlcy5JTlRFUk9QX1JTX1VTQUdFX1JFUE9SVCwgZG9jdW1lbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbn1cclxuIl19
@@ -4,7 +4,6 @@ import { MatDividerModule } from '@angular/material/divider';
4
4
  import { MatIconModule } from '@angular/material/icon';
5
5
  import { MatMenuModule } from '@angular/material/menu';
6
6
  import { ClipperDocumentManager } from '../document-manager/document-manager';
7
- import { ClipperDocumentComponent } from '../document/document.component';
8
7
  import { ClipperReferencesComponent } from '../references/references.component';
9
8
  import * as i0 from "@angular/core";
10
9
  import * as i1 from "@angular/material/menu";
@@ -37,6 +36,10 @@ export class ClipperDocumentMenuComponent extends ClipperDocumentManager {
37
36
  this.canPrint = input(false);
38
37
  this.canFind = input(false);
39
38
  }
39
+ doOpenReferences(documentId, mode) {
40
+ console.log('OPENING 3');
41
+ this.parent()?.openReferences(documentId, mode);
42
+ }
40
43
  /**
41
44
  * Check if current item or selection is read
42
45
  * @returns 0 if not read, 1 if read, 2 if unknown
@@ -60,10 +63,11 @@ export class ClipperDocumentMenuComponent extends ClipperDocumentManager {
60
63
  this.parent()?.setRead(value, this.item());
61
64
  }
62
65
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
63
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <span>Stampa</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+P</span>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <span>Trova nel documento</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+F</span>\r\n </div>\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
66
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.0", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isDeadline: { classPropertyName: "isDeadline", publicName: "isDeadline", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, isLaw: { classPropertyName: "isLaw", publicName: "isLaw", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent()?.selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <span>Stampa</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+P</span>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <span>Trova nel documento</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+F</span>\r\n </div>\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"doOpenReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
64
67
  }
65
68
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ClipperDocumentMenuComponent, decorators: [{
66
69
  type: Component,
67
- args: [{ selector: 'clipper-document-menu', standalone: true, imports: [MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule, ClipperDocumentComponent, ClipperReferencesComponent], template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <span>Stampa</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+P</span>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <span>Trova nel documento</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+F</span>\r\n </div>\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>" }]
70
+ args: [{ selector: 'clipper-document-menu', standalone: true, imports: [MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule,
71
+ ClipperReferencesComponent], template: "@if (selectionSource() === 'selection') {\r\n<button mat-menu-item (click)=\"parent()?.selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (selectionSource() === 'bag') {\r\n<button mat-menu-item (click)=\"openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (selectionSource()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if (item() || (selection()?.length === 1)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\"\r\n (click)=\"open(item() ? item().documentId : selection()[0].documentId)\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"print()\" [attr.aria-label]=\"'Stampa documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <span>Stampa</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+P</span>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"find()\" [attr.aria-label]=\"'Trova nel documento'\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <span fxFlex=\"*\" fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <span>Trova nel documento</span>\r\n </span>\r\n <span class=\"accent small bold\">Ctrl+F</span>\r\n </div>\r\n</button>\r\n}\r\n@if (selectionSource() !== 'bag') {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"addItemsToBag(item() ? [item()] : selection())\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length > 1))) {\r\n<button mat-menu-item (click)=\"sendItemsTo(item() ? [item()] : selection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (((item() && item().model != 11) || (selection()?.length === 1 && selection()[0].model != 11))) {\r\n<button mat-menu-item (click)=\"exportPdf(item() ? item() : selection()[0])\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if ((item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"showLink(item() ? item() : selection()[0])\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (!isReference() && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n}\r\n\r\n@if (!isReference() && isReadable()) {\r\n<mat-divider></mat-divider>\r\n\r\n@if (item() ? item().isRead === true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead ===\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (item() ? item().isRead !== true : (parent()?.selection?.all.length != 1 || parent()?.selection?.all[0].isRead !==\r\ntrue)) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n}\r\n\r\n@if ((isLawInForce() || isDeadline()) && (item() || (selection()?.length === 1))) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report utilizzo'\" (click)=\"report(item() ? item() : selection()[0])\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if ( !isReference() &&(item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"doOpenReferences(item() ? item().documentId : selection()[0].documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && (item() || (selection()?.length === 1))) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"parent()?.openReferences(item() ? item().documentId : selection()[0].documentId, 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<mat-divider></mat-divider>\r\n}\r\n@if ((item() || selection?.length > 0) && RS_enabled(item() ? [item()] : selection()) && !useSelections()) {\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"menuRS\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n}\r\n<mat-menu #menuRS=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"RS_newLaw([item()])\">\r\n Nuova legge\r\n </button>\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"RS_newActivity(item())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (item() || selection?.length === 1) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\" (click)=\"RS_usageReport(item())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>" }]
68
72
  }] });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7QUFXaEYsTUFBTSxPQUFPLDRCQUE2QixTQUFRLHNCQUFzQjtJQVB4RTs7UUFTRSxvQkFBZSxHQUFHLEtBQUssQ0FBK0IsV0FBVyxDQUFDLENBQUM7UUFDekQsY0FBUyxHQUFrQyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7b0JBQy9CLEtBQUssS0FBSzt3QkFDUixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO29CQUNqQyxLQUFLLFdBQVc7d0JBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0JBQWEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEMsV0FBTSxHQUFHLEtBQUssRUFBOEIsQ0FBQztRQUM3QyxTQUFJLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzlCLGFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakMsWUFBTyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztLQXlCakM7SUF0QkM7OztPQUdHO0lBQ0gsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGVBQWUsRUFBRTtZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1FBQzNELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsT0FBTyxjQUFjLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxLQUFjO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7OEdBOUNVLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHNpRENwQnpDLCtuTUE4SVcseURENUhDLGFBQWEsNnZCQUFFLGFBQWEsbUxBQUUsZ0JBQWdCLGtJQUFFLGdCQUFnQjs7MkZBRS9ELDRCQUE0QjtrQkFQeEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxXQUNQLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgU2lnbmFsLCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyIH0gZnJvbSAnLi4vc2VhcmNoLXJlc3VsdC1tYW5hZ2VyL3NlYXJjaC1yZXN1bHQtbWFuYWdlcic7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudE1hbmFnZXIgfSBmcm9tICcuLi9kb2N1bWVudC1tYW5hZ2VyL2RvY3VtZW50LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC9kb2N1bWVudC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudCB9IGZyb20gJy4uL3JlZmVyZW5jZXMvcmVmZXJlbmNlcy5jb21wb25lbnQnO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NsaXBwZXItZG9jdW1lbnQtbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RvY3VtZW50LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtNYXRNZW51TW9kdWxlLCBNYXRJY29uTW9kdWxlLCBNYXREaXZpZGVyTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlLCBDbGlwcGVyRG9jdW1lbnRDb21wb25lbnQsIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCBleHRlbmRzIENsaXBwZXJEb2N1bWVudE1hbmFnZXIge1xyXG5cclxuICBzZWxlY3Rpb25Tb3VyY2UgPSBpbnB1dDwnYmFnJyB8ICdzZWxlY3Rpb24nIHwgJ25vbmUnPignc2VsZWN0aW9uJyk7XHJcbiAgcHJvdGVjdGVkIHNlbGVjdGlvbjogU2lnbmFsPENsaXBwZXJEb2N1bWVudEluZm9bXT4gPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBpZiAodGhpcy51c2VTZWxlY3Rpb25zKCkpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLnNlbGVjdGlvblNvdXJjZSgpKSB7XHJcbiAgICAgICAgY2FzZSAnYmFnJzpcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNsaXBwZXJTZXJ2aWNlLmJhZztcclxuICAgICAgICBjYXNlICdzZWxlY3Rpb24nOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfSk7XHJcbiAgdXNlU2VsZWN0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBwYXJlbnQgPSBpbnB1dDxDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlcj4oKTtcclxuICBpdGVtID0gaW5wdXQ8Q2xpcHBlckRvY3VtZW50SW5mbz4oKTtcclxuICBpc1JlZmVyZW5jZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1JlYWRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNEZWFkbGluZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNMYXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuUHJpbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmluZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgaXRlbSBvciBzZWxlY3Rpb24gaXMgcmVhZFxyXG4gICAqIEByZXR1cm5zIDAgaWYgbm90IHJlYWQsIDEgaWYgcmVhZCwgMiBpZiB1bmtub3duXHJcbiAgICovXHJcbiAgaXNSZWFkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5pdGVtKCkpIHJldHVybiB0aGlzLml0ZW0oKS5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIGlmICh0aGlzLnBhcmVudCgpPy5oYXNBbnlTZWxlY3Rpb24oKSkgcmV0dXJuIDI7XHJcbiAgICBjb25zdCBmaXJzdFNlbGVjdGlvbiA9IHRoaXMucGFyZW50KCk/LmdldFNpbmdsZVNlbGVjdGlvbigpO1xyXG4gICAgaWYgKGZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmaXJzdFNlbGVjdGlvbi5pc1JlYWQgPT09IHRydWUgPyAxIDogMDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSBpcyByZWFkIGZsYWcgdmFsdWVcclxuICAgKiBAcGFyYW0gdmFsdWU6IHRydWUgb3IgZmFsc2VcclxuICAgKi9cclxuICBzZXRSZWFkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnBhcmVudCgpPy5zZXRSZWFkKHZhbHVlLCB0aGlzLml0ZW0oKSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJAaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnc2VsZWN0aW9uJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLnNlbGVjdGlvbj8uY2xlYXIoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Rlc2VsZXppb25hIHR1dHRpJ1wiPlxyXG4gIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+RGVzZWxlemlvbmEgdHV0dGlcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnYmFnJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9wZW5CYWcoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+R2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKHNlbGVjdGlvblNvdXJjZSgpKSB7XHJcbjxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG59XHJcbkBpZiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQXByaSBkb2N1bWVudG8nXCJcclxuICAoY2xpY2spPVwib3BlbihpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQpXCI+XHJcbiAgPG1hdC1pY29uPjwvbWF0LWljb24+QXByaVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuUHJpbnQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInByaW50KClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTdGFtcGEgZG9jdW1lbnRvJ1wiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgPHNwYW4gZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+cHJpbnQ8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5TdGFtcGE8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cImFjY2VudCBzbWFsbCBib2xkXCI+Q3RybCtQPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuRmluZCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZmluZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInVHJvdmEgbmVsIGRvY3VtZW50bydcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgIDxzcGFuIGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPmZpbmRfaW5fcGFnZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPlRyb3ZhIG5lbCBkb2N1bWVudG88L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cImFjY2VudCBzbWFsbCBib2xkXCI+Q3RybCtGPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKHNlbGVjdGlvblNvdXJjZSgpICE9PSAnYmFnJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9ybydcIlxyXG4gIChjbGljayk9XCJhZGRJdGVtc1RvQmFnKGl0ZW0oKSA/IFtpdGVtKCldIDogc2VsZWN0aW9uKCkpXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+QWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPiAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzZW5kSXRlbXNUbyhpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCInSW52aWEgZG9jdW1lbnRvIHBlciBlbWFpbCdcIj5cclxuICA8bWF0LWljb24+c2VuZDwvbWF0LWljb24+SW52aWEgcGVyIGVtYWlsXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoKChpdGVtKCkgJiYgaXRlbSgpLm1vZGVsICE9IDExKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSAmJiBzZWxlY3Rpb24oKVswXS5tb2RlbCAhPSAxMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0UGRmKGl0ZW0oKSA/IGl0ZW0oKSA6IHNlbGVjdGlvbigpWzBdKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2FsdmEgZG9jdW1lbnRvIGluIHBkZidcIj5cclxuICA8bWF0LWljb24+c2F2ZV9hbHQ8L21hdC1pY29uPlNhbHZhIGluIHBkZlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInR2VuZXJhIHVuIGxpbmsgcGVybWFuZW50ZSBkYSB1dGlsaXp6YXJlIGVzdGVybmFtZW50ZSdcIlxyXG4gIChjbGljayk9XCJzaG93TGluayhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSlcIj5cclxuICA8bWF0LWljb24+bGluazwvbWF0LWljb24+TGlua1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxpbmtzTWVudVwiPlxyXG4gIDxtYXQtaWNvbj5jb21wYXJlX2Fycm93czwvbWF0LWljb24+Q29sbGVnYW1lbnRpXHJcbjwvYnV0dG9uPlxyXG59XHJcblxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzUmVhZGFibGUoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCA9PT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCA9PT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZGEgbGVnZ2VyZSdcIiAoY2xpY2spPVwic2V0UmVhZChmYWxzZSlcIj5cclxuICA8bWF0LWljb24+b3V0bGluZWRfZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBkYSBsZWdnZXJlXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCAhPT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCAhPT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZ2nDoCBsZXR0bydcIiAoY2xpY2spPVwic2V0UmVhZCh0cnVlKVwiPlxyXG4gIDxtYXQtaWNvbj5mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGdpw6AgbGV0dG9cclxuPC9idXR0b24+XHJcbn1cclxufVxyXG5cclxuQGlmICgoaXNMYXdJbkZvcmNlKCkgfHwgaXNEZWFkbGluZSgpKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSByZXBvcnQgdXRpbGl6em8nXCIgKGNsaWNrKT1cInJlcG9ydChpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSlcIj5cclxuICA8bWF0LWljb24+YXNzaWdubWVudDwvbWF0LWljb24+UmVwb3J0XHJcbjwvYnV0dG9uPlxyXG59XHJcbjxtYXQtbWVudSAjbGlua3NNZW51PVwibWF0TWVudVwiPlxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSByaWNoaWFtYXRpIGRhIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgMSlcIj5cclxuICAgIERvY3VtZW50aSByaWNoaWFtYXRpXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoICFpc1JlZmVyZW5jZSgpICYmKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSBjaGUgcmljaGlhbWFubyBxdWVzdG8nXCJcclxuICAgIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQsIDIpXCI+XHJcbiAgICBEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm9cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGdpdXJpc3BydWRlbnphJ1wiXHJcbiAgICAoY2xpY2spPVwib3BlblJlZmVyZW5jZXMoaXRlbSgpID8gaXRlbSgpLmRvY3VtZW50SWQgOiBzZWxlY3Rpb24oKVswXS5kb2N1bWVudElkLCA0KVwiPlxyXG4gICAgSnVyaXNcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIG1vZGlmaWNoZSBub3JtYXRpdmUnXCJcclxuICAgIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQsIDMpXCI+XHJcbiAgICBNb2RpZmljaGVcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbWF0LW1lbnU+XHJcbkBpZiAoKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA+IDApICYmIFJTX2VuYWJsZWQoaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSkgJiYgIXVzZVNlbGVjdGlvbnMoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPiAwKSAmJiBSU19lbmFibGVkKGl0ZW0oKSA/IFtpdGVtKCldIDogc2VsZWN0aW9uKCkpICYmICF1c2VTZWxlY3Rpb25zKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIG1hdFRvb2x0aXA9XCJSZWdpc3RybyAmIFNjYWRlbnphcmlvXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B6aW9uaSBkaSBSZWdpc3RybyAmIFNjYWRlbnphcmlvJ1wiXHJcbiAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVSU1wiPlxyXG4gIDxtYXQtaWNvbj5hbGFybV9vbjwvbWF0LWljb24+XHJcbiAgUmVnaXN0cm8gZSBzY2FkZW56YXJpb1xyXG48L2J1dHRvbj5cclxufVxyXG48bWF0LW1lbnUgI21lbnVSUz1cIm1hdE1lbnVcIj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTnVvdmEgbGVnZ2UnXCIgKGNsaWNrKT1cIlJTX25ld0xhdyhbaXRlbSgpXSlcIj5cclxuICAgIE51b3ZhIGxlZ2dlXHJcbiAgPC9idXR0b24+XHJcbiAgQGlmIChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTnVvdmEgYXR0aXZpdMOgJ1wiIChjbGljayk9XCJSU19uZXdBY3Rpdml0eShpdGVtKCkpXCI+XHJcbiAgICBOdW92YSBhdHRpdml0w6BcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmIChpdGVtKCkgfHwgc2VsZWN0aW9uPy5sZW5ndGggPT09IDEpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInUmVwb3J0IHV0aWxpenpvIG5vcm1hJ1wiIChjbGljayk9XCJSU191c2FnZVJlcG9ydChpdGVtKCkpXCI+XHJcbiAgICBSZXBvcnQgdXRpbGl6em8gbm9ybWFcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbWF0LW1lbnU+Il19
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7QUFZaEYsTUFBTSxPQUFPLDRCQUE2QixTQUFRLHNCQUFzQjtJQVJ4RTs7UUFVRSxvQkFBZSxHQUFHLEtBQUssQ0FBK0IsV0FBVyxDQUFDLENBQUM7UUFDekQsY0FBUyxHQUFrQyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7b0JBQy9CLEtBQUssS0FBSzt3QkFDUixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO29CQUNqQyxLQUFLLFdBQVc7d0JBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztnQkFDekMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO1FBQ0gsa0JBQWEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDdEMsV0FBTSxHQUFHLEtBQUssRUFBOEIsQ0FBQztRQUM3QyxTQUFJLEdBQUcsS0FBSyxFQUF1QixDQUFDO1FBQ3BDLGdCQUFXLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLGVBQVUsR0FBRyxLQUFLLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDbEMsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyQyxVQUFLLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzlCLGFBQVEsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakMsWUFBTyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztLQTZCakM7SUEzQkMsZ0JBQWdCLENBQUMsVUFBeUIsRUFBRSxJQUF3QztRQUNsRixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxjQUFjLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsZUFBZSxFQUFFO1lBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLGtCQUFrQixFQUFFLENBQUM7UUFDM0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPLGNBQWMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLEtBQWM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQzs4R0FsRFUsNEJBQTRCO2tHQUE1Qiw0QkFBNEIsc2lEQ3BCekMsZ3FNQThJVyx5REQ3SEMsYUFBYSw2dkJBQUUsYUFBYSxtTEFBRSxnQkFBZ0Isa0lBQUUsZ0JBQWdCOzsyRkFHL0QsNEJBQTRCO2tCQVJ4QyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJLFdBQ1AsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQjt3QkFDeEUsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFNpZ25hbCwgY29tcHV0ZWQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50SW5mbywgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuaW1wb3J0IHsgQ2xpcHBlckRvY3VtZW50TWFuYWdlciB9IGZyb20gJy4uL2RvY3VtZW50LW1hbmFnZXIvZG9jdW1lbnQtbWFuYWdlcic7XHJcbmltcG9ydCB7IENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50IH0gZnJvbSAnLi4vcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2xpcHBlci1kb2N1bWVudC1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW01hdE1lbnVNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIFxyXG4gICAgQ2xpcHBlclJlZmVyZW5jZXNDb21wb25lbnRdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyRG9jdW1lbnRNZW51Q29tcG9uZW50IGV4dGVuZHMgQ2xpcHBlckRvY3VtZW50TWFuYWdlciB7XHJcblxyXG4gIHNlbGVjdGlvblNvdXJjZSA9IGlucHV0PCdiYWcnIHwgJ3NlbGVjdGlvbicgfCAnbm9uZSc+KCdzZWxlY3Rpb24nKTtcclxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uOiBTaWduYWw8Q2xpcHBlckRvY3VtZW50SW5mb1tdPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmICh0aGlzLnVzZVNlbGVjdGlvbnMoKSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uU291cmNlKCkpIHtcclxuICAgICAgICBjYXNlICdiYWcnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2xpcHBlclNlcnZpY2UuYmFnO1xyXG4gICAgICAgIGNhc2UgJ3NlbGVjdGlvbic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9KTtcclxuICB1c2VTZWxlY3Rpb25zID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHBhcmVudCA9IGlucHV0PENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyPigpO1xyXG4gIGl0ZW0gPSBpbnB1dDxDbGlwcGVyRG9jdW1lbnRJbmZvPigpO1xyXG4gIGlzUmVmZXJlbmNlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzUmVhZGFibGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBpc0RlYWRsaW5lID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzTGF3SW5Gb3JjZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0xhdyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5QcmludCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5GaW5kID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBkb09wZW5SZWZlcmVuY2VzKGRvY3VtZW50SWQ6IHN0cmluZyB8IG51bGwsIG1vZGU/OiBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdPUEVOSU5HIDMnKTtcclxuICAgIHRoaXMucGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGRvY3VtZW50SWQsIG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY3VycmVudCBpdGVtIG9yIHNlbGVjdGlvbiBpcyByZWFkXHJcbiAgICogQHJldHVybnMgMCBpZiBub3QgcmVhZCwgMSBpZiByZWFkLCAyIGlmIHVua25vd25cclxuICAgKi9cclxuICBpc1JlYWQoKTogbnVtYmVyIHtcclxuICAgIGlmICh0aGlzLml0ZW0oKSkgcmV0dXJuIHRoaXMuaXRlbSgpLmlzUmVhZCA9PT0gdHJ1ZSA/IDEgOiAwO1xyXG4gICAgaWYgKHRoaXMucGFyZW50KCk/Lmhhc0FueVNlbGVjdGlvbigpKSByZXR1cm4gMjtcclxuICAgIGNvbnN0IGZpcnN0U2VsZWN0aW9uID0gdGhpcy5wYXJlbnQoKT8uZ2V0U2luZ2xlU2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoZmlyc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZpcnN0U2VsZWN0aW9uLmlzUmVhZCA9PT0gdHJ1ZSA/IDEgOiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGlzIHJlYWQgZmxhZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZTogdHJ1ZSBvciBmYWxzZVxyXG4gICAqL1xyXG4gIHNldFJlYWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucGFyZW50KCk/LnNldFJlYWQodmFsdWUsIHRoaXMuaXRlbSgpKTtcclxuICB9XHJcblxyXG59XHJcbiIsIkBpZiAoc2VsZWN0aW9uU291cmNlKCkgPT09ICdzZWxlY3Rpb24nKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCk/LnNlbGVjdGlvbj8uY2xlYXIoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0Rlc2VsZXppb25hIHR1dHRpJ1wiPlxyXG4gIDxtYXQtaWNvbj5jbGVhcjwvbWF0LWljb24+RGVzZWxlemlvbmEgdHV0dGlcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKHNlbGVjdGlvblNvdXJjZSgpID09PSAnYmFnJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9wZW5CYWcoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+R2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKHNlbGVjdGlvblNvdXJjZSgpKSB7XHJcbjxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG59XHJcbkBpZiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQXByaSBkb2N1bWVudG8nXCJcclxuICAoY2xpY2spPVwib3BlbihpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQpXCI+XHJcbiAgPG1hdC1pY29uPjwvbWF0LWljb24+QXByaVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuUHJpbnQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInByaW50KClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTdGFtcGEgZG9jdW1lbnRvJ1wiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIwcHhcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgPHNwYW4gZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiPlxyXG4gICAgICA8bWF0LWljb24+cHJpbnQ8L21hdC1pY29uPlxyXG4gICAgICA8c3Bhbj5TdGFtcGE8L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cImFjY2VudCBzbWFsbCBib2xkXCI+Q3RybCtQPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuRmluZCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZmluZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInVHJvdmEgbmVsIGRvY3VtZW50bydcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgIDxzcGFuIGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPmZpbmRfaW5fcGFnZTwvbWF0LWljb24+XHJcbiAgICAgIDxzcGFuPlRyb3ZhIG5lbCBkb2N1bWVudG88L3NwYW4+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8c3BhbiBjbGFzcz1cImFjY2VudCBzbWFsbCBib2xkXCI+Q3RybCtGPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKHNlbGVjdGlvblNvdXJjZSgpICE9PSAnYmFnJykge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9ybydcIlxyXG4gIChjbGljayk9XCJhZGRJdGVtc1RvQmFnKGl0ZW0oKSA/IFtpdGVtKCldIDogc2VsZWN0aW9uKCkpXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+QWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPiAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJzZW5kSXRlbXNUbyhpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCInSW52aWEgZG9jdW1lbnRvIHBlciBlbWFpbCdcIj5cclxuICA8bWF0LWljb24+c2VuZDwvbWF0LWljb24+SW52aWEgcGVyIGVtYWlsXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoKChpdGVtKCkgJiYgaXRlbSgpLm1vZGVsICE9IDExKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSAmJiBzZWxlY3Rpb24oKVswXS5tb2RlbCAhPSAxMSkpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0UGRmKGl0ZW0oKSA/IGl0ZW0oKSA6IHNlbGVjdGlvbigpWzBdKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2FsdmEgZG9jdW1lbnRvIGluIHBkZidcIj5cclxuICA8bWF0LWljb24+c2F2ZV9hbHQ8L21hdC1pY29uPlNhbHZhIGluIHBkZlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInR2VuZXJhIHVuIGxpbmsgcGVybWFuZW50ZSBkYSB1dGlsaXp6YXJlIGVzdGVybmFtZW50ZSdcIlxyXG4gIChjbGljayk9XCJzaG93TGluayhpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSlcIj5cclxuICA8bWF0LWljb24+bGluazwvbWF0LWljb24+TGlua1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIChpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxpbmtzTWVudVwiPlxyXG4gIDxtYXQtaWNvbj5jb21wYXJlX2Fycm93czwvbWF0LWljb24+Q29sbGVnYW1lbnRpXHJcbjwvYnV0dG9uPlxyXG59XHJcblxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzUmVhZGFibGUoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCA9PT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCA9PT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZGEgbGVnZ2VyZSdcIiAoY2xpY2spPVwic2V0UmVhZChmYWxzZSlcIj5cclxuICA8bWF0LWljb24+b3V0bGluZWRfZmxhZzwvbWF0LWljb24+U2VnbmEgY29tZSBkYSBsZWdnZXJlXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoaXRlbSgpID8gaXRlbSgpLmlzUmVhZCAhPT0gdHJ1ZSA6IChwYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwubGVuZ3RoICE9IDEgfHwgcGFyZW50KCk/LnNlbGVjdGlvbj8uYWxsWzBdLmlzUmVhZCAhPT1cclxudHJ1ZSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZ2nDoCBsZXR0bydcIiAoY2xpY2spPVwic2V0UmVhZCh0cnVlKVwiPlxyXG4gIDxtYXQtaWNvbj5mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGdpw6AgbGV0dG9cclxuPC9idXR0b24+XHJcbn1cclxufVxyXG5cclxuQGlmICgoaXNMYXdJbkZvcmNlKCkgfHwgaXNEZWFkbGluZSgpKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSByZXBvcnQgdXRpbGl6em8nXCIgKGNsaWNrKT1cInJlcG9ydChpdGVtKCkgPyBpdGVtKCkgOiBzZWxlY3Rpb24oKVswXSlcIj5cclxuICA8bWF0LWljb24+YXNzaWdubWVudDwvbWF0LWljb24+UmVwb3J0XHJcbjwvYnV0dG9uPlxyXG59XHJcbjxtYXQtbWVudSAjbGlua3NNZW51PVwibWF0TWVudVwiPlxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSByaWNoaWFtYXRpIGRhIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpPy5vcGVuUmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQsIDEpXCI+XHJcbiAgICBEb2N1bWVudGkgcmljaGlhbWF0aVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKCAhaXNSZWZlcmVuY2UoKSAmJihpdGVtKCkgfHwgKHNlbGVjdGlvbigpPy5sZW5ndGggPT09IDEpKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlc3RvJ1wiXHJcbiAgICAoY2xpY2spPVwiZG9PcGVuUmVmZXJlbmNlcyhpdGVtKCkgPyBpdGVtKCkuZG9jdW1lbnRJZCA6IHNlbGVjdGlvbigpWzBdLmRvY3VtZW50SWQsIDIpXCI+XHJcbiAgICBEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm9cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiAoaXRlbSgpIHx8IChzZWxlY3Rpb24oKT8ubGVuZ3RoID09PSAxKSkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGdpdXJpc3BydWRlbnphJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgNClcIj5cclxuICAgIEp1cmlzXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgaXNMYXdJbkZvcmNlKCkgJiYgKGl0ZW0oKSB8fCAoc2VsZWN0aW9uKCk/Lmxlbmd0aCA9PT0gMSkpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBtb2RpZmljaGUgbm9ybWF0aXZlJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0oKSA/IGl0ZW0oKS5kb2N1bWVudElkIDogc2VsZWN0aW9uKClbMF0uZG9jdW1lbnRJZCwgMylcIj5cclxuICAgIE1vZGlmaWNoZVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9tYXQtbWVudT5cclxuQGlmICgoaXRlbSgpIHx8IHNlbGVjdGlvbj8ubGVuZ3RoID4gMCkgJiYgUlNfZW5hYmxlZChpdGVtKCkgPyBbaXRlbSgpXSA6IHNlbGVjdGlvbigpKSAmJiAhdXNlU2VsZWN0aW9ucygpKSB7XHJcbjxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG59XHJcbkBpZiAoKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA+IDApICYmIFJTX2VuYWJsZWQoaXRlbSgpID8gW2l0ZW0oKV0gOiBzZWxlY3Rpb24oKSkgJiYgIXVzZVNlbGVjdGlvbnMoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gbWF0VG9vbHRpcD1cIlJlZ2lzdHJvICYgU2NhZGVuemFyaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHppb25pIGRpIFJlZ2lzdHJvICYgU2NhZGVuemFyaW8nXCJcclxuICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVJTXCI+XHJcbiAgPG1hdC1pY29uPmFsYXJtX29uPC9tYXQtaWNvbj5cclxuICBSZWdpc3RybyBlIHNjYWRlbnphcmlvXHJcbjwvYnV0dG9uPlxyXG59XHJcbjxtYXQtbWVudSAjbWVudVJTPVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBsZWdnZSdcIiAoY2xpY2spPVwiUlNfbmV3TGF3KFtpdGVtKCldKVwiPlxyXG4gICAgTnVvdmEgbGVnZ2VcclxuICA8L2J1dHRvbj5cclxuICBAaWYgKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBhdHRpdml0w6AnXCIgKGNsaWNrKT1cIlJTX25ld0FjdGl2aXR5KGl0ZW0oKSlcIj5cclxuICAgIE51b3ZhIGF0dGl2aXTDoFxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGl0ZW0oKSB8fCBzZWxlY3Rpb24/Lmxlbmd0aCA9PT0gMSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZXBvcnQgdXRpbGl6em8gbm9ybWEnXCIgKGNsaWNrKT1cIlJTX3VzYWdlUmVwb3J0KGl0ZW0oKSlcIj5cclxuICAgIFJlcG9ydCB1dGlsaXp6byBub3JtYVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuPC9tYXQtbWVudT4iXX0=