@hestia-earth/ui-components 0.24.0-3 → 0.24.0-5

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,3 +1,4 @@
1
+ /// <reference types="google.maps" />
1
2
  import { HttpClient } from '@angular/common/http';
2
3
  import { InjectionToken } from '@angular/core';
3
4
  import { Observable } from 'rxjs';
@@ -55,7 +56,12 @@ export declare const markerPie: (configs: IMarkerPieConfig[], size?: number) =>
55
56
  labelOrigin: google.maps.Point;
56
57
  };
57
58
  export declare const markerIcon: (scale?: number) => google.maps.Symbol;
58
- export declare const createMarker: (position?: google.maps.LatLng | google.maps.LatLngLiteral, text?: string, color?: string, scale?: number) => google.maps.Marker;
59
+ export interface IMarker {
60
+ position: google.maps.LatLng | google.maps.LatLngLiteral;
61
+ label: google.maps.MarkerLabel;
62
+ icon: google.maps.Symbol;
63
+ }
64
+ export declare const createMarker: (position?: google.maps.LatLng | google.maps.LatLngLiteral, text?: string, color?: string, scale?: number) => IMarker;
59
65
  interface IPolygon {
60
66
  type: 'Polygon';
61
67
  coordinates: number[][][];
@@ -78,11 +84,16 @@ export interface IGeometryCollection {
78
84
  type: 'GeometryCollection';
79
85
  geometries: geometry[];
80
86
  }
81
- type feature = IFeature | IFeatureCollection | IGeometryCollection | IPolygon | IMultiPolygon;
87
+ export type feature = IFeature | IFeatureCollection | IGeometryCollection | IPolygon | IMultiPolygon;
82
88
  export declare const defaultFeature: () => IFeature;
83
89
  export declare const pointToCoordinates: (point: google.maps.LatLng) => number[];
84
90
  export declare const coordinatesToPoint: (values: (number | number[])[]) => any;
85
91
  export declare const polygonToCoordinates: (polygon: google.maps.Polygon) => number[][];
92
+ export interface IPolygonMap {
93
+ paths: google.maps.MVCArray<google.maps.MVCArray<google.maps.LatLng>>;
94
+ options: google.maps.PolygonOptions;
95
+ }
96
+ export declare const polygonToMap: (polygon: google.maps.Polygon, color?: string) => IPolygonMap;
86
97
  export declare const addPolygonToFeature: (feat: feature, polygon: google.maps.Polygon) => any;
87
98
  export declare const polygonsFromFeature: (feat: feature, color?: string) => google.maps.Polygon[];
88
99
  export declare const polygonBounds: (polygon?: google.maps.Polygon | google.maps.Polygon[]) => google.maps.LatLngBounds;
@@ -1,6 +1,6 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  import { of } from 'rxjs';
3
- import { catchError, map, mergeMap, shareReplay } from 'rxjs/operators';
3
+ import { catchError, delay, map, mergeMap, shareReplay } from 'rxjs/operators';
4
4
  const loadMapUrl = 'https://maps.googleapis.com/maps/api/js';
5
5
  const buildMapsUrl = (params) => Object.entries(params)
6
6
  .filter(([_key, values]) => values.length)
@@ -23,7 +23,7 @@ export const HE_MAP_LOADED = new InjectionToken('Google Maps API Loaded');
23
23
  * @param libraries
24
24
  * @returns
25
25
  */
26
- export const loadMapApi = (apiKey, libraries = ['visualization', 'drawing']) => (httpClient) => of(`${loadMapUrl}?${buildMapsUrl({ key: [apiKey], libraries })}`).pipe(mergeMap(url => httpClient.jsonp(url, 'callback')), shareReplay({ bufferSize: 1, refCount: true }), map(() => true), catchError(e => {
26
+ export const loadMapApi = (apiKey, libraries = ['visualization', 'drawing']) => (httpClient) => of(`${loadMapUrl}?${buildMapsUrl({ key: [apiKey], libraries })}`).pipe(mergeMap(url => httpClient.jsonp(url, 'callback')), shareReplay({ bufferSize: 1, refCount: true }), delay(100), map(() => true), catchError(e => {
27
27
  console.error(e);
28
28
  return of(false);
29
29
  }));
@@ -88,13 +88,13 @@ export const markerIcon = (scale = 7) => ({
88
88
  scale,
89
89
  labelOrigin: new google.maps.Point(0, -2)
90
90
  });
91
- export const createMarker = (position, text = '', color = fillColor, scale) => (position && position.lat && position.lng
92
- ? new google.maps.Marker({
91
+ export const createMarker = (position, text = '', color = fillColor, scale) => position?.lat && position?.lng
92
+ ? {
93
93
  position,
94
94
  label: { color, text },
95
95
  icon: markerIcon(scale)
96
- })
97
- : undefined);
96
+ }
97
+ : undefined;
98
98
  export const defaultFeature = () => ({
99
99
  type: 'Feature',
100
100
  properties: {},
@@ -123,6 +123,13 @@ export const polygonToCoordinates = (polygon) => polygon
123
123
  const points = path.getArray();
124
124
  return [...points.map(pointToCoordinates), pointToCoordinates(points[0])];
125
125
  })[0];
126
+ export const polygonToMap = (polygon, color = strokeColor) => ({
127
+ paths: polygon.getPaths(),
128
+ options: {
129
+ ...strokeStyle,
130
+ strokeColor: color
131
+ }
132
+ });
126
133
  const coordinatesToPolygon = (coordinates, color = strokeColor) => new google.maps.Polygon({
127
134
  paths: coordinates.map(coordinatesToPoint).filter(Boolean),
128
135
  ...strokeStyle,
@@ -151,4 +158,4 @@ export const polygonBounds = (polygon) => {
151
158
  : [];
152
159
  return paths.reduce((prev, curr) => prev.extend(curr), new google.maps.LatLngBounds());
153
160
  };
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbWFwcy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhFLE1BQU0sVUFBVSxHQUFHLHlDQUF5QyxDQUFDO0FBQzdELE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBZ0MsRUFBRSxFQUFFLENBQ3hELE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0tBQ3pDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7S0FDcEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRWYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLElBQUksY0FBYyxDQUFzQix3QkFBd0IsQ0FBQyxDQUFDO0FBRS9GOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FDckIsQ0FBQyxNQUFjLEVBQUUsU0FBUyxHQUFHLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FDN0QsQ0FBQyxVQUFzQixFQUFFLEVBQUUsQ0FDekIsRUFBRSxDQUFDLEdBQUcsVUFBVSxJQUFJLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNB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LENBQUMsQ0FBQyxDQUNoRjtRQUNILENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV0RixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFxRCxFQUFFLEVBQUU7SUFDckYsTUFBTSxLQUFLLEdBQUcsT0FBTztRQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JELENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUN2QyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUN6RixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIG1lcmdlTWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuY29uc3QgbG9hZE1hcFVybCA9ICdodHRwczovL21hcHMuZ29vZ2xlYXBpcy5jb20vbWFwcy9hcGkvanMnO1xuY29uc3QgYnVpbGRNYXBzVXJsID0gKHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+KSA9PlxuICBPYmplY3QuZW50cmllcyhwYXJhbXMpXG4gICAgLmZpbHRlcigoW19rZXksIHZhbHVlc10pID0+IHZhbHVlcy5sZW5ndGgpXG4gICAgLm1hcCgoW2tleSwgdmFsdWVzXSkgPT4gYCR7a2V5fT0ke3ZhbHVlcy5qb2luKCcsJyl9YClcbiAgICAuam9pbignJicpO1xuXG5leHBvcnQgY29uc3QgSEVfTUFQX0xPQURFRCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxPYnNlcnZhYmxlPGJvb2xlYW4+PignR29vZ2xlIE1hcHMgQVBJIExvYWRlZCcpO1xuXG4vKipcbiAqIFVzYWdlOlxuICogYGBgXG4gKiAvLyBpbXBvcnQgSHR0cENsaWVudEpzb25wTW9kdWxlXG4gKiBpbXBvcnRzOiBbSHR0cENsaWVudEpzb25wTW9kdWxlXVxuICpcbiAqIC8vIEluamVjdCBpbiBtb2R1bGVcbiAqIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSEVfTUFQX0xPQURFRCwgdXNlRmFjdG9yeTogbG9hZE1hcEFwaShhcGlLZXkpLCBkZXBzOiBbSHR0cENsaWVudF19IF1cbiAqXG4gKiAvLyBJbmplY3QgaW4gY29tcG9uZW50XG4gKiBjb25zdHJ1Y3RvcihASW5qZWN0KEhFX01BUF9MT0FERUQpIHB1YmxpYyBtYXBMb2FkZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+KSB7IH1cbiAqIGBgYFxuICogQHBhcmFtIGFwaUtleVxuICogQHBhcmFtIGxpYnJhcmllc1xuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRNYXBBcGkgPVxuICAoYXBpS2V5OiBzdHJpbmcsIGxpYnJhcmllcyA9IFsndmlzdWFsaXphdGlvbicsICdkcmF3aW5nJ10pID0+XG4gIChodHRwQ2xpZW50OiBIdHRwQ2xpZW50KSA9PlxuICAgIG9mKGAke2xvYWRNYXBVcmx9PyR7YnVpbGRNYXBzVXJsKHsga2V5OiBbYXBpS2V5XSwgbGlicmFyaWVzIH0pfWApLnBpcGUoXG4gICAgICBtZXJnZU1hcCh1cmwgPT4gaHR0cENsaWVudC5qc29ucCh1cmwsICdjYWxsYmFjaycpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgfSlcbiAgICApO1xuXG5leHBvcnQgY29uc3QgbG9jYXRpb25RdWVyeSA9IChib3VuZHM6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcywgc2VhcmNoRmllbGQgPSAnbG9jYXRpb24nKSA9PiB7XG4gIGNvbnN0IHRvcFJpZ2h0ID0gYm91bmRzLmdldE5vcnRoRWFzdCgpO1xuICBjb25zdCBib3R0b21MZWZ0ID0gYm91bmRzLmdldFNvdXRoV2VzdCgpO1xuICByZXR1cm4ge1xuICAgIGdlb19ib3VuZGluZ19ib3g6IHtcbiAgICAgIFtzZWFyY2hGaWVsZF06IHtcbiAgICAgICAgdG9wX2xlZnQ6IHsgbGF0OiB0b3BSaWdodC5sYXQoKSwgbG9uOiBib3R0b21MZWZ0LmxuZygpIH0sXG4gICAgICAgIGJvdHRvbV9yaWdodDogeyBsYXQ6IGJvdHRvbUxlZnQubGF0KCksIGxvbjogdG9wUmlnaHQubG5nKCkgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWxsQ29sb3IgPSAnIzE5Mzk1Nyc7XG5leHBvcnQgY29uc3Qgc3Ryb2tlQ29sb3IgPSAnIzBDMUIyOSc7XG5cbmV4cG9ydCBjb25zdCBmaWxsU3R5bGUgPSB7XG4gIGZpbGxDb2xvcixcbiAgZmlsbE9wYWNpdHk6IDAuNlxufTtcblxuZXhwb3J0IGNvbnN0IHN0cm9rZVN0eWxlID0ge1xuICBzdHJva2VDb2xvcixcbiAgc3Ryb2tlT3BhY2l0eTogMC42LFxuICBzdHJva2VXZWlnaHQ6IDFcbn07XG5cbmV4cG9ydCBjb25zdCBjbHVzdGVyZXJJbWFnZSA9ICdodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9tYXBzL2RvY3VtZW50YXRpb24vamF2YXNjcmlwdC9leGFtcGxlcy9tYXJrZXJjbHVzdGVyZXIvbSc7XG5cbmNvbnN0IGdldENvb3JkaW5hdGVzRm9yUGVyY2VudCA9IChwZXJjZW50OiBudW1iZXIpID0+IHtcbiAgY29uc3QgeCA9IE1hdGguY29zKDIgKiBNYXRoLlBJICogcGVyY2VudCk7XG4gIGNvbnN0IHkgPSBNYXRoLnNpbigyICogTWF0aC5QSSAqIHBlcmNlbnQpO1xuICByZXR1cm4gW3gsIHldO1xufTtcblxuaW50ZXJmYWNlIElNYXJrZXJQaWVDb25maWcge1xuICBwZXJjZW50OiBudW1iZXI7XG4gIGNvbG9yOiBzdHJpbmc7XG59XG5cbmNvbnN0IHBpZVVybCA9IChjb25maWdzOiBJTWFya2VyUGllQ29uZmlnW10sIHNpemU6IG51bWJlcikgPT4ge1xuICBsZXQgY3VtdWxhdGl2ZVBlcmNlbnQgPSAwO1xuXG4gIHJldHVybiAoXG4gICAgJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGYtOCwnICtcbiAgICBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBgXG4gICAgPHN2ZyB3aWR0aD1cIiR7c2l6ZX1cIiBoZWlnaHQ9XCIke3NpemV9XCIgdmlld0JveD1cIi0xIC0xIDIgMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj4ke2NvbmZpZ3NcbiAgICAgIC5tYXAoKHsgcGVyY2VudCwgY29sb3IgfSkgPT4ge1xuICAgICAgICBjb25zdCBbc3RhcnRYLCBzdGFydFldID0gZ2V0Q29vcmRpbmF0ZXNGb3JQZXJjZW50KGN1bXVsYXRpdmVQZXJjZW50KTtcbiAgICAgICAgY3VtdWxhdGl2ZVBlcmNlbnQgKz0gcGVyY2VudDtcbiAgICAgICAgY29uc3QgW2VuZFgsIGVuZFldID0gZ2V0Q29vcmRpbmF0ZXNGb3JQZXJjZW50KGN1bXVsYXRpdmVQZXJjZW50KTtcbiAgICAgICAgY29uc3QgbGFyZ2VBcmNGbGFnID0gcGVyY2VudCA+IDAuNSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBwYXRoRGF0YSA9IFtcbiAgICAgICAgICBgTSAke3N0YXJ0WH0gJHtzdGFydFl9YCwgLy8gTW92ZVxuICAgICAgICAgIGBBIDEgMSAwICR7bGFyZ2VBcmNGbGFnfSAxICR7ZW5kWH0gJHtlbmRZfWAsIC8vIEFyY1xuICAgICAgICAgIGBMIDAgMGAgLy8gTGluZVxuICAgICAgICBdLmpvaW4oJyAnKTtcbiAgICAgICAgcmV0dXJuIGA8cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBkPVwiJHtwYXRoRGF0YX1cIj48L3BhdGg+YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignJyl9PC9zdmc+XG4gIGAudHJpbSgpXG4gICAgKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlclBpZSA9IChjb25maWdzOiBJTWFya2VyUGllQ29uZmlnW10sIHNpemUgPSA3KSA9PiAoe1xuICBhbmNob3I6IG5ldyBnb29nbGUubWFwcy5Qb2ludChzaXplIC8gMiwgc2l6ZSAvIDIpLFxuICB1cmw6IHBpZVVybChjb25maWdzLCBzaXplKSxcbiAgbGFiZWxPcmlnaW46IG5ldyBnb29nbGUubWFwcy5Qb2ludCgwLCAtMilcbn0pO1xuXG5leHBvcnQgY29uc3QgbWFya2VySWNvbiA9IChzY2FsZSA9IDcpOiBnb29nbGUubWFwcy5TeW1ib2wgPT4gKHtcbiAgcGF0aDogZ29vZ2xlLm1hcHMuU3ltYm9sUGF0aC5DSVJDTEUsXG4gIC4uLmZpbGxTdHlsZSxcbiAgLi4uc3Ryb2tlU3R5bGUsXG4gIHNjYWxlLFxuICBsYWJlbE9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsIC0yKVxufSk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYXJrZXIgPSAoXG4gIHBvc2l0aW9uPzogZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCxcbiAgdGV4dCA9ICcnLFxuICBjb2xvciA9IGZpbGxDb2xvcixcbiAgc2NhbGU/OiBudW1iZXJcbikgPT5cbiAgKHBvc2l0aW9uICYmIHBvc2l0aW9uLmxhdCAmJiBwb3NpdGlvbi5sbmdcbiAgICA/IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgbGFiZWw6IHsgY29sb3IsIHRleHQgfSxcbiAgICAgICAgaWNvbjogbWFya2VySWNvbihzY2FsZSlcbiAgICAgIH0pXG4gICAgOiB1bmRlZmluZWQpIGFzIGdvb2dsZS5tYXBzLk1hcmtlcjtcblxuaW50ZXJmYWNlIElQb2x5Z29uIHtcbiAgdHlwZTogJ1BvbHlnb24nO1xuICBjb29yZGluYXRlczogbnVtYmVyW11bXVtdO1xufVxuXG5pbnRlcmZhY2UgSU11bHRpUG9seWdvbiB7XG4gIHR5cGU6ICdNdWx0aVBvbHlnb24nO1xuICBjb29yZGluYXRlczogbnVtYmVyW11bXVtdO1xufVxuXG50eXBlIGdlb21ldHJ5ID0gSVBvbHlnb24gfCBJTXVsdGlQb2x5Z29uO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGZWF0dXJlIHtcbiAgdHlwZTogJ0ZlYXR1cmUnO1xuICBwcm9wZXJ0aWVzOiBhbnk7XG4gIGdlb21ldHJ5OiBnZW9tZXRyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmVhdHVyZUNvbGxlY3Rpb24ge1xuICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nO1xuICBmZWF0dXJlczogSUZlYXR1cmVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR2VvbWV0cnlDb2xsZWN0aW9uIHtcbiAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbic7XG4gIGdlb21ldHJpZXM6IGdlb21ldHJ5W107XG59XG5cbnR5cGUgZmVhdHVyZSA9IElGZWF0dXJlIHwgSUZlYXR1cmVDb2xsZWN0aW9uIHwgSUdlb21ldHJ5Q29sbGVjdGlvbiB8IElQb2x5Z29uIHwgSU11bHRpUG9seWdvbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRGZWF0dXJlID0gKCk6IElGZWF0dXJlID0+ICh7XG4gIHR5cGU6ICdGZWF0dXJlJyxcbiAgcHJvcGVydGllczoge30sXG4gIGdlb21ldHJ5OiB7XG4gICAgdHlwZTogJ1BvbHlnb24nLFxuICAgIGNvb3JkaW5hdGVzOiBbXVxuICB9IGFzIGdlb21ldHJ5XG59KTtcblxuZXhwb3J0IGNvbnN0IHBvaW50VG9Db29yZGluYXRlcyA9IChwb2ludDogZ29vZ2xlLm1hcHMuTGF0TG5nKSA9PiBbcG9pbnQubG5nKCksIHBvaW50LmxhdCgpXTtcblxuZXhwb3J0IGNvbnN0IGNvb3JkaW5hdGVzVG9Qb2ludCA9ICh2YWx1ZXM6IChudW1iZXIgfCBudW1iZXJbXSlbXSkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlc1swXSlcbiAgICAgID8gdmFsdWVzLm1hcCgodjogYW55KSA9PiBjb29yZGluYXRlc1RvUG9pbnQodikpXG4gICAgICA6ICh2YWx1ZXMgYXMgbnVtYmVyW10pPy5zb21lKGlzTmFOKVxuICAgICAgPyBudWxsXG4gICAgICA6IG5ldyBnb29nbGUubWFwcy5MYXRMbmcoKHZhbHVlcyBhcyBudW1iZXJbXSlbMV0sICh2YWx1ZXMgYXMgbnVtYmVyW10pWzBdKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwb2x5Z29uVG9Db29yZGluYXRlcyA9IChwb2x5Z29uOiBnb29nbGUubWFwcy5Qb2x5Z29uKSA9PlxuICBwb2x5Z29uXG4gICAgLmdldFBhdGhzKClcbiAgICAuZ2V0QXJyYXkoKVxuICAgIC5tYXAocGF0aCA9PiB7XG4gICAgICBjb25zdCBwb2ludHMgPSBwYXRoLmdldEFycmF5KCk7XG4gICAgICByZXR1cm4gWy4uLnBvaW50cy5tYXAocG9pbnRUb0Nvb3JkaW5hdGVzKSwgcG9pbnRUb0Nvb3JkaW5hdGVzKHBvaW50c1swXSldO1xuICAgIH0pWzBdO1xuXG5jb25zdCBjb29yZGluYXRlc1RvUG9seWdvbiA9IChjb29yZGluYXRlczogbnVtYmVyW11bXSwgY29sb3IgPSBzdHJva2VDb2xvcikgPT5cbiAgbmV3IGdvb2dsZS5tYXBzLlBvbHlnb24oe1xuICAgIHBhdGhzOiBjb29yZGluYXRlcy5tYXAoY29vcmRpbmF0ZXNUb1BvaW50KS5maWx0ZXIoQm9vbGVhbiksXG4gICAgLi4uc3Ryb2tlU3R5bGUsXG4gICAgc3Ryb2tlQ29sb3I6IGNvbG9yXG4gIH0pO1xuXG5jb25zdCBnZXRDb29yZGluYXRlcyA9IChmZWF0OiBmZWF0dXJlKSA9PlxuICBmZWF0LnR5cGUgPT09ICdQb2x5Z29uJyB8fCBmZWF0LnR5cGUgPT09ICdNdWx0aVBvbHlnb24nXG4gICAgPyBmZWF0LmNvb3JkaW5hdGVzXG4gICAgOiBmZWF0LnR5cGUgPT09ICdGZWF0dXJlJ1xuICAgID8gZmVhdC5nZW9tZXRyeT8uY29vcmRpbmF0ZXNcbiAgICA6IFtdO1xuXG5leHBvcnQgY29uc3QgYWRkUG9seWdvblRvRmVhdHVyZSA9IChmZWF0OiBmZWF0dXJlLCBwb2x5Z29uOiBnb29nbGUubWFwcy5Qb2x5Z29uKSA9PlxuICBmZWF0LnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbidcbiAgICA/IGZlYXQuZmVhdHVyZXMucHVzaChhZGRQb2x5Z29uVG9GZWF0dXJlKGRlZmF1bHRGZWF0dXJlKCksIHBvbHlnb24pKVxuICAgIDogZmVhdC50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xuICAgID8gZmVhdC5nZW9tZXRyaWVzLm1hcChnZW9tZXRyeSA9PiAoZ2VvbWV0cnk/LmNvb3JkaW5hdGVzIHx8IFtdKS5wdXNoKHBvbHlnb25Ub0Nvb3JkaW5hdGVzKHBvbHlnb24pKSlcbiAgICA6IChnZXRDb29yZGluYXRlcyhmZWF0KSB8fCBbXSkucHVzaChwb2x5Z29uVG9Db29yZGluYXRlcyhwb2x5Z29uKSk7XG5cbmV4cG9ydCBjb25zdCBwb2x5Z29uc0Zyb21GZWF0dXJlID0gKGZlYXQ6IGZlYXR1cmUsIGNvbG9yPzogc3RyaW5nKTogZ29vZ2xlLm1hcHMuUG9seWdvbltdID0+XG4gIGZlYXQudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJ1xuICAgID8gZmVhdC5mZWF0dXJlcy5mbGF0TWFwKHZhbHVlcyA9PiBwb2x5Z29uc0Zyb21GZWF0dXJlKHZhbHVlcywgY29sb3IpKVxuICAgIDogZmVhdC50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xuICAgID8gZmVhdC5nZW9tZXRyaWVzPy5mbGF0TWFwKGdlb21ldHJ5ID0+XG4gICAgICAgIChnZW9tZXRyeS5jb29yZGluYXRlcyB8fCBbXSkubWFwKHZhbHVlcyA9PiBjb29yZGluYXRlc1RvUG9seWdvbih2YWx1ZXMsIGNvbG9yKSlcbiAgICAgIClcbiAgICA6IChnZXRDb29yZGluYXRlcyhmZWF0KSB8fCBbXSkubWFwKHZhbHVlcyA9PiBjb29yZGluYXRlc1RvUG9seWdvbih2YWx1ZXMsIGNvbG9yKSk7XG5cbmV4cG9ydCBjb25zdCBwb2x5Z29uQm91bmRzID0gKHBvbHlnb24/OiBnb29nbGUubWFwcy5Qb2x5Z29uIHwgZ29vZ2xlLm1hcHMuUG9seWdvbltdKSA9PiB7XG4gIGNvbnN0IHBhdGhzID0gcG9seWdvblxuICAgID8gQXJyYXkuaXNBcnJheShwb2x5Z29uKVxuICAgICAgPyBwb2x5Z29uLmZsYXRNYXAocCA9PiBwLmdldFBhdGgoKT8uZ2V0QXJyYXkoKSB8fCBbXSlcbiAgICAgIDogcG9seWdvbi5nZXRQYXRoKCk/LmdldEFycmF5KCkgfHwgW11cbiAgICA6IFtdO1xuICByZXR1cm4gcGF0aHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2LmV4dGVuZChjdXJyKSwgbmV3IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcygpKTtcbn07XG4iXX0=
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tb24vbWFwcy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxNQUFNLFVBQVUsR0FBRyx5Q0FBeUMsQ0FBQztBQUM3RCxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWdDLEVBQUUsRUFBRSxDQUN4RCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztLQUN6QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0tBQ3BELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVmLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQWMsQ0FBc0Isd0JBQXdCLENBQUMsQ0FBQztBQUUvRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQ3JCLENBQUMsTUFBYyxFQUFFLFNBQVMsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQzdELENBQUMsVUFBc0IsRUFBRSxFQUFFLENBQ3pCLEVBQUUsQ0FBQyxHQUFHLFVBQVUsSUFBSSxZQUFZLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENB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QUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDbEMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUNoRjtRQUNILENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV0RixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFxRCxFQUFFLEVBQUU7SUFDckYsTUFBTSxLQUFLLEdBQUcsT0FBTztRQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDdEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JELENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUN2QyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ1AsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUN6RixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWxheSwgbWFwLCBtZXJnZU1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IGxvYWRNYXBVcmwgPSAnaHR0cHM6Ly9tYXBzLmdvb2dsZWFwaXMuY29tL21hcHMvYXBpL2pzJztcbmNvbnN0IGJ1aWxkTWFwc1VybCA9IChwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPikgPT5cbiAgT2JqZWN0LmVudHJpZXMocGFyYW1zKVxuICAgIC5maWx0ZXIoKFtfa2V5LCB2YWx1ZXNdKSA9PiB2YWx1ZXMubGVuZ3RoKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlc10pID0+IGAke2tleX09JHt2YWx1ZXMuam9pbignLCcpfWApXG4gICAgLmpvaW4oJyYnKTtcblxuZXhwb3J0IGNvbnN0IEhFX01BUF9MT0FERUQgPSBuZXcgSW5qZWN0aW9uVG9rZW48T2JzZXJ2YWJsZTxib29sZWFuPj4oJ0dvb2dsZSBNYXBzIEFQSSBMb2FkZWQnKTtcblxuLyoqXG4gKiBVc2FnZTpcbiAqIGBgYFxuICogLy8gaW1wb3J0IEh0dHBDbGllbnRKc29ucE1vZHVsZVxuICogaW1wb3J0czogW0h0dHBDbGllbnRKc29ucE1vZHVsZV1cbiAqXG4gKiAvLyBJbmplY3QgaW4gbW9kdWxlXG4gKiBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEhFX01BUF9MT0FERUQsIHVzZUZhY3Rvcnk6IGxvYWRNYXBBcGkoYXBpS2V5KSwgZGVwczogW0h0dHBDbGllbnRdfSBdXG4gKlxuICogLy8gSW5qZWN0IGluIGNvbXBvbmVudFxuICogY29uc3RydWN0b3IoQEluamVjdChIRV9NQVBfTE9BREVEKSBwdWJsaWMgbWFwTG9hZGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPikgeyB9XG4gKiBgYGBcbiAqIEBwYXJhbSBhcGlLZXlcbiAqIEBwYXJhbSBsaWJyYXJpZXNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkTWFwQXBpID1cbiAgKGFwaUtleTogc3RyaW5nLCBsaWJyYXJpZXMgPSBbJ3Zpc3VhbGl6YXRpb24nLCAnZHJhd2luZyddKSA9PlxuICAoaHR0cENsaWVudDogSHR0cENsaWVudCkgPT5cbiAgICBvZihgJHtsb2FkTWFwVXJsfT8ke2J1aWxkTWFwc1VybCh7IGtleTogW2FwaUtleV0sIGxpYnJhcmllcyB9KX1gKS5waXBlKFxuICAgICAgbWVyZ2VNYXAodXJsID0+IGh0dHBDbGllbnQuanNvbnAodXJsLCAnY2FsbGJhY2snKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICAgZGVsYXkoMTAwKSxcbiAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICB9KVxuICAgICk7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvblF1ZXJ5ID0gKGJvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzLCBzZWFyY2hGaWVsZCA9ICdsb2NhdGlvbicpID0+IHtcbiAgY29uc3QgdG9wUmlnaHQgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCk7XG4gIGNvbnN0IGJvdHRvbUxlZnQgPSBib3VuZHMuZ2V0U291dGhXZXN0KCk7XG4gIHJldHVybiB7XG4gICAgZ2VvX2JvdW5kaW5nX2JveDoge1xuICAgICAgW3NlYXJjaEZpZWxkXToge1xuICAgICAgICB0b3BfbGVmdDogeyBsYXQ6IHRvcFJpZ2h0LmxhdCgpLCBsb246IGJvdHRvbUxlZnQubG5nKCkgfSxcbiAgICAgICAgYm90dG9tX3JpZ2h0OiB7IGxhdDogYm90dG9tTGVmdC5sYXQoKSwgbG9uOiB0b3BSaWdodC5sbmcoKSB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbGxDb2xvciA9ICcjMTkzOTU3JztcbmV4cG9ydCBjb25zdCBzdHJva2VDb2xvciA9ICcjMEMxQjI5JztcblxuZXhwb3J0IGNvbnN0IGZpbGxTdHlsZSA9IHtcbiAgZmlsbENvbG9yLFxuICBmaWxsT3BhY2l0eTogMC42XG59O1xuXG5leHBvcnQgY29uc3Qgc3Ryb2tlU3R5bGUgPSB7XG4gIHN0cm9rZUNvbG9yLFxuICBzdHJva2VPcGFjaXR5OiAwLjYsXG4gIHN0cm9rZVdlaWdodDogMVxufTtcblxuZXhwb3J0IGNvbnN0IGNsdXN0ZXJlckltYWdlID0gJ2h0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL21hcHMvZG9jdW1lbnRhdGlvbi9qYXZhc2NyaXB0L2V4YW1wbGVzL21hcmtlcmNsdXN0ZXJlci9tJztcblxuY29uc3QgZ2V0Q29vcmRpbmF0ZXNGb3JQZXJjZW50ID0gKHBlcmNlbnQ6IG51bWJlcikgPT4ge1xuICBjb25zdCB4ID0gTWF0aC5jb3MoMiAqIE1hdGguUEkgKiBwZXJjZW50KTtcbiAgY29uc3QgeSA9IE1hdGguc2luKDIgKiBNYXRoLlBJICogcGVyY2VudCk7XG4gIHJldHVybiBbeCwgeV07XG59O1xuXG5pbnRlcmZhY2UgSU1hcmtlclBpZUNvbmZpZyB7XG4gIHBlcmNlbnQ6IG51bWJlcjtcbiAgY29sb3I6IHN0cmluZztcbn1cblxuY29uc3QgcGllVXJsID0gKGNvbmZpZ3M6IElNYXJrZXJQaWVDb25maWdbXSwgc2l6ZTogbnVtYmVyKSA9PiB7XG4gIGxldCBjdW11bGF0aXZlUGVyY2VudCA9IDA7XG5cbiAgcmV0dXJuIChcbiAgICAnZGF0YTppbWFnZS9zdmcreG1sO3V0Zi04LCcgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChcbiAgICAgIGBcbiAgICA8c3ZnIHdpZHRoPVwiJHtzaXplfVwiIGhlaWdodD1cIiR7c2l6ZX1cIiB2aWV3Qm94PVwiLTEgLTEgMiAyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPiR7Y29uZmlnc1xuICAgICAgLm1hcCgoeyBwZXJjZW50LCBjb2xvciB9KSA9PiB7XG4gICAgICAgIGNvbnN0IFtzdGFydFgsIHN0YXJ0WV0gPSBnZXRDb29yZGluYXRlc0ZvclBlcmNlbnQoY3VtdWxhdGl2ZVBlcmNlbnQpO1xuICAgICAgICBjdW11bGF0aXZlUGVyY2VudCArPSBwZXJjZW50O1xuICAgICAgICBjb25zdCBbZW5kWCwgZW5kWV0gPSBnZXRDb29yZGluYXRlc0ZvclBlcmNlbnQoY3VtdWxhdGl2ZVBlcmNlbnQpO1xuICAgICAgICBjb25zdCBsYXJnZUFyY0ZsYWcgPSBwZXJjZW50ID4gMC41ID8gMSA6IDA7XG4gICAgICAgIGNvbnN0IHBhdGhEYXRhID0gW1xuICAgICAgICAgIGBNICR7c3RhcnRYfSAke3N0YXJ0WX1gLCAvLyBNb3ZlXG4gICAgICAgICAgYEEgMSAxIDAgJHtsYXJnZUFyY0ZsYWd9IDEgJHtlbmRYfSAke2VuZFl9YCwgLy8gQXJjXG4gICAgICAgICAgYEwgMCAwYCAvLyBMaW5lXG4gICAgICAgIF0uam9pbignICcpO1xuICAgICAgICByZXR1cm4gYDxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIGQ9XCIke3BhdGhEYXRhfVwiPjwvcGF0aD5gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcnKX08L3N2Zz5cbiAgYC50cmltKClcbiAgICApXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyUGllID0gKGNvbmZpZ3M6IElNYXJrZXJQaWVDb25maWdbXSwgc2l6ZSA9IDcpID0+ICh7XG4gIGFuY2hvcjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KHNpemUgLyAyLCBzaXplIC8gMiksXG4gIHVybDogcGllVXJsKGNvbmZpZ3MsIHNpemUpLFxuICBsYWJlbE9yaWdpbjogbmV3IGdvb2dsZS5tYXBzLlBvaW50KDAsIC0yKVxufSk7XG5cbmV4cG9ydCBjb25zdCBtYXJrZXJJY29uID0gKHNjYWxlID0gNyk6IGdvb2dsZS5tYXBzLlN5bWJvbCA9PiAoe1xuICBwYXRoOiBnb29nbGUubWFwcy5TeW1ib2xQYXRoLkNJUkNMRSxcbiAgLi4uZmlsbFN0eWxlLFxuICAuLi5zdHJva2VTdHlsZSxcbiAgc2NhbGUsXG4gIGxhYmVsT3JpZ2luOiBuZXcgZ29vZ2xlLm1hcHMuUG9pbnQoMCwgLTIpXG59KTtcblxuZXhwb3J0IGludGVyZmFjZSBJTWFya2VyIHtcbiAgcG9zaXRpb246IGdvb2dsZS5tYXBzLkxhdExuZyB8IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWw7XG4gIGxhYmVsOiBnb29nbGUubWFwcy5NYXJrZXJMYWJlbDtcbiAgaWNvbjogZ29vZ2xlLm1hcHMuU3ltYm9sO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlTWFya2VyID0gKFxuICBwb3NpdGlvbj86IGdvb2dsZS5tYXBzLkxhdExuZyB8IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwsXG4gIHRleHQgPSAnJyxcbiAgY29sb3IgPSBmaWxsQ29sb3IsXG4gIHNjYWxlPzogbnVtYmVyXG4pOiBJTWFya2VyID0+XG4gIHBvc2l0aW9uPy5sYXQgJiYgcG9zaXRpb24/LmxuZ1xuICAgID8ge1xuICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgbGFiZWw6IHsgY29sb3IsIHRleHQgfSxcbiAgICAgICAgaWNvbjogbWFya2VySWNvbihzY2FsZSlcbiAgICAgIH1cbiAgICA6IHVuZGVmaW5lZDtcblxuaW50ZXJmYWNlIElQb2x5Z29uIHtcbiAgdHlwZTogJ1BvbHlnb24nO1xuICBjb29yZGluYXRlczogbnVtYmVyW11bXVtdO1xufVxuXG5pbnRlcmZhY2UgSU11bHRpUG9seWdvbiB7XG4gIHR5cGU6ICdNdWx0aVBvbHlnb24nO1xuICBjb29yZGluYXRlczogbnVtYmVyW11bXVtdO1xufVxuXG50eXBlIGdlb21ldHJ5ID0gSVBvbHlnb24gfCBJTXVsdGlQb2x5Z29uO1xuXG5leHBvcnQgaW50ZXJmYWNlIElGZWF0dXJlIHtcbiAgdHlwZTogJ0ZlYXR1cmUnO1xuICBwcm9wZXJ0aWVzOiBhbnk7XG4gIGdlb21ldHJ5OiBnZW9tZXRyeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRmVhdHVyZUNvbGxlY3Rpb24ge1xuICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nO1xuICBmZWF0dXJlczogSUZlYXR1cmVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR2VvbWV0cnlDb2xsZWN0aW9uIHtcbiAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbic7XG4gIGdlb21ldHJpZXM6IGdlb21ldHJ5W107XG59XG5cbmV4cG9ydCB0eXBlIGZlYXR1cmUgPSBJRmVhdHVyZSB8IElGZWF0dXJlQ29sbGVjdGlvbiB8IElHZW9tZXRyeUNvbGxlY3Rpb24gfCBJUG9seWdvbiB8IElNdWx0aVBvbHlnb247XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0RmVhdHVyZSA9ICgpOiBJRmVhdHVyZSA9PiAoe1xuICB0eXBlOiAnRmVhdHVyZScsXG4gIHByb3BlcnRpZXM6IHt9LFxuICBnZW9tZXRyeToge1xuICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICBjb29yZGluYXRlczogW11cbiAgfSBhcyBnZW9tZXRyeVxufSk7XG5cbmV4cG9ydCBjb25zdCBwb2ludFRvQ29vcmRpbmF0ZXMgPSAocG9pbnQ6IGdvb2dsZS5tYXBzLkxhdExuZykgPT4gW3BvaW50LmxuZygpLCBwb2ludC5sYXQoKV07XG5cbmV4cG9ydCBjb25zdCBjb29yZGluYXRlc1RvUG9pbnQgPSAodmFsdWVzOiAobnVtYmVyIHwgbnVtYmVyW10pW10pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZXNbMF0pXG4gICAgICA/IHZhbHVlcy5tYXAoKHY6IGFueSkgPT4gY29vcmRpbmF0ZXNUb1BvaW50KHYpKVxuICAgICAgOiAodmFsdWVzIGFzIG51bWJlcltdKT8uc29tZShpc05hTilcbiAgICAgID8gbnVsbFxuICAgICAgOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKCh2YWx1ZXMgYXMgbnVtYmVyW10pWzFdLCAodmFsdWVzIGFzIG51bWJlcltdKVswXSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9seWdvblRvQ29vcmRpbmF0ZXMgPSAocG9seWdvbjogZ29vZ2xlLm1hcHMuUG9seWdvbikgPT5cbiAgcG9seWdvblxuICAgIC5nZXRQYXRocygpXG4gICAgLmdldEFycmF5KClcbiAgICAubWFwKHBhdGggPT4ge1xuICAgICAgY29uc3QgcG9pbnRzID0gcGF0aC5nZXRBcnJheSgpO1xuICAgICAgcmV0dXJuIFsuLi5wb2ludHMubWFwKHBvaW50VG9Db29yZGluYXRlcyksIHBvaW50VG9Db29yZGluYXRlcyhwb2ludHNbMF0pXTtcbiAgICB9KVswXTtcblxuZXhwb3J0IGludGVyZmFjZSBJUG9seWdvbk1hcCB7XG4gIHBhdGhzOiBnb29nbGUubWFwcy5NVkNBcnJheTxnb29nbGUubWFwcy5NVkNBcnJheTxnb29nbGUubWFwcy5MYXRMbmc+PjtcbiAgb3B0aW9uczogZ29vZ2xlLm1hcHMuUG9seWdvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBjb25zdCBwb2x5Z29uVG9NYXAgPSAocG9seWdvbjogZ29vZ2xlLm1hcHMuUG9seWdvbiwgY29sb3IgPSBzdHJva2VDb2xvcik6IElQb2x5Z29uTWFwID0+ICh7XG4gIHBhdGhzOiBwb2x5Z29uLmdldFBhdGhzKCksXG4gIG9wdGlvbnM6IHtcbiAgICAuLi5zdHJva2VTdHlsZSxcbiAgICBzdHJva2VDb2xvcjogY29sb3JcbiAgfVxufSk7XG5cbmNvbnN0IGNvb3JkaW5hdGVzVG9Qb2x5Z29uID0gKGNvb3JkaW5hdGVzOiBudW1iZXJbXVtdLCBjb2xvciA9IHN0cm9rZUNvbG9yKSA9PlxuICBuZXcgZ29vZ2xlLm1hcHMuUG9seWdvbih7XG4gICAgcGF0aHM6IGNvb3JkaW5hdGVzLm1hcChjb29yZGluYXRlc1RvUG9pbnQpLmZpbHRlcihCb29sZWFuKSxcbiAgICAuLi5zdHJva2VTdHlsZSxcbiAgICBzdHJva2VDb2xvcjogY29sb3JcbiAgfSk7XG5cbmNvbnN0IGdldENvb3JkaW5hdGVzID0gKGZlYXQ6IGZlYXR1cmUpID0+XG4gIGZlYXQudHlwZSA9PT0gJ1BvbHlnb24nIHx8IGZlYXQudHlwZSA9PT0gJ011bHRpUG9seWdvbidcbiAgICA/IGZlYXQuY29vcmRpbmF0ZXNcbiAgICA6IGZlYXQudHlwZSA9PT0gJ0ZlYXR1cmUnXG4gICAgPyBmZWF0Lmdlb21ldHJ5Py5jb29yZGluYXRlc1xuICAgIDogW107XG5cbmV4cG9ydCBjb25zdCBhZGRQb2x5Z29uVG9GZWF0dXJlID0gKGZlYXQ6IGZlYXR1cmUsIHBvbHlnb246IGdvb2dsZS5tYXBzLlBvbHlnb24pID0+XG4gIGZlYXQudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJ1xuICAgID8gZmVhdC5mZWF0dXJlcy5wdXNoKGFkZFBvbHlnb25Ub0ZlYXR1cmUoZGVmYXVsdEZlYXR1cmUoKSwgcG9seWdvbikpXG4gICAgOiBmZWF0LnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nXG4gICAgPyBmZWF0Lmdlb21ldHJpZXMubWFwKGdlb21ldHJ5ID0+IChnZW9tZXRyeT8uY29vcmRpbmF0ZXMgfHwgW10pLnB1c2gocG9seWdvblRvQ29vcmRpbmF0ZXMocG9seWdvbikpKVxuICAgIDogKGdldENvb3JkaW5hdGVzKGZlYXQpIHx8IFtdKS5wdXNoKHBvbHlnb25Ub0Nvb3JkaW5hdGVzKHBvbHlnb24pKTtcblxuZXhwb3J0IGNvbnN0IHBvbHlnb25zRnJvbUZlYXR1cmUgPSAoZmVhdDogZmVhdHVyZSwgY29sb3I/OiBzdHJpbmcpOiBnb29nbGUubWFwcy5Qb2x5Z29uW10gPT5cbiAgZmVhdC50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nXG4gICAgPyBmZWF0LmZlYXR1cmVzLmZsYXRNYXAodmFsdWVzID0+IHBvbHlnb25zRnJvbUZlYXR1cmUodmFsdWVzLCBjb2xvcikpXG4gICAgOiBmZWF0LnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nXG4gICAgPyBmZWF0Lmdlb21ldHJpZXM/LmZsYXRNYXAoZ2VvbWV0cnkgPT5cbiAgICAgICAgKGdlb21ldHJ5LmNvb3JkaW5hdGVzIHx8IFtdKS5tYXAodmFsdWVzID0+IGNvb3JkaW5hdGVzVG9Qb2x5Z29uKHZhbHVlcywgY29sb3IpKVxuICAgICAgKVxuICAgIDogKGdldENvb3JkaW5hdGVzKGZlYXQpIHx8IFtdKS5tYXAodmFsdWVzID0+IGNvb3JkaW5hdGVzVG9Qb2x5Z29uKHZhbHVlcywgY29sb3IpKTtcblxuZXhwb3J0IGNvbnN0IHBvbHlnb25Cb3VuZHMgPSAocG9seWdvbj86IGdvb2dsZS5tYXBzLlBvbHlnb24gfCBnb29nbGUubWFwcy5Qb2x5Z29uW10pID0+IHtcbiAgY29uc3QgcGF0aHMgPSBwb2x5Z29uXG4gICAgPyBBcnJheS5pc0FycmF5KHBvbHlnb24pXG4gICAgICA/IHBvbHlnb24uZmxhdE1hcChwID0+IHAuZ2V0UGF0aCgpPy5nZXRBcnJheSgpIHx8IFtdKVxuICAgICAgOiBwb2x5Z29uLmdldFBhdGgoKT8uZ2V0QXJyYXkoKSB8fCBbXVxuICAgIDogW107XG4gIHJldHVybiBwYXRocy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYuZXh0ZW5kKGN1cnIpLCBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzKCkpO1xufTtcbiJdfQ==
@@ -129,11 +129,11 @@ export class ImpactAssessmentsProductsComponent {
129
129
  this.selectedIndex.set(+value);
130
130
  }
131
131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: ImpactAssessmentsProductsComponent, deps: [{ token: i1.HeNodeStoreService }], target: i0.ɵɵFactoryTarget.Component }); }
132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: ImpactAssessmentsProductsComponent, selector: "he-impact-assessments-products", inputs: { dataState: "dataState", nodeKey: "nodeKey", filterTermTypes: "filterTermTypes", enableFilterMethodModel: "enableFilterMethodModel" }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table && indicators().length\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter indicators by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"impactAssessments().length > 1 || enableBreakdown() || !isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"impactAssessments().length > 1\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.chart\"\n (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.breakdown\"\n (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto py-0\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select (change)=\"updateSelectedMethodModel($event)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels()\" [ngValue]=\"term\">{{ term.name }}</option>\n </select>\n </div>\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.name\">\n <he-node-link [node]=\"indicator.value.term\">\n <span [innerHtml]=\"indicator.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.units\">\n <span [innerHtml]=\"indicator.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"indicator.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let impactAssessment of impactAssessments(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ i + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n <he-node-link *ngIf=\"impactAssessment.product?.term\" [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators()\">\n <span\n *ngIf=\"indicator.value.values[impactAssessment['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, {\n data: indicator.value.values[impactAssessment['@id']],\n impactAssessment: impactAssessment\n })\n \">\n <span pointer>\n {{\n propertyValue(indicator.value.values[impactAssessment['@id']].value, indicator.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"indicator.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<he-impact-assessments-indicator-breakdown-chart\n *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments()[0]\"\n [indicators]=\"impactAssessments()[0][_nodeKey()]\"></he-impact-assessments-indicator-breakdown-chart>\n\n<he-impact-assessments-indicators-chart\n *ngIf=\"selectedView === View.chart && impactAssessments().length > 1\"\n [key]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"></he-impact-assessments-indicators-chart>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"impactAssessments().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of impactAssessments(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ impactName(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments()\"\n [filename]=\"'impact-' + _nodeKey() + '.csv'\"\n [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + _nodeKey() + '.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{ cycleLabel(node.cycle) }}</span>\n <span *ngIf=\"!data.cycle\">{{ data.name }}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"_nodeKey()\"></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\">\n <ngb-highlight [result]=\"impact.product.term?.name || impact.product.name\" [term]=\"t\"></ngb-highlight>\n </span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: i6.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }, { kind: "component", type: i7.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i8.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i9.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i10.SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: i11.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i12.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i13.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: i14.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey", "dataState"] }, { kind: "component", type: i15.TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: i16.ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["key", "filterTermTypes"] }, { kind: "component", type: i17.ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { kind: "pipe", type: i18.CompoundPipe, name: "compound" }, { kind: "pipe", type: i19.DefaultPipe, name: "default" }, { kind: "pipe", type: i20.EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: i21.PrecisionPipe, name: "precision" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.8", type: ImpactAssessmentsProductsComponent, selector: "he-impact-assessments-products", inputs: { dataState: "dataState", nodeKey: "nodeKey", filterTermTypes: "filterTermTypes", enableFilterMethodModel: "enableFilterMethodModel" }, ngImport: i0, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"indicators().length\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter indicators by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"impactAssessments().length > 1 || enableBreakdown() || !isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"impactAssessments().length > 1\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.chart\"\n (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.breakdown\"\n (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto py-0\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select (change)=\"updateSelectedMethodModel($event)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels()\" [ngValue]=\"term\">{{ term.name }}</option>\n </select>\n </div>\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.name\">\n <he-node-link [node]=\"indicator.value.term\">\n <span [innerHtml]=\"indicator.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.units\">\n <span [innerHtml]=\"indicator.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"indicator.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let impactAssessment of impactAssessments(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ i + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n <he-node-link *ngIf=\"impactAssessment.product?.term\" [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators()\">\n <span\n *ngIf=\"indicator.value.values[impactAssessment['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, {\n data: indicator.value.values[impactAssessment['@id']],\n impactAssessment: impactAssessment\n })\n \">\n <span pointer>\n {{\n propertyValue(indicator.value.values[impactAssessment['@id']].value, indicator.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"indicator.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<he-impact-assessments-indicator-breakdown-chart\n *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments()[0]\"\n [indicators]=\"impactAssessments()[0][_nodeKey()]\"></he-impact-assessments-indicator-breakdown-chart>\n\n<he-impact-assessments-indicators-chart\n *ngIf=\"selectedView === View.chart && impactAssessments().length > 1\"\n [key]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"></he-impact-assessments-indicators-chart>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"impactAssessments().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of impactAssessments(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ impactName(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments()\"\n [filename]=\"'impact-' + _nodeKey() + '.csv'\"\n [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + _nodeKey() + '.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{ cycleLabel(node.cycle) }}</span>\n <span *ngIf=\"!data.cycle\">{{ data.name }}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"_nodeKey()\"></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\">\n <ngb-highlight [result]=\"impact.product.term?.name || impact.product.name\" [term]=\"t\"></ngb-highlight>\n </span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "component", type: i4.NgbHighlight, selector: "ngb-highlight", inputs: ["highlightClass", "result", "term", "accentSensitive"] }, { kind: "directive", type: i4.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i4.NgbPopover, selector: "[ngbPopover]", inputs: ["animation", "autoClose", "ngbPopover", "popoverTitle", "placement", "popperOptions", "triggers", "positionTarget", "container", "disablePopover", "popoverClass", "popoverContext", "openDelay", "closeDelay"], outputs: ["shown", "hidden"], exportAs: ["ngbPopover"] }, { kind: "component", type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { kind: "directive", type: i6.BindOnceDirective, selector: "[bindOnce]", inputs: ["bindOnce"] }, { kind: "component", type: i7.BlankNodeStateComponent, selector: "he-blank-node-state", inputs: ["dataState", "nodeType", "dataKey", "key", "node", "state", "linkClass"] }, { kind: "component", type: i8.BlankNodeStateNoticeComponent, selector: "he-blank-node-state-notice", inputs: ["dataState", "showAggregated", "showDeleted"] }, { kind: "component", type: i9.DataTableComponent, selector: "he-data-table", inputs: ["minHeight", "maxHeight", "small"] }, { kind: "component", type: i10.SearchExtendComponent, selector: "he-search-extend", inputs: ["value", "disabled", "placeholder", "class"], outputs: ["search"] }, { kind: "component", type: i11.NodeLinkComponent, selector: "he-node-link", inputs: ["node", "showExternalLink", "linkClass"] }, { kind: "component", type: i12.NodeCsvExportConfirmComponent, selector: "he-node-csv-export-confirm", inputs: ["nodes", "filename", "headerKeys", "extension", "isUpload"], outputs: ["closed"] }, { kind: "component", type: i13.NodeLogsModelsComponent, selector: "he-node-logs-models", inputs: ["node", "nodeKey", "originalValues", "recalculatedValues", "terms", "filterTermTypes", "filterTermTypesLabel", "logsKey", "noDataMessage"] }, { kind: "component", type: i14.NodeValueDetailsComponent, selector: "he-node-value-details", inputs: ["data", "nodeType", "dataKey", "dataState"] }, { kind: "component", type: i15.TermsUnitsDescriptionComponent, selector: "he-terms-units-description", inputs: ["term", "iconTemplate"] }, { kind: "component", type: i16.ImpactAssessmentsIndicatorsChartComponent, selector: "he-impact-assessments-indicators-chart", inputs: ["key", "filterTermTypes"] }, { kind: "component", type: i17.ImpactAssessmentsIndicatorBreakdownChartComponent, selector: "he-impact-assessments-indicator-breakdown-chart", inputs: ["impactAssessment", "indicators"] }, { kind: "pipe", type: i18.CompoundPipe, name: "compound" }, { kind: "pipe", type: i19.DefaultPipe, name: "default" }, { kind: "pipe", type: i20.EllipsisPipe, name: "ellipsis" }, { kind: "pipe", type: i21.PrecisionPipe, name: "precision" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
133
133
  }
134
134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImport: i0, type: ImpactAssessmentsProductsComponent, decorators: [{
135
135
  type: Component,
136
- args: [{ selector: 'he-impact-assessments-products', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"columns is-variable is-align-items-center is-2 m-0\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table && indicators().length\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter indicators by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"impactAssessments().length > 1 || enableBreakdown() || !isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"impactAssessments().length > 1\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.chart\"\n (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.breakdown\"\n (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto py-0\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select (change)=\"updateSelectedMethodModel($event)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels()\" [ngValue]=\"term\">{{ term.name }}</option>\n </select>\n </div>\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.name\">\n <he-node-link [node]=\"indicator.value.term\">\n <span [innerHtml]=\"indicator.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.units\">\n <span [innerHtml]=\"indicator.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"indicator.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let impactAssessment of impactAssessments(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ i + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n <he-node-link *ngIf=\"impactAssessment.product?.term\" [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators()\">\n <span\n *ngIf=\"indicator.value.values[impactAssessment['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, {\n data: indicator.value.values[impactAssessment['@id']],\n impactAssessment: impactAssessment\n })\n \">\n <span pointer>\n {{\n propertyValue(indicator.value.values[impactAssessment['@id']].value, indicator.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"indicator.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<he-impact-assessments-indicator-breakdown-chart\n *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments()[0]\"\n [indicators]=\"impactAssessments()[0][_nodeKey()]\"></he-impact-assessments-indicator-breakdown-chart>\n\n<he-impact-assessments-indicators-chart\n *ngIf=\"selectedView === View.chart && impactAssessments().length > 1\"\n [key]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"></he-impact-assessments-indicators-chart>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"impactAssessments().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of impactAssessments(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ impactName(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments()\"\n [filename]=\"'impact-' + _nodeKey() + '.csv'\"\n [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + _nodeKey() + '.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{ cycleLabel(node.cycle) }}</span>\n <span *ngIf=\"!data.cycle\">{{ data.name }}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"_nodeKey()\"></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\">\n <ngb-highlight [result]=\"impact.product.term?.name || impact.product.name\" [term]=\"t\"></ngb-highlight>\n </span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"] }]
136
+ args: [{ selector: 'he-impact-assessments-products', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"columns is-variable is-align-items-center is-2 is-m-0\" *ngIf=\"indicators().length\">\n <div class=\"column\">\n <ng-container *ngIf=\"selectedView === View.table\">\n <button\n class=\"button is-small is-ghost\"\n (click)=\"showDownload = true\"\n ngbTooltip=\"Download as CSV\"\n placement=\"bottom\">\n <fa-icon icon=\"download\" size=\"lg\"></fa-icon>\n </button>\n </ng-container>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"selectedView === View.table\">\n <he-search-extend\n class=\"is-secondary is-small\"\n placeholder=\"Filter indicators by name\"\n (search)=\"filterByTerm($event)\"></he-search-extend>\n </div>\n <div class=\"column is-narrow\" *ngIf=\"impactAssessments().length > 1 || enableBreakdown() || !isOriginal()\">\n <div class=\"field has-addons\">\n <div class=\"control\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.table\"\n (click)=\"selectedView = View.table\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"list\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Table view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"impactAssessments().length > 1\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.chart\"\n (click)=\"selectedView = View.chart\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Chart view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"enableBreakdown()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.breakdown\"\n (click)=\"selectedView = View.breakdown\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"chart-bar\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Breakdown view</span>\n </button>\n </div>\n <div class=\"control\" *ngIf=\"!isOriginal()\">\n <button\n class=\"button is-small\"\n [class.is-selected]=\"selectedView === View.logs\"\n (click)=\"selectedView = View.logs\">\n <span class=\"icon is-small\">\n <fa-icon icon=\"calculator\" aria-hidden=\"true\"></fa-icon>\n </span>\n <span class=\"is-hidden-mobile\">Recalculations logs</span>\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<div class=\"px-3 pb-3\" [class.is-hidden]=\"selectedView !== View.table\">\n <ng-container *ngIf=\"hasData(); else emptyTable\">\n <he-data-table class=\"mb-1 is-small\" [small]=\"true\" maxHeight=\"320\">\n <table class=\"table is-fullwidth is-narrow is-striped\">\n <thead>\n <tr class=\"has-text-weight-semibold\">\n <th class=\"width-auto py-0\">\n <div class=\"select is-small\" *ngIf=\"enableFilterMethodModel\">\n <select (change)=\"updateSelectedMethodModel($event)\">\n <option [ngValue]=\"undefined\">Filter Model</option>\n <option *ngFor=\"let term of methodModels()\" [ngValue]=\"term\">{{ term.name }}</option>\n </select>\n </div>\n </th>\n <th class=\"has-border-right\"></th>\n <th class=\"has-border-right\"></th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.name\">\n <he-node-link [node]=\"indicator.value.term\">\n <span [innerHtml]=\"indicator.value.term.name | ellipsis: 30 | compound\"></span>\n </he-node-link>\n </th>\n </tr>\n <tr class=\"is-italic has-text-weight-semibold\">\n <th class=\"width-auto has-border-right\"></th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#functionalUnit'\" target=\"_blank\">Functional unit</a>\n </th>\n <th class=\"has-border-right\">\n <a [href]=\"baseUrl + '/schema/ImpactAssessment#product'\" target=\"_blank\">Product</a>\n </th>\n <th *ngFor=\"let indicator of indicators()\" [attr.title]=\"indicator.value.term.units\">\n <span [innerHtml]=\"indicator.value.term.units | compound\"></span>\n <he-terms-units-description\n class=\"is-inline-block is-ml-2\"\n [term]=\"indicator.value.term\"></he-terms-units-description>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngFor=\"let impactAssessment of impactAssessments(); trackBy: trackById; let i = index\">\n <tr>\n <td class=\"width-auto has-border-right\" [attr.title]=\"impactName(impactAssessment)\">\n <he-node-link [node]=\"impactAssessment\">\n <span>{{ i + 1 }}. {{ impactName(impactAssessment) }}</span>\n </he-node-link>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.units\">\n <span>1 {{ impactAssessment.product?.term?.units }}</span>\n </td>\n <td class=\"has-border-right\" [attr.title]=\"impactAssessment.product?.term?.name\">\n <he-node-link *ngIf=\"impactAssessment.product?.term\" [node]=\"impactAssessment.product.term\">\n <span>{{ impactAssessment.product.term.name | ellipsis: 30 }}</span>\n </he-node-link>\n </td>\n <td class=\"is-nowrap\" *ngFor=\"let indicator of indicators()\">\n <span\n *ngIf=\"indicator.value.values[impactAssessment['@id']]; else emptyValue\"\n class=\"trigger-popover\"\n [ngbPopover]=\"details\"\n [autoClose]=\"'outside'\"\n popoverClass=\"is-narrow\"\n triggers=\"manual\"\n #p=\"ngbPopover\"\n placement=\"left\"\n container=\"body\"\n (click)=\"\n togglePopover(p, {\n data: indicator.value.values[impactAssessment['@id']],\n impactAssessment: impactAssessment\n })\n \">\n <span pointer>\n {{\n propertyValue(indicator.value.values[impactAssessment['@id']].value, indicator.value.term['@id'])\n | precision: 3\n | default: '-'\n }}\n </span>\n <he-blank-node-state\n class=\"ml-1\"\n [dataState]=\"_dataState()\"\n [node]=\"indicator.value.values[impactAssessment['@id']].node\"\n key=\"value\"\n [state]=\"impactAssessment.aggregated ? 'aggregated' : undefined\"></he-blank-node-state>\n </span>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n </he-data-table>\n\n <he-blank-node-state-notice [dataState]=\"_dataState()\"></he-blank-node-state-notice>\n </ng-container>\n</div>\n\n<he-impact-assessments-indicator-breakdown-chart\n *ngIf=\"selectedView === View.breakdown\"\n [impactAssessment]=\"impactAssessments()[0]\"\n [indicators]=\"impactAssessments()[0][_nodeKey()]\"></he-impact-assessments-indicator-breakdown-chart>\n\n<he-impact-assessments-indicators-chart\n *ngIf=\"selectedView === View.chart && impactAssessments().length > 1\"\n [key]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"></he-impact-assessments-indicators-chart>\n\n<ng-container *ngIf=\"selectedView === View.logs && !isOriginal()\">\n <div class=\"field has-addons pt-2 px-3\" *ngIf=\"impactAssessments().length > 1\">\n <div class=\"control\">\n <span class=\"button is-small is-static is-secondary\">Select an Impact Assessment</span>\n </div>\n <div class=\"control is-expanded\">\n <div class=\"select is-small is-fullwidth is-secondary\">\n <select (change)=\"selectIndex($event)\">\n <option *ngFor=\"let value of impactAssessments(); let i = index\" [value]=\"i\">\n {{ i + 1 }}. {{ impactName(value) }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <he-node-logs-models\n *ngIf=\"selectedNode()\"\n [node]=\"selectedNode()\"\n [nodeKey]=\"_nodeKey()\"\n [filterTermTypes]=\"_filterTermTypes()\"\n [originalValues]=\"selectedOriginalValues()\"\n [recalculatedValues]=\"selectedRecalculatedValues()\"\n [noDataMessage]=\"noDataMessage()\"></he-node-logs-models>\n</ng-container>\n\n<he-node-csv-export-confirm\n *ngIf=\"showDownload\"\n [nodes]=\"impactAssessments()\"\n [filename]=\"'impact-' + _nodeKey() + '.csv'\"\n [isUpload]=\"false\"\n [headerKeys]=\"['impactAssessment.id', 'impactAssessment.@id', 'impactAssessment.' + _nodeKey() + '.']\"\n (closed)=\"showDownload = false\"></he-node-csv-export-confirm>\n\n<ng-template #emptyTable>\n <div class=\"has-text-centered\">\n <span>No data available</span>\n <span class=\"is-pl-1\" [class.is-hidden]=\"!filterTerm()\">matching your search criteria</span>\n <span>.</span>\n <span [class.is-hidden]=\"!isOriginal()\">\n Switch to\n <code>recalculated</code>\n version.\n </span>\n </div>\n</ng-template>\n\n<ng-template #emptyValue>\n <span>-</span>\n</ng-template>\n\n<ng-template #details let-node=\"impactAssessment\" let-data=\"data\">\n <p *bindOnce=\"node\">\n <b>\n <span *ngIf=\"data.cycle\">{{ cycleLabel(node.cycle) }}</span>\n <span *ngIf=\"!data.cycle\">{{ data.name }}</span>\n </b>\n </p>\n <he-node-value-details\n [data]=\"data\"\n [dataState]=\"_dataState()\"\n [nodeType]=\"node['@type']\"\n [dataKey]=\"_nodeKey()\"></he-node-value-details>\n</ng-template>\n\n<ng-template #suggestion let-impact=\"result\" let-t=\"term\">\n <div class=\"is-block\">\n <ngb-highlight [result]=\"impact.name || impact.cycle.name\" [term]=\"t\"></ngb-highlight>\n </div>\n <div class=\"columns is-flex\">\n <div class=\"column\" *ngIf=\"impact.country\">\n <span class=\"pr-1 has-text-underline\">Country:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.country.name\" [term]=\"t\"></ngb-highlight></span>\n </div>\n <div class=\"column\" *ngIf=\"impact.product\">\n <span class=\"pr-1 has-text-underline\">Product:</span>\n <span class=\"is-inline-flex\">\n <ngb-highlight [result]=\"impact.product.term?.name || impact.product.name\" [term]=\"t\"></ngb-highlight>\n </span>\n </div>\n <div class=\"column\" *ngIf=\"impact.endDate\">\n <span class=\"pr-1 has-text-underline\">Date:</span>\n <span class=\"is-inline-flex\"><ngb-highlight [result]=\"impact.endDate\" [term]=\"t\"></ngb-highlight></span>\n </div>\n </div>\n</ng-template>\n", styles: ["fa-icon{display:inline-block;width:10px}he-data-table ::ng-deep .table thead tr th:nth-child(2),he-data-table ::ng-deep .table tbody tr td:nth-child(2){max-width:102px;width:102px}he-data-table ::ng-deep .table thead tr th:nth-child(3),he-data-table ::ng-deep .table tbody tr td:nth-child(3){min-width:110px}\n"] }]
137
137
  }], ctorParameters: function () { return [{ type: i1.HeNodeStoreService }]; }, propDecorators: { dataState: [{
138
138
  type: Input
139
139
  }], nodeKey: [{
@@ -143,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
143
143
  }], enableFilterMethodModel: [{
144
144
  type: Input
145
145
  }] } });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQXdFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFN0MsSUFBSyxJQUtKO0FBTEQsV0FBSyxJQUFJO0lBQ1AsdUJBQWUsQ0FBQTtJQUNmLHVCQUFlLENBQUE7SUFDZiwrQkFBdUIsQ0FBQTtJQUN2QixxQkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxJLElBQUksS0FBSixJQUFJLFFBS1I7QUFFRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQVcsRUFBRSxrQkFBa0MsRUFBRSxFQUFFLEVBQUUsQ0FDeEUsQ0FBQyxlQUFlLEVBQUUsTUFBTSxJQUFJLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFFL0UsTUFBTSxVQUFVLEdBQUcsQ0FBQyxtQkFBNEIsRUFBRSxpQkFBd0IsRUFBRSxVQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWUsRUFBRSxFQUFFLENBQ3RIO0lBQ0UsQ0FBQyxtQkFBbUIsSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRSxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0NBQ25GLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBUW5CLE1BQU0sT0FBTyxrQ0FBa0M7SUFHN0MsSUFDSSxTQUFTLENBQUMsS0FBZ0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUdELElBQ0ksT0FBTyxDQUFDLEtBQW9CO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFJRCxJQUNJLGVBQWUsQ0FBQyxLQUFxQjtRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFJRCxJQUNJLHVCQUF1QixDQUFDLEtBQWM7UUFDeEMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBbUZELFlBQW9CLGdCQUFvQztRQUFwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW9CO1FBNUc5QyxlQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQU94QyxhQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQU16QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsRUFBb0IsQ0FBQyxDQUFDO1FBT2xELDZCQUF3QixHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQU92QyxrQkFBYSxHQUFHLGFBQWEsQ0FBQztRQUM5QixZQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDcEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsU0FBSSxHQUFHLElBQUksQ0FBQztRQUNaLGlCQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUU1QixXQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQWUsUUFBUSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV4Ryw4QkFBeUIsR0FBRyxRQUFRLENBQzFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQTBCLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQzNHLENBQUM7UUFDTSwwQkFBcUIsR0FBRyxRQUFRLENBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQTBCLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUNoRixDQUFDO1FBQ1Esc0JBQWlCLEdBQUcsUUFBUSxDQUNwQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQy9FLENBQUM7UUFFTSxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixxQ0FBZ0MsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVHLDZCQUF3QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDMUYsMkJBQXNCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUcsK0JBQTBCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEcsaUJBQVksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3JDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUM3QixDQUFDLENBQUM7Z0JBQ0UsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUU7Z0JBQ2xDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWTthQUNsQztZQUNILENBQUMsQ0FBQyxJQUFJLENBQ1QsQ0FBQztRQUVRLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4RSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRW5HLG9CQUFlLEdBQUcsUUFBUSxDQUNsQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxzQkFBc0IsQ0FDaEgsQ0FBQztRQUVNLDhCQUF5QixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ2hHLGVBQVUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFbEMsNEdBQTRHO1FBQ2xHLFlBQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ2hDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUN4RixDQUFDO1FBRVEsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQ3RDLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxhQUFhLENBQUMsb0JBQW9CO1lBQ3BELENBQUMsQ0FBQyxvTEFBb0w7WUFDdEwsQ0FBQyxDQUFDLFNBQVMsQ0FDZCxDQUFDO1FBRVEsaUJBQVksR0FBRyxRQUFRLENBQy9CLEdBQUcsRUFBRSxDQUNILE1BQU0sQ0FDSixJQUFJLENBQUMsaUJBQWlCLEVBQUU7YUFDckIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFDbEIsS0FBSyxDQUNJLENBQ2QsQ0FBQztRQUVNLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxTQUFpQixDQUFDLENBQUM7UUFFL0MsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsb0ZBQW9GO1lBQ3BGLHNEQUFzRDtZQUN0RCxNQUFNLDRCQUE0QixHQUFHLGdCQUFnQixDQUNuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFDeEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNmLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFDckIsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUM3RixDQUFDO1lBQ0YsT0FBTyxPQUFPLENBQ1osWUFBWSxDQUFDLDRCQUE0QixDQUFVLEVBQ25ELENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLEVBQ2hDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUNmLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBOEIsQ0FBQztRQUMxRyxDQUFDLENBQUMsQ0FBQztRQUdELE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixnRkFBZ0Y7WUFDaEYsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDaEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxTQUFTLENBQUMsTUFBYyxFQUFFLElBQTZCO1FBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFUyx5QkFBeUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ3ZELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUN0QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFUyxVQUFVLENBQUMsTUFBK0I7UUFDbEQsT0FBTyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFLLE1BQWMsQ0FBQyxFQUFFLENBQUM7SUFDN0csQ0FBQztJQUVTLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFPO1FBQzNDLE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDO0lBQ2hFLENBQUM7SUFFUyxZQUFZLENBQUMsSUFBWTtRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDOzhHQWhKVSxrQ0FBa0M7a0dBQWxDLGtDQUFrQyxzTkN4Qy9DLCtqV0FvUUE7OzJGRDVOYSxrQ0FBa0M7a0JBTjlDLFNBQVM7K0JBQ0UsZ0NBQWdDLG1CQUd6Qix1QkFBdUIsQ0FBQyxNQUFNO3lHQU0zQyxTQUFTO3NCQURaLEtBQUs7Z0JBT0YsT0FBTztzQkFEVixLQUFLO2dCQVFGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBUUYsdUJBQXVCO3NCQUQxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBJQ3ljbGVKU09OTEQsIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3IsIFRlcm1UZXJtVHlwZSwgVGVybSwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcblxuaW1wb3J0IHtcbiAgQmxhbmtOb2Rlc0tleSxcbiAgZ3JvdXBOb2Rlc0J5VGVybSxcbiAgSUdyb3VwZWRLZXlzLFxuICBncm91cHBlZEtleXMsXG4gIGlzTWV0aG9kTW9kZWxBbGxvd2VkXG59IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGNoYXJ0ID0gJ2NoYXJ0JyxcbiAgYnJlYWtkb3duID0gJ2JyZWFrZG93bicsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuY29uc3QgdGVybUFsbG93ZWQgPSAodGVybT86IFRlcm0sIGZpbHRlclRlcm1UeXBlczogVGVybVRlcm1UeXBlW10gPSBbXSkgPT5cbiAgIWZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8IChmaWx0ZXJUZXJtVHlwZXMgfHwgW10pLmluY2x1ZGVzKHRlcm0/LnRlcm1UeXBlKTtcblxuY29uc3QgZmlsdGVyTm9kZSA9IChmaWx0ZXJCeU1ldGhvZE1vZGVsOiBib29sZWFuLCBmaWx0ZXJNZXRob2RNb2RlbD86IFRlcm0sIGZpbHRlclRlcm0/OiBzdHJpbmcpID0+IChub2RlOiBJbmRpY2F0b3IpID0+XG4gIFtcbiAgICAhZmlsdGVyQnlNZXRob2RNb2RlbCB8fCBpc01ldGhvZE1vZGVsQWxsb3dlZChmaWx0ZXJNZXRob2RNb2RlbCkobm9kZSksXG4gICAgIWZpbHRlclRlcm0gfHwgbm9kZT8udGVybT8ubmFtZT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpKVxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgX2RhdGFTdGF0ZSA9IHNpZ25hbChEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU3RhdGUodmFsdWU6IERhdGFTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ub2RlS2V5ID0gc2lnbmFsKEJsYW5rTm9kZXNLZXkuaW1wYWN0cyk7XG4gIEBJbnB1dCgpXG4gIHNldCBub2RlS2V5KHZhbHVlOiBCbGFua05vZGVzS2V5KSB7XG4gICAgdGhpcy5fbm9kZUtleS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9maWx0ZXJUZXJtVHlwZXMgPSBzaWduYWwoW10gYXMgVGVybVRlcm1UeXBlW10pO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBmaWx0ZXJUZXJtVHlwZXModmFsdWU6IFRlcm1UZXJtVHlwZVtdKSB7XG4gICAgdGhpcy5fZmlsdGVyVGVybVR5cGVzLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9lbmFibGVGaWx0ZXJNZXRob2RNb2RlbCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KClcbiAgc2V0IGVuYWJsZUZpbHRlck1ldGhvZE1vZGVsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZW5hYmxlRmlsdGVyTWV0aG9kTW9kZWwuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHJvdGVjdGVkIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcblxuICBwcml2YXRlIGN5Y2xlcyA9IHRvU2lnbmFsKHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSwgRGF0YVN0YXRlLm9yaWdpbmFsKSk7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbEltcGFjdEFzc2Vzc21lbnRzID0gdG9TaWduYWwoXG4gICAgdGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmRCeVN0YXRlJDxJSW1wYWN0QXNzZXNzbWVudEpTT05MRD4oTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCwgRGF0YVN0YXRlLm9yaWdpbmFsKVxuICApO1xuICBwcml2YXRlIF9hbGxJbXBhY3RBc3Nlc3NtZW50cyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kJDxJSW1wYWN0QXNzZXNzbWVudEpTT05MRD4oTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudClcbiAgKTtcbiAgcHJvdGVjdGVkIGltcGFjdEFzc2Vzc21lbnRzID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5fYWxsSW1wYWN0QXNzZXNzbWVudHMoKT8ubWFwKGRhdGEgPT4gZGF0YVt0aGlzLl9kYXRhU3RhdGUoKV0pIHx8IFtdXG4gICk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmlnaW5hbEltcGFjdEFzc2Vzc21lbnRzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZE9yaWdpbmFsVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vZ2lyaW5hbFNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudCgpPy5bdGhpcy5fbm9kZUtleSgpXSB8fCBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50KCk/Llt0aGlzLl9ub2RlS2V5KCldIHx8IFtdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQoKSxcbiAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgfVxuICAgICAgOiBudWxsXG4gICk7XG5cbiAgcHJvdGVjdGVkIGlzT3JpZ2luYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsSW1wYWN0QXNzZXNzbWVudHMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCBlbmFibGVCcmVha2Rvd24gPSBjb21wdXRlZChcbiAgICAoKSA9PiAhdGhpcy5pc09yaWdpbmFsKCkgJiYgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cygpLmxlbmd0aCA9PT0gMSAmJiB0aGlzLl9ub2RlS2V5KCkgIT09ICdlbWlzc2lvbnNSZXNvdXJjZVVzZSdcbiAgKTtcblxuICBwcml2YXRlIHNob3VsZEZpbHRlckJ5TWV0aG9kTW9kZWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9lbmFibGVGaWx0ZXJNZXRob2RNb2RlbCgpICYmICF0aGlzLmlzT3JpZ2luYWwoKSk7XG4gIHByb3RlY3RlZCBmaWx0ZXJUZXJtID0gc2lnbmFsKCcnKTtcblxuICAvLyBhcyB3ZSBmaWx0ZXIgYnkgbWV0aG9kTW9kZWwsIHdlIG1pZ2h0IGhhdmUgYW4gZW1wdHkgdGFibGUgZm9yIHRoZSBkZWZhdWx0IG1vZGVscyBidXQgbm90IGZvciBvdGhlciBtb2RlbHNcbiAgcHJvdGVjdGVkIGhhc0RhdGEgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuX2VuYWJsZUZpbHRlck1ldGhvZE1vZGVsKCkgPyB0aGlzLm1ldGhvZE1vZGVscygpLmxlbmd0aCA6IHRoaXMuaW5kaWNhdG9ycygpLmxlbmd0aFxuICApO1xuXG4gIHByb3RlY3RlZCBub0RhdGFNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLl9ub2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zUmVzb3VyY2VVc2VcbiAgICAgID8gJ1dlIGNhbm5vdCBjYWxjdWxhdGUgdGhlc2UgZGF0YSwgbW9zdCBsaWtlbHkgYmVjYXVzZSB3ZSBhcmUgbWlzc2luZyB0aGUgcXVhbnRpdHkgcHJvZHVjZWQgb3IgYmVjYXVzZSB3ZSBhcmUgbWlzc2luZyBkYXRhIHRvIGFsbG9jYXRlIGVudmlyb25tZW50YWwgaW1wYWN0IGRhdGEgYmV0d2VlbiBjby1wcm9kdWN0cy4nXG4gICAgICA6IHVuZGVmaW5lZFxuICApO1xuXG4gIHByb3RlY3RlZCBtZXRob2RNb2RlbHMgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgdW5pcUJ5KFxuICAgICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKClcbiAgICAgICAgICAuZmxhdE1hcChpbXBhY3QgPT4gKGltcGFjdFt0aGlzLl9ub2RlS2V5KCldIHx8IFtdKS5tYXAodiA9PiB2Lm1ldGhvZE1vZGVsKSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICAnQGlkJ1xuICAgICAgKSBhcyBUZXJtW11cbiAgKTtcblxuICBwcml2YXRlIF9zZWxlY3RlZE1ldGhvZE1vZGVsID0gc2lnbmFsKHVuZGVmaW5lZCBhcyBUZXJtKTtcblxuICBwcm90ZWN0ZWQgaW5kaWNhdG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAvLyBUT0RPOiB3aGVuIHRoZXJlIGFyZSBubyBpbmRpY2F0b3JzIGZvciB0aGUgZGVmYXVsdCBtb2RlbCwgdGhlIHRhYmxlIGFwcGVhcnMgZW1wdHlcbiAgICAvLyBzaG91bGQgZGVmYXVsdCBiYWNrIHRvIHRoZSBmaXJzdCBtb2RlbCBpbiB0aGlzIGNhc2VcbiAgICBjb25zdCBpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50ID0gZ3JvdXBOb2Rlc0J5VGVybTxJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgSW5kaWNhdG9yPihcbiAgICAgIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKSxcbiAgICAgIHRoaXMuX25vZGVLZXkoKSxcbiAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMoKSxcbiAgICAgIGZpbHRlck5vZGUodGhpcy5zaG91bGRGaWx0ZXJCeU1ldGhvZE1vZGVsKCksIHRoaXMuX3NlbGVjdGVkTWV0aG9kTW9kZWwoKSwgdGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3JkZXJCeShcbiAgICAgIGdyb3VwcGVkS2V5cyhpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50KSBhcyBhbnlbXSxcbiAgICAgIFsndmFsdWUubWV0aG9kVGllck9yZGVyJywgJ2tleSddLFxuICAgICAgWydhc2MnLCAnYXNjJ11cbiAgICApLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0ZXJtQWxsb3dlZCh2YWx1ZT8udGVybSwgdGhpcy5fZmlsdGVyVGVybVR5cGVzKCkpKSBhcyBJR3JvdXBlZEtleXM8SW5kaWNhdG9yPltdO1xuICB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2U6IEhlTm9kZVN0b3JlU2VydmljZSkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBtYWtlIHN1cmUgbG9ncyBkb2VzIG5vdCByZW1haW4gZGlzcGxheWVkIHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gb3JpZ2luYWwgdmlld1xuICAgICAgaWYgKHRoaXMuaXNPcmlnaW5hbCgpICYmIHRoaXMuc2VsZWN0ZWRWaWV3ID09PSBWaWV3LmxvZ3MpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0ZWRNZXRob2RNb2RlbCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLl9zZWxlY3RlZE1ldGhvZE1vZGVsLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlUG9wb3Zlcihwb3BvdmVyLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHBvcG92ZXIuaXNPcGVuKCkgPyBwb3BvdmVyLmNsb3NlKCkgOiBwb3BvdmVyLm9wZW4oY29udGV4dCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW1wYWN0TmFtZShpbXBhY3Q6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEKSB7XG4gICAgcmV0dXJuIGltcGFjdC5uYW1lIHx8IChpbXBhY3QuY3ljbGUgPyB0aGlzLmN5Y2xlTGFiZWwoaW1wYWN0LmN5Y2xlKSA6IGltcGFjdFsnQGlkJ10pIHx8IChpbXBhY3QgYXMgYW55KS5pZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjeWNsZUxhYmVsKHsgJ0BpZCc6IGlkLCBuYW1lIH06IGFueSkge1xuICAgIHJldHVybiBuYW1lIHx8IHRoaXMuY3ljbGVzKCkuZmluZCh2ID0+IHZbJ0BpZCddID09PSBpZCk/Lm5hbWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsdGVyQnlUZXJtKHRlcm06IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyVGVybS5zZXQodGVybSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfSB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldCgrdmFsdWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBtLTBcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGFibGUgJiYgaW5kaWNhdG9ycygpLmxlbmd0aFwiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1naG9zdFwiXG4gICAgICAgIChjbGljayk9XCJzaG93RG93bmxvYWQgPSB0cnVlXCJcbiAgICAgICAgbmdiVG9vbHRpcD1cIkRvd25sb2FkIGFzIENTVlwiXG4gICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiPlxuICAgICAgICA8ZmEtaWNvbiBpY29uPVwiZG93bmxvYWRcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGFibGVcIj5cbiAgICA8aGUtc2VhcmNoLWV4dGVuZFxuICAgICAgY2xhc3M9XCJpcy1zZWNvbmRhcnkgaXMtc21hbGxcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgaW5kaWNhdG9ycyBieSBuYW1lXCJcbiAgICAgIChzZWFyY2gpPVwiZmlsdGVyQnlUZXJtKCRldmVudClcIj48L2hlLXNlYXJjaC1leHRlbmQ+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudHMoKS5sZW5ndGggPiAxIHx8IGVuYWJsZUJyZWFrZG93bigpIHx8ICFpc09yaWdpbmFsKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9uc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImxpc3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPlRhYmxlIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiaW1wYWN0QXNzZXNzbWVudHMoKS5sZW5ndGggPiAxXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5jaGFydFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcuY2hhcnRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJjaGFydC1iYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPkNoYXJ0IHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiZW5hYmxlQnJlYWtkb3duKClcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIGlzLXNtYWxsXCJcbiAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmJyZWFrZG93blwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcuYnJlYWtkb3duXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2hhcnQtYmFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj5CcmVha2Rvd24gdmlldzwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCIgKm5nSWY9XCIhaXNPcmlnaW5hbCgpXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gVmlldy5sb2dzXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2FsY3VsYXRvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tbW9iaWxlXCI+UmVjYWxjdWxhdGlvbnMgbG9nczwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cInB4LTMgcGItM1wiIFtjbGFzcy5pcy1oaWRkZW5dPVwic2VsZWN0ZWRWaWV3ICE9PSBWaWV3LnRhYmxlXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNEYXRhKCk7IGVsc2UgZW1wdHlUYWJsZVwiPlxuICAgIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgICAgPHRoZWFkPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBweS0wXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QgaXMtc21hbGxcIiAqbmdJZj1cImVuYWJsZUZpbHRlck1ldGhvZE1vZGVsXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInVwZGF0ZVNlbGVjdGVkTWV0aG9kTW9kZWwoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJ1bmRlZmluZWRcIj5GaWx0ZXIgTW9kZWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHRlcm0gb2YgbWV0aG9kTW9kZWxzKClcIiBbbmdWYWx1ZV09XCJ0ZXJtXCI+e3sgdGVybS5uYW1lIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGluZGljYXRvciBvZiBpbmRpY2F0b3JzKClcIiBbYXR0ci50aXRsZV09XCJpbmRpY2F0b3IudmFsdWUudGVybS5uYW1lXCI+XG4gICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImluZGljYXRvci52YWx1ZS50ZXJtLm5hbWUgfCBlbGxpcHNpczogMzAgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiaXMtaXRhbGljIGhhcy10ZXh0LXdlaWdodC1zZW1pYm9sZFwiPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0ltcGFjdEFzc2Vzc21lbnQjZnVuY3Rpb25hbFVuaXQnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+RnVuY3Rpb25hbCB1bml0PC9hPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPGEgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hL0ltcGFjdEFzc2Vzc21lbnQjcHJvZHVjdCdcIiB0YXJnZXQ9XCJfYmxhbmtcIj5Qcm9kdWN0PC9hPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgaW5kaWNhdG9yIG9mIGluZGljYXRvcnMoKVwiIFthdHRyLnRpdGxlXT1cImluZGljYXRvci52YWx1ZS50ZXJtLnVuaXRzXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFtpbm5lckh0bWxdPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm0udW5pdHMgfCBjb21wb3VuZFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPGhlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtbWwtMlwiXG4gICAgICAgICAgICAgICAgW3Rlcm1dPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm1cIj48L2hlLXRlcm1zLXVuaXRzLWRlc2NyaXB0aW9uPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW1wYWN0QXNzZXNzbWVudCBvZiBpbXBhY3RBc3Nlc3NtZW50cygpOyB0cmFja0J5OiB0cmFja0J5SWQ7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0TmFtZShpbXBhY3RBc3Nlc3NtZW50KVwiPlxuICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgW25vZGVdPVwiaW1wYWN0QXNzZXNzbWVudFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX0uIHt7IGltcGFjdE5hbWUoaW1wYWN0QXNzZXNzbWVudCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIiBbYXR0ci50aXRsZV09XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/LnRlcm0/LnVuaXRzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+MSB7eyBpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/LnRlcm0/LnVuaXRzIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py50ZXJtPy5uYW1lXCI+XG4gICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udGVybVwiIFtub2RlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdC50ZXJtXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3QudGVybS5uYW1lIHwgZWxsaXBzaXM6IDMwIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIiAqbmdGb3I9XCJsZXQgaW5kaWNhdG9yIG9mIGluZGljYXRvcnMoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dOyBlbHNlIGVtcHR5VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0cmlnZ2VyLXBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJpcy1uYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgI3A9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImxlZnRcIlxuICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVBvcG92ZXIocCwge1xuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLFxuICAgICAgICAgICAgICAgICAgICAgIGltcGFjdEFzc2Vzc21lbnQ6IGltcGFjdEFzc2Vzc21lbnRcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gcG9pbnRlcj5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVZhbHVlKGluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLnZhbHVlLCBpbmRpY2F0b3IudmFsdWUudGVybVsnQGlkJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICB8IHByZWNpc2lvbjogM1xuICAgICAgICAgICAgICAgICAgICAgICAgfCBkZWZhdWx0OiAnLSdcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXN0YXRlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtMVwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwiaW5kaWNhdG9yLnZhbHVlLnZhbHVlc1tpbXBhY3RBc3Nlc3NtZW50WydAaWQnXV0ubm9kZVwiXG4gICAgICAgICAgICAgICAgICAgIGtleT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXRlXT1cImltcGFjdEFzc2Vzc21lbnQuYWdncmVnYXRlZCA/ICdhZ2dyZWdhdGVkJyA6IHVuZGVmaW5lZFwiPjwvaGUtYmxhbmstbm9kZS1zdGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZS1ub3RpY2UgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvci1icmVha2Rvd24tY2hhcnRcbiAgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuYnJlYWtkb3duXCJcbiAgW2ltcGFjdEFzc2Vzc21lbnRdPVwiaW1wYWN0QXNzZXNzbWVudHMoKVswXVwiXG4gIFtpbmRpY2F0b3JzXT1cImltcGFjdEFzc2Vzc21lbnRzKClbMF1bX25vZGVLZXkoKV1cIj48L2hlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3ItYnJlYWtkb3duLWNoYXJ0PlxuXG48aGUtaW1wYWN0LWFzc2Vzc21lbnRzLWluZGljYXRvcnMtY2hhcnRcbiAgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuY2hhcnQgJiYgaW1wYWN0QXNzZXNzbWVudHMoKS5sZW5ndGggPiAxXCJcbiAgW2tleV09XCJfbm9kZUtleSgpXCJcbiAgW2ZpbHRlclRlcm1UeXBlc109XCJfZmlsdGVyVGVybVR5cGVzKClcIj48L2hlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmxvZ3MgJiYgIWlzT3JpZ2luYWwoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQgaGFzLWFkZG9ucyBwdC0yIHB4LTNcIiAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnRzKCkubGVuZ3RoID4gMVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbCBpcy1zdGF0aWMgaXMtc2Vjb25kYXJ5XCI+U2VsZWN0IGFuIEltcGFjdCBBc3Nlc3NtZW50PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsIGlzLWZ1bGx3aWR0aCBpcy1zZWNvbmRhcnlcIj5cbiAgICAgICAgPHNlbGVjdCAoY2hhbmdlKT1cInNlbGVjdEluZGV4KCRldmVudClcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBpbXBhY3RBc3Nlc3NtZW50cygpOyBsZXQgaSA9IGluZGV4XCIgW3ZhbHVlXT1cImlcIj5cbiAgICAgICAgICAgIHt7IGkgKyAxIH19LiB7eyBpbXBhY3ROYW1lKHZhbHVlKSB9fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8aGUtbm9kZS1sb2dzLW1vZGVsc1xuICAgICpuZ0lmPVwic2VsZWN0ZWROb2RlKClcIlxuICAgIFtub2RlXT1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICBbbm9kZUtleV09XCJfbm9kZUtleSgpXCJcbiAgICBbZmlsdGVyVGVybVR5cGVzXT1cIl9maWx0ZXJUZXJtVHlwZXMoKVwiXG4gICAgW29yaWdpbmFsVmFsdWVzXT1cInNlbGVjdGVkT3JpZ2luYWxWYWx1ZXMoKVwiXG4gICAgW3JlY2FsY3VsYXRlZFZhbHVlc109XCJzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcygpXCJcbiAgICBbbm9EYXRhTWVzc2FnZV09XCJub0RhdGFNZXNzYWdlKClcIj48L2hlLW5vZGUtbG9ncy1tb2RlbHM+XG48L25nLWNvbnRhaW5lcj5cblxuPGhlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtXG4gICpuZ0lmPVwic2hvd0Rvd25sb2FkXCJcbiAgW25vZGVzXT1cImltcGFjdEFzc2Vzc21lbnRzKClcIlxuICBbZmlsZW5hbWVdPVwiJ2ltcGFjdC0nICsgX25vZGVLZXkoKSArICcuY3N2J1wiXG4gIFtpc1VwbG9hZF09XCJmYWxzZVwiXG4gIFtoZWFkZXJLZXlzXT1cIlsnaW1wYWN0QXNzZXNzbWVudC5pZCcsICdpbXBhY3RBc3Nlc3NtZW50LkBpZCcsICdpbXBhY3RBc3Nlc3NtZW50LicgKyBfbm9kZUtleSgpICsgJy4nXVwiXG4gIChjbG9zZWQpPVwic2hvd0Rvd25sb2FkID0gZmFsc2VcIj48L2hlLW5vZGUtY3N2LWV4cG9ydC1jb25maXJtPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VGFibGU+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiPlxuICAgIDxzcGFuPk5vIGRhdGEgYXZhaWxhYmxlPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiaXMtcGwtMVwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWZpbHRlclRlcm0oKVwiPm1hdGNoaW5nIHlvdXIgc2VhcmNoIGNyaXRlcmlhPC9zcGFuPlxuICAgIDxzcGFuPi48L3NwYW4+XG4gICAgPHNwYW4gW2NsYXNzLmlzLWhpZGRlbl09XCIhaXNPcmlnaW5hbCgpXCI+XG4gICAgICBTd2l0Y2ggdG9cbiAgICAgIDxjb2RlPnJlY2FsY3VsYXRlZDwvY29kZT5cbiAgICAgIHZlcnNpb24uXG4gICAgPC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlWYWx1ZT5cbiAgPHNwYW4+LTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlscyBsZXQtbm9kZT1cImltcGFjdEFzc2Vzc21lbnRcIiBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPHAgKmJpbmRPbmNlPVwibm9kZVwiPlxuICAgIDxiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmN5Y2xlXCI+e3sgY3ljbGVMYWJlbChub2RlLmN5Y2xlKSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiIWRhdGEuY3ljbGVcIj57eyBkYXRhLm5hbWUgfX08L3NwYW4+XG4gICAgPC9iPlxuICA8L3A+XG4gIDxoZS1ub2RlLXZhbHVlLWRldGFpbHNcbiAgICBbZGF0YV09XCJkYXRhXCJcbiAgICBbZGF0YVN0YXRlXT1cIl9kYXRhU3RhdGUoKVwiXG4gICAgW25vZGVUeXBlXT1cIm5vZGVbJ0B0eXBlJ11cIlxuICAgIFtkYXRhS2V5XT1cIl9ub2RlS2V5KClcIj48L2hlLW5vZGUtdmFsdWUtZGV0YWlscz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc3VnZ2VzdGlvbiBsZXQtaW1wYWN0PVwicmVzdWx0XCIgbGV0LXQ9XCJ0ZXJtXCI+XG4gIDxkaXYgY2xhc3M9XCJpcy1ibG9ja1wiPlxuICAgIDxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0Lm5hbWUgfHwgaW1wYWN0LmN5Y2xlLm5hbWVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtZmxleFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAqbmdJZj1cImltcGFjdC5jb3VudHJ5XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+Q291bnRyeTo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+PG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJpbXBhY3QuY291bnRyeS5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD48L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtblwiICpuZ0lmPVwiaW1wYWN0LnByb2R1Y3RcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBoYXMtdGV4dC11bmRlcmxpbmVcIj5Qcm9kdWN0Ojwvc3Bhbj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWZsZXhcIj5cbiAgICAgICAgPG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJpbXBhY3QucHJvZHVjdC50ZXJtPy5uYW1lIHx8IGltcGFjdC5wcm9kdWN0Lm5hbWVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0PlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAqbmdJZj1cImltcGFjdC5lbmREYXRlXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+RGF0ZTo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+PG5nYi1oaWdobGlnaHQgW3Jlc3VsdF09XCJpbXBhY3QuZW5kRGF0ZVwiIFt0ZXJtXT1cInRcIj48L25nYi1oaWdobGlnaHQ+PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9pbXBhY3QtYXNzZXNzbWVudHMvaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvaW1wYWN0LWFzc2Vzc21lbnRzL2ltcGFjdC1hc3Nlc3NtZW50cy1wcm9kdWN0cy9pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQXdFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFbkMsT0FBTyxFQUNMLGFBQWEsRUFDYixnQkFBZ0IsRUFFaEIsWUFBWSxFQUNaLG9CQUFvQixFQUNyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFN0MsSUFBSyxJQUtKO0FBTEQsV0FBSyxJQUFJO0lBQ1AsdUJBQWUsQ0FBQTtJQUNmLHVCQUFlLENBQUE7SUFDZiwrQkFBdUIsQ0FBQTtJQUN2QixxQkFBYSxDQUFBO0FB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QkFEVixLQUFLO2dCQVFGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBUUYsdUJBQXVCO3NCQUQxQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIGNvbXB1dGVkLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBEYXRhU3RhdGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQgeyBJQ3ljbGVKU09OTEQsIElJbXBhY3RBc3Nlc3NtZW50SlNPTkxELCBJbmRpY2F0b3IsIFRlcm1UZXJtVHlwZSwgVGVybSwgTm9kZVR5cGUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBwcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscy9kaXN0L3Rlcm0nO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuaW1wb3J0IHVuaXFCeSBmcm9tICdsb2Rhc2gudW5pcWJ5JztcblxuaW1wb3J0IHtcbiAgQmxhbmtOb2Rlc0tleSxcbiAgZ3JvdXBOb2Rlc0J5VGVybSxcbiAgSUdyb3VwZWRLZXlzLFxuICBncm91cHBlZEtleXMsXG4gIGlzTWV0aG9kTW9kZWxBbGxvd2VkXG59IGZyb20gJy4uLy4uL2NvbW1vbi9ub2RlLXV0aWxzJztcbmltcG9ydCB7IEhlTm9kZVN0b3JlU2VydmljZSB9IGZyb20gJy4uLy4uL25vZGUvbm9kZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IGJhc2VVcmwgfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbHMnO1xuXG5lbnVtIFZpZXcge1xuICB0YWJsZSA9ICd0YWJsZScsXG4gIGNoYXJ0ID0gJ2NoYXJ0JyxcbiAgYnJlYWtkb3duID0gJ2JyZWFrZG93bicsXG4gIGxvZ3MgPSAnbG9ncydcbn1cblxuY29uc3QgdGVybUFsbG93ZWQgPSAodGVybT86IFRlcm0sIGZpbHRlclRlcm1UeXBlczogVGVybVRlcm1UeXBlW10gPSBbXSkgPT5cbiAgIWZpbHRlclRlcm1UeXBlcz8ubGVuZ3RoIHx8IChmaWx0ZXJUZXJtVHlwZXMgfHwgW10pLmluY2x1ZGVzKHRlcm0/LnRlcm1UeXBlKTtcblxuY29uc3QgZmlsdGVyTm9kZSA9IChmaWx0ZXJCeU1ldGhvZE1vZGVsOiBib29sZWFuLCBmaWx0ZXJNZXRob2RNb2RlbD86IFRlcm0sIGZpbHRlclRlcm0/OiBzdHJpbmcpID0+IChub2RlOiBJbmRpY2F0b3IpID0+XG4gIFtcbiAgICAhZmlsdGVyQnlNZXRob2RNb2RlbCB8fCBpc01ldGhvZE1vZGVsQWxsb3dlZChmaWx0ZXJNZXRob2RNb2RlbCkobm9kZSksXG4gICAgIWZpbHRlclRlcm0gfHwgbm9kZT8udGVybT8ubmFtZT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpKVxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1pbXBhY3QtYXNzZXNzbWVudHMtcHJvZHVjdHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaW1wYWN0LWFzc2Vzc21lbnRzLXByb2R1Y3RzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEltcGFjdEFzc2Vzc21lbnRzUHJvZHVjdHNDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgX2RhdGFTdGF0ZSA9IHNpZ25hbChEYXRhU3RhdGUub3JpZ2luYWwpO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU3RhdGUodmFsdWU6IERhdGFTdGF0ZSkge1xuICAgIHRoaXMuX2RhdGFTdGF0ZS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9ub2RlS2V5ID0gc2lnbmFsKEJsYW5rTm9kZXNLZXkuaW1wYWN0cyk7XG4gIEBJbnB1dCgpXG4gIHNldCBub2RlS2V5KHZhbHVlOiBCbGFua05vZGVzS2V5KSB7XG4gICAgdGhpcy5fbm9kZUtleS5zZXQodmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9maWx0ZXJUZXJtVHlwZXMgPSBzaWduYWwoW10gYXMgVGVybVRlcm1UeXBlW10pO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBmaWx0ZXJUZXJtVHlwZXModmFsdWU6IFRlcm1UZXJtVHlwZVtdKSB7XG4gICAgdGhpcy5fZmlsdGVyVGVybVR5cGVzLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIF9lbmFibGVGaWx0ZXJNZXRob2RNb2RlbCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgQElucHV0KClcbiAgc2V0IGVuYWJsZUZpbHRlck1ldGhvZE1vZGVsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZW5hYmxlRmlsdGVyTWV0aG9kTW9kZWwuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHJvdGVjdGVkIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHByb3RlY3RlZCBzaG93RG93bmxvYWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIFZpZXcgPSBWaWV3O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3ID0gVmlldy50YWJsZTtcblxuICBwcml2YXRlIGN5Y2xlcyA9IHRvU2lnbmFsKHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kQnlTdGF0ZSQ8SUN5Y2xlSlNPTkxEPihOb2RlVHlwZS5DeWNsZSwgRGF0YVN0YXRlLm9yaWdpbmFsKSk7XG5cbiAgcHJpdmF0ZSBvcmlnaW5hbEltcGFjdEFzc2Vzc21lbnRzID0gdG9TaWduYWwoXG4gICAgdGhpcy5ub2RlU3RvcmVTZXJ2aWNlLmZpbmRCeVN0YXRlJDxJSW1wYWN0QXNzZXNzbWVudEpTT05MRD4oTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCwgRGF0YVN0YXRlLm9yaWdpbmFsKVxuICApO1xuICBwcml2YXRlIF9hbGxJbXBhY3RBc3Nlc3NtZW50cyA9IHRvU2lnbmFsKFxuICAgIHRoaXMubm9kZVN0b3JlU2VydmljZS5maW5kJDxJSW1wYWN0QXNzZXNzbWVudEpTT05MRD4oTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudClcbiAgKTtcbiAgcHJvdGVjdGVkIGltcGFjdEFzc2Vzc21lbnRzID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5fYWxsSW1wYWN0QXNzZXNzbWVudHMoKT8ubWFwKGRhdGEgPT4gZGF0YVt0aGlzLl9kYXRhU3RhdGUoKV0pIHx8IFtdXG4gICk7XG5cbiAgcHJpdmF0ZSBzZWxlY3RlZEluZGV4ID0gc2lnbmFsKDApO1xuICBwcml2YXRlIG9naXJpbmFsU2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmlnaW5hbEltcGFjdEFzc2Vzc21lbnRzKCk/Llt0aGlzLnNlbGVjdGVkSW5kZXgoKV0pO1xuICBwcml2YXRlIHNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKT8uW3RoaXMuc2VsZWN0ZWRJbmRleCgpXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZE9yaWdpbmFsVmFsdWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vZ2lyaW5hbFNlbGVjdGVkSW1wYWN0QXNzZXNzbWVudCgpPy5bdGhpcy5fbm9kZUtleSgpXSB8fCBbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFJlY2FsY3VsYXRlZFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRJbXBhY3RBc3Nlc3NtZW50KCk/Llt0aGlzLl9ub2RlS2V5KCldIHx8IFtdKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkTm9kZSA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQoKVxuICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5zZWxlY3RlZEltcGFjdEFzc2Vzc21lbnQoKSxcbiAgICAgICAgICBkYXRhU3RhdGU6IERhdGFTdGF0ZS5yZWNhbGN1bGF0ZWRcbiAgICAgICAgfVxuICAgICAgOiBudWxsXG4gICk7XG5cbiAgcHJvdGVjdGVkIGlzT3JpZ2luYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9kYXRhU3RhdGUoKSA9PT0gRGF0YVN0YXRlLm9yaWdpbmFsKTtcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlcyA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmlzT3JpZ2luYWwoKSA/IG51bGwgOiB0aGlzLm9yaWdpbmFsSW1wYWN0QXNzZXNzbWVudHMoKSkgfHwgW10pO1xuXG4gIHByb3RlY3RlZCBlbmFibGVCcmVha2Rvd24gPSBjb21wdXRlZChcbiAgICAoKSA9PiAhdGhpcy5pc09yaWdpbmFsKCkgJiYgdGhpcy5pbXBhY3RBc3Nlc3NtZW50cygpLmxlbmd0aCA9PT0gMSAmJiB0aGlzLl9ub2RlS2V5KCkgIT09ICdlbWlzc2lvbnNSZXNvdXJjZVVzZSdcbiAgKTtcblxuICBwcml2YXRlIHNob3VsZEZpbHRlckJ5TWV0aG9kTW9kZWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9lbmFibGVGaWx0ZXJNZXRob2RNb2RlbCgpICYmICF0aGlzLmlzT3JpZ2luYWwoKSk7XG4gIHByb3RlY3RlZCBmaWx0ZXJUZXJtID0gc2lnbmFsKCcnKTtcblxuICAvLyBhcyB3ZSBmaWx0ZXIgYnkgbWV0aG9kTW9kZWwsIHdlIG1pZ2h0IGhhdmUgYW4gZW1wdHkgdGFibGUgZm9yIHRoZSBkZWZhdWx0IG1vZGVscyBidXQgbm90IGZvciBvdGhlciBtb2RlbHNcbiAgcHJvdGVjdGVkIGhhc0RhdGEgPSBjb21wdXRlZCgoKSA9PlxuICAgIHRoaXMuX2VuYWJsZUZpbHRlck1ldGhvZE1vZGVsKCkgPyB0aGlzLm1ldGhvZE1vZGVscygpLmxlbmd0aCA6IHRoaXMuaW5kaWNhdG9ycygpLmxlbmd0aFxuICApO1xuXG4gIHByb3RlY3RlZCBub0RhdGFNZXNzYWdlID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLl9ub2RlS2V5KCkgPT09IEJsYW5rTm9kZXNLZXkuZW1pc3Npb25zUmVzb3VyY2VVc2VcbiAgICAgID8gJ1dlIGNhbm5vdCBjYWxjdWxhdGUgdGhlc2UgZGF0YSwgbW9zdCBsaWtlbHkgYmVjYXVzZSB3ZSBhcmUgbWlzc2luZyB0aGUgcXVhbnRpdHkgcHJvZHVjZWQgb3IgYmVjYXVzZSB3ZSBhcmUgbWlzc2luZyBkYXRhIHRvIGFsbG9jYXRlIGVudmlyb25tZW50YWwgaW1wYWN0IGRhdGEgYmV0d2VlbiBjby1wcm9kdWN0cy4nXG4gICAgICA6IHVuZGVmaW5lZFxuICApO1xuXG4gIHByb3RlY3RlZCBtZXRob2RNb2RlbHMgPSBjb21wdXRlZChcbiAgICAoKSA9PlxuICAgICAgdW5pcUJ5KFxuICAgICAgICB0aGlzLmltcGFjdEFzc2Vzc21lbnRzKClcbiAgICAgICAgICAuZmxhdE1hcChpbXBhY3QgPT4gKGltcGFjdFt0aGlzLl9ub2RlS2V5KCldIHx8IFtdKS5tYXAodiA9PiB2Lm1ldGhvZE1vZGVsKSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgICAnQGlkJ1xuICAgICAgKSBhcyBUZXJtW11cbiAgKTtcblxuICBwcml2YXRlIF9zZWxlY3RlZE1ldGhvZE1vZGVsID0gc2lnbmFsKHVuZGVmaW5lZCBhcyBUZXJtKTtcblxuICBwcm90ZWN0ZWQgaW5kaWNhdG9ycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAvLyBUT0RPOiB3aGVuIHRoZXJlIGFyZSBubyBpbmRpY2F0b3JzIGZvciB0aGUgZGVmYXVsdCBtb2RlbCwgdGhlIHRhYmxlIGFwcGVhcnMgZW1wdHlcbiAgICAvLyBzaG91bGQgZGVmYXVsdCBiYWNrIHRvIHRoZSBmaXJzdCBtb2RlbCBpbiB0aGlzIGNhc2VcbiAgICBjb25zdCBpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50ID0gZ3JvdXBOb2Rlc0J5VGVybTxJSW1wYWN0QXNzZXNzbWVudEpTT05MRCwgSW5kaWNhdG9yPihcbiAgICAgIHRoaXMuaW1wYWN0QXNzZXNzbWVudHMoKSxcbiAgICAgIHRoaXMuX25vZGVLZXkoKSxcbiAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZXMoKSxcbiAgICAgIGZpbHRlck5vZGUodGhpcy5zaG91bGRGaWx0ZXJCeU1ldGhvZE1vZGVsKCksIHRoaXMuX3NlbGVjdGVkTWV0aG9kTW9kZWwoKSwgdGhpcy5maWx0ZXJUZXJtKCkpXG4gICAgKTtcbiAgICByZXR1cm4gb3JkZXJCeShcbiAgICAgIGdyb3VwcGVkS2V5cyhpbmRpY2F0b3JQZXJJbXBhY3RBc3Nlc3NtZW50KSBhcyBhbnlbXSxcbiAgICAgIFsndmFsdWUubWV0aG9kVGllck9yZGVyJywgJ2tleSddLFxuICAgICAgWydhc2MnLCAnYXNjJ11cbiAgICApLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB0ZXJtQWxsb3dlZCh2YWx1ZT8udGVybSwgdGhpcy5fZmlsdGVyVGVybVR5cGVzKCkpKSBhcyBJR3JvdXBlZEtleXM8SW5kaWNhdG9yPltdO1xuICB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vZGVTdG9yZVNlcnZpY2U6IEhlTm9kZVN0b3JlU2VydmljZSkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyBtYWtlIHN1cmUgbG9ncyBkb2VzIG5vdCByZW1haW4gZGlzcGxheWVkIHdoZW4gc3dpdGNoaW5nIGJhY2sgdG8gb3JpZ2luYWwgdmlld1xuICAgICAgaWYgKHRoaXMuaXNPcmlnaW5hbCgpICYmIHRoaXMuc2VsZWN0ZWRWaWV3ID09PSBWaWV3LmxvZ3MpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBWaWV3LnRhYmxlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYWNrQnlJZChfaW5kZXg6IG51bWJlciwgaXRlbTogSUltcGFjdEFzc2Vzc21lbnRKU09OTEQpIHtcbiAgICByZXR1cm4gaXRlbVsnQGlkJ107XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0ZWRNZXRob2RNb2RlbCh7IHRhcmdldDogeyB2YWx1ZSB9IH0pIHtcbiAgICB0aGlzLl9zZWxlY3RlZE1ldGhvZE1vZGVsLnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlUG9wb3Zlcihwb3BvdmVyLCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHBvcG92ZXIuaXNPcGVuKCkgPyBwb3BvdmVyLmNsb3NlKCkgOiBwb3BvdmVyLm9wZW4oY29udGV4dCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW1wYWN0TmFtZShpbXBhY3Q6IElJbXBhY3RBc3Nlc3NtZW50SlNPTkxEKSB7XG4gICAgcmV0dXJuIGltcGFjdC5uYW1lIHx8IChpbXBhY3QuY3ljbGUgPyB0aGlzLmN5Y2xlTGFiZWwoaW1wYWN0LmN5Y2xlKSA6IGltcGFjdFsnQGlkJ10pIHx8IChpbXBhY3QgYXMgYW55KS5pZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjeWNsZUxhYmVsKHsgJ0BpZCc6IGlkLCBuYW1lIH06IGFueSkge1xuICAgIHJldHVybiBuYW1lIHx8IHRoaXMuY3ljbGVzKCkuZmluZCh2ID0+IHZbJ0BpZCddID09PSBpZCk/Lm5hbWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsdGVyQnlUZXJtKHRlcm06IHN0cmluZykge1xuICAgIHRoaXMuZmlsdGVyVGVybS5zZXQodGVybSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0SW5kZXgoeyB0YXJnZXQ6IHsgdmFsdWUgfSB9KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4LnNldCgrdmFsdWUpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy1hbGlnbi1pdGVtcy1jZW50ZXIgaXMtMiBpcy1tLTBcIiAqbmdJZj1cImluZGljYXRvcnMoKS5sZW5ndGhcIj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcudGFibGVcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtZ2hvc3RcIlxuICAgICAgICAoY2xpY2spPVwic2hvd0Rvd25sb2FkID0gdHJ1ZVwiXG4gICAgICAgIG5nYlRvb2x0aXA9XCJEb3dubG9hZCBhcyBDU1ZcIlxuICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIj5cbiAgICAgICAgPGZhLWljb24gaWNvbj1cImRvd25sb2FkXCIgc2l6ZT1cImxnXCI+PC9mYS1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LnRhYmxlXCI+XG4gICAgPGhlLXNlYXJjaC1leHRlbmRcbiAgICAgIGNsYXNzPVwiaXMtc2Vjb25kYXJ5IGlzLXNtYWxsXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGluZGljYXRvcnMgYnkgbmFtZVwiXG4gICAgICAoc2VhcmNoKT1cImZpbHRlckJ5VGVybSgkZXZlbnQpXCI+PC9oZS1zZWFyY2gtZXh0ZW5kPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNvbHVtbiBpcy1uYXJyb3dcIiAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnRzKCkubGVuZ3RoID4gMSB8fCBlbmFibGVCcmVha2Rvd24oKSB8fCAhaXNPcmlnaW5hbCgpXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy50YWJsZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcudGFibGVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImljb24gaXMtc21hbGxcIj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJsaXN0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj5UYWJsZSB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cImltcGFjdEFzc2Vzc21lbnRzKCkubGVuZ3RoID4gMVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcuY2hhcnRcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmNoYXJ0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpY29uIGlzLXNtYWxsXCI+XG4gICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiY2hhcnQtYmFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWhpZGRlbi1tb2JpbGVcIj5DaGFydCB2aWV3PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2xcIiAqbmdJZj1cImVuYWJsZUJyZWFrZG93bigpXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBpcy1zbWFsbFwiXG4gICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5icmVha2Rvd25cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSBWaWV3LmJyZWFrZG93blwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNoYXJ0LWJhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1oaWRkZW4tbW9iaWxlXCI+QnJlYWtkb3duIHZpZXc8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiICpuZ0lmPVwiIWlzT3JpZ2luYWwoKVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24gaXMtc21hbGxcIlxuICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZFZpZXcgPT09IFZpZXcubG9nc1wiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9IFZpZXcubG9nc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbiBpcy1zbWFsbFwiPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImNhbGN1bGF0b3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2ZhLWljb24+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaGlkZGVuLW1vYmlsZVwiPlJlY2FsY3VsYXRpb25zIGxvZ3M8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIiBbY2xhc3MuaXMtaGlkZGVuXT1cInNlbGVjdGVkVmlldyAhPT0gVmlldy50YWJsZVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRGF0YSgpOyBlbHNlIGVtcHR5VGFibGVcIj5cbiAgICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIG1heEhlaWdodD1cIjMyMFwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIGlzLW5hcnJvdyBpcy1zdHJpcGVkXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gcHktMFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0IGlzLXNtYWxsXCIgKm5nSWY9XCJlbmFibGVGaWx0ZXJNZXRob2RNb2RlbFwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJ1cGRhdGVTZWxlY3RlZE1ldGhvZE1vZGVsKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW25nVmFsdWVdPVwidW5kZWZpbmVkXCI+RmlsdGVyIE1vZGVsPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0ZXJtIG9mIG1ldGhvZE1vZGVscygpXCIgW25nVmFsdWVdPVwidGVybVwiPnt7IHRlcm0ubmFtZSB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+PC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj48L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBpbmRpY2F0b3Igb2YgaW5kaWNhdG9ycygpXCIgW2F0dHIudGl0bGVdPVwiaW5kaWNhdG9yLnZhbHVlLnRlcm0ubmFtZVwiPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImluZGljYXRvci52YWx1ZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJpbmRpY2F0b3IudmFsdWUudGVybS5uYW1lIHwgZWxsaXBzaXM6IDMwIHwgY29tcG91bmRcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImlzLWl0YWxpYyBoYXMtdGV4dC13ZWlnaHQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiPjwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9JbXBhY3RBc3Nlc3NtZW50I2Z1bmN0aW9uYWxVbml0J1wiIHRhcmdldD1cIl9ibGFua1wiPkZ1bmN0aW9uYWwgdW5pdDwvYT5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxhIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS9JbXBhY3RBc3Nlc3NtZW50I3Byb2R1Y3QnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+UHJvZHVjdDwvYT5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGluZGljYXRvciBvZiBpbmRpY2F0b3JzKClcIiBbYXR0ci50aXRsZV09XCJpbmRpY2F0b3IudmFsdWUudGVybS51bml0c1wiPlxuICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIdG1sXT1cImluZGljYXRvci52YWx1ZS50ZXJtLnVuaXRzIHwgY29tcG91bmRcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxoZS10ZXJtcy11bml0cy1kZXNjcmlwdGlvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLW1sLTJcIlxuICAgICAgICAgICAgICAgIFt0ZXJtXT1cImluZGljYXRvci52YWx1ZS50ZXJtXCI+PC9oZS10ZXJtcy11bml0cy1kZXNjcmlwdGlvbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGltcGFjdEFzc2Vzc21lbnQgb2YgaW1wYWN0QXNzZXNzbWVudHMoKTsgdHJhY2tCeTogdHJhY2tCeUlkOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIndpZHRoLWF1dG8gaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImltcGFjdE5hbWUoaW1wYWN0QXNzZXNzbWVudClcIj5cbiAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIFtub2RlXT1cImltcGFjdEFzc2Vzc21lbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19LiB7eyBpbXBhY3ROYW1lKGltcGFjdEFzc2Vzc21lbnQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaGUtbm9kZS1saW5rPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCIgW2F0dHIudGl0bGVdPVwiaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py50ZXJtPy51bml0c1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuPjEge3sgaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0Py50ZXJtPy51bml0cyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiIFthdHRyLnRpdGxlXT1cImltcGFjdEFzc2Vzc21lbnQucHJvZHVjdD8udGVybT8ubmFtZVwiPlxuICAgICAgICAgICAgICAgIDxoZS1ub2RlLWxpbmsgKm5nSWY9XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3Q/LnRlcm1cIiBbbm9kZV09XCJpbXBhY3RBc3Nlc3NtZW50LnByb2R1Y3QudGVybVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaW1wYWN0QXNzZXNzbWVudC5wcm9kdWN0LnRlcm0ubmFtZSB8IGVsbGlwc2lzOiAzMCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaXMtbm93cmFwXCIgKm5nRm9yPVwibGV0IGluZGljYXRvciBvZiBpbmRpY2F0b3JzKClcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbmRpY2F0b3IudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXTsgZWxzZSBlbXB0eVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidHJpZ2dlci1wb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgICAgcG9wb3ZlckNsYXNzPVwiaXMtbmFycm93XCJcbiAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICNwPVwibmdiUG9wb3ZlclwiXG4gICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJsZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICB0b2dnbGVQb3BvdmVyKHAsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpbmRpY2F0b3IudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXSxcbiAgICAgICAgICAgICAgICAgICAgICBpbXBhY3RBc3Nlc3NtZW50OiBpbXBhY3RBc3Nlc3NtZW50XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHBvaW50ZXI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWx1ZShpbmRpY2F0b3IudmFsdWUudmFsdWVzW2ltcGFjdEFzc2Vzc21lbnRbJ0BpZCddXS52YWx1ZSwgaW5kaWNhdG9yLnZhbHVlLnRlcm1bJ0BpZCddKVxuICAgICAgICAgICAgICAgICAgICAgICAgfCBwcmVjaXNpb246IDNcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgZGVmYXVsdDogJy0nXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS1zdGF0ZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLTFcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YVN0YXRlXT1cIl9kYXRhU3RhdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtub2RlXT1cImluZGljYXRvci52YWx1ZS52YWx1ZXNbaW1wYWN0QXNzZXNzbWVudFsnQGlkJ11dLm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICBrZXk9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0ZV09XCJpbXBhY3RBc3Nlc3NtZW50LmFnZ3JlZ2F0ZWQgPyAnYWdncmVnYXRlZCcgOiB1bmRlZmluZWRcIj48L2hlLWJsYW5rLW5vZGUtc3RhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9oZS1kYXRhLXRhYmxlPlxuXG4gICAgPGhlLWJsYW5rLW5vZGUtc3RhdGUtbm90aWNlIFtkYXRhU3RhdGVdPVwiX2RhdGFTdGF0ZSgpXCI+PC9oZS1ibGFuay1ub2RlLXN0YXRlLW5vdGljZT5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGhlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3ItYnJlYWtkb3duLWNoYXJ0XG4gICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmJyZWFrZG93blwiXG4gIFtpbXBhY3RBc3Nlc3NtZW50XT1cImltcGFjdEFzc2Vzc21lbnRzKClbMF1cIlxuICBbaW5kaWNhdG9yc109XCJpbXBhY3RBc3Nlc3NtZW50cygpWzBdW19ub2RlS2V5KCldXCI+PC9oZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9yLWJyZWFrZG93bi1jaGFydD5cblxuPGhlLWltcGFjdC1hc3Nlc3NtZW50cy1pbmRpY2F0b3JzLWNoYXJ0XG4gICpuZ0lmPVwic2VsZWN0ZWRWaWV3ID09PSBWaWV3LmNoYXJ0ICYmIGltcGFjdEFzc2Vzc21lbnRzKCkubGVuZ3RoID4gMVwiXG4gIFtrZXldPVwiX25vZGVLZXkoKVwiXG4gIFtmaWx0ZXJUZXJtVHlwZXNdPVwiX2ZpbHRlclRlcm1UeXBlcygpXCI+PC9oZS1pbXBhY3QtYXNzZXNzbWVudHMtaW5kaWNhdG9ycy1jaGFydD5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gVmlldy5sb2dzICYmICFpc09yaWdpbmFsKClcIj5cbiAgPGRpdiBjbGFzcz1cImZpZWxkIGhhcy1hZGRvbnMgcHQtMiBweC0zXCIgKm5nSWY9XCJpbXBhY3RBc3Nlc3NtZW50cygpLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24gaXMtc21hbGwgaXMtc3RhdGljIGlzLXNlY29uZGFyeVwiPlNlbGVjdCBhbiBJbXBhY3QgQXNzZXNzbWVudDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdCBpcy1zbWFsbCBpcy1mdWxsd2lkdGggaXMtc2Vjb25kYXJ5XCI+XG4gICAgICAgIDxzZWxlY3QgKGNoYW5nZSk9XCJzZWxlY3RJbmRleCgkZXZlbnQpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgaW1wYWN0QXNzZXNzbWVudHMoKTsgbGV0IGkgPSBpbmRleFwiIFt2YWx1ZV09XCJpXCI+XG4gICAgICAgICAgICB7eyBpICsgMSB9fS4ge3sgaW1wYWN0TmFtZSh2YWx1ZSkgfX1cbiAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGhlLW5vZGUtbG9ncy1tb2RlbHNcbiAgICAqbmdJZj1cInNlbGVjdGVkTm9kZSgpXCJcbiAgICBbbm9kZV09XCJzZWxlY3RlZE5vZGUoKVwiXG4gICAgW25vZGVLZXldPVwiX25vZGVLZXkoKVwiXG4gICAgW2ZpbHRlclRlcm1UeXBlc109XCJfZmlsdGVyVGVybVR5cGVzKClcIlxuICAgIFtvcmlnaW5hbFZhbHVlc109XCJzZWxlY3RlZE9yaWdpbmFsVmFsdWVzKClcIlxuICAgIFtyZWNhbGN1bGF0ZWRWYWx1ZXNdPVwic2VsZWN0ZWRSZWNhbGN1bGF0ZWRWYWx1ZXMoKVwiXG4gICAgW25vRGF0YU1lc3NhZ2VdPVwibm9EYXRhTWVzc2FnZSgpXCI+PC9oZS1ub2RlLWxvZ3MtbW9kZWxzPlxuPC9uZy1jb250YWluZXI+XG5cbjxoZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybVxuICAqbmdJZj1cInNob3dEb3dubG9hZFwiXG4gIFtub2Rlc109XCJpbXBhY3RBc3Nlc3NtZW50cygpXCJcbiAgW2ZpbGVuYW1lXT1cIidpbXBhY3QtJyArIF9ub2RlS2V5KCkgKyAnLmNzdidcIlxuICBbaXNVcGxvYWRdPVwiZmFsc2VcIlxuICBbaGVhZGVyS2V5c109XCJbJ2ltcGFjdEFzc2Vzc21lbnQuaWQnLCAnaW1wYWN0QXNzZXNzbWVudC5AaWQnLCAnaW1wYWN0QXNzZXNzbWVudC4nICsgX25vZGVLZXkoKSArICcuJ11cIlxuICAoY2xvc2VkKT1cInNob3dEb3dubG9hZCA9IGZhbHNlXCI+PC9oZS1ub2RlLWNzdi1leHBvcnQtY29uZmlybT5cblxuPG5nLXRlbXBsYXRlICNlbXB0eVRhYmxlPlxuICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWRcIj5cbiAgICA8c3Bhbj5ObyBkYXRhIGF2YWlsYWJsZTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImlzLXBsLTFcIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFmaWx0ZXJUZXJtKClcIj5tYXRjaGluZyB5b3VyIHNlYXJjaCBjcml0ZXJpYTwvc3Bhbj5cbiAgICA8c3Bhbj4uPC9zcGFuPlxuICAgIDxzcGFuIFtjbGFzcy5pcy1oaWRkZW5dPVwiIWlzT3JpZ2luYWwoKVwiPlxuICAgICAgU3dpdGNoIHRvXG4gICAgICA8Y29kZT5yZWNhbGN1bGF0ZWQ8L2NvZGU+XG4gICAgICB2ZXJzaW9uLlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5VmFsdWU+XG4gIDxzcGFuPi08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RldGFpbHMgbGV0LW5vZGU9XCJpbXBhY3RBc3Nlc3NtZW50XCIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxwICpiaW5kT25jZT1cIm5vZGVcIj5cbiAgICA8Yj5cbiAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5jeWNsZVwiPnt7IGN5Y2xlTGFiZWwobm9kZS5jeWNsZSkgfX08L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFkYXRhLmN5Y2xlXCI+e3sgZGF0YS5uYW1lIH19PC9zcGFuPlxuICAgIDwvYj5cbiAgPC9wPlxuICA8aGUtbm9kZS12YWx1ZS1kZXRhaWxzXG4gICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgW2RhdGFTdGF0ZV09XCJfZGF0YVN0YXRlKClcIlxuICAgIFtub2RlVHlwZV09XCJub2RlWydAdHlwZSddXCJcbiAgICBbZGF0YUtleV09XCJfbm9kZUtleSgpXCI+PC9oZS1ub2RlLXZhbHVlLWRldGFpbHM+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3N1Z2dlc3Rpb24gbGV0LWltcGFjdD1cInJlc3VsdFwiIGxldC10PVwidGVybVwiPlxuICA8ZGl2IGNsYXNzPVwiaXMtYmxvY2tcIj5cbiAgICA8bmdiLWhpZ2hsaWdodCBbcmVzdWx0XT1cImltcGFjdC5uYW1lIHx8IGltcGFjdC5jeWNsZS5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5zIGlzLWZsZXhcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJpbXBhY3QuY291bnRyeVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGhhcy10ZXh0LXVuZGVybGluZVwiPkNvdW50cnk6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtZmxleFwiPjxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0LmNvdW50cnkubmFtZVwiIFt0ZXJtXT1cInRcIj48L25nYi1oaWdobGlnaHQ+PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIiAqbmdJZj1cImltcGFjdC5wcm9kdWN0XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cInByLTEgaGFzLXRleHQtdW5kZXJsaW5lXCI+UHJvZHVjdDo8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1mbGV4XCI+XG4gICAgICAgIDxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0LnByb2R1Y3QudGVybT8ubmFtZSB8fCBpbXBhY3QucHJvZHVjdC5uYW1lXCIgW3Rlcm1dPVwidFwiPjwvbmdiLWhpZ2hsaWdodD5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCIgKm5nSWY9XCJpbXBhY3QuZW5kRGF0ZVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwci0xIGhhcy10ZXh0LXVuZGVybGluZVwiPkRhdGU6PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtZmxleFwiPjxuZ2ItaGlnaGxpZ2h0IFtyZXN1bHRdPVwiaW1wYWN0LmVuZERhdGVcIiBbdGVybV09XCJ0XCI+PC9uZ2ItaGlnaGxpZ2h0Pjwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19