@sitecore-jss/sitecore-jss-angular 20.3.2-canary.2 → 20.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE.txt +202 -202
  2. package/README.md +8 -8
  3. package/dist/README.md +8 -8
  4. package/dist/bundles/sitecore-jss-sitecore-jss-angular.umd.js +1440 -1440
  5. package/dist/components/date.directive.d.ts +17 -17
  6. package/dist/components/file.directive.d.ts +14 -14
  7. package/dist/components/generic-link.directive.d.ts +18 -18
  8. package/dist/components/hidden-rendering.component.d.ts +4 -4
  9. package/dist/components/image.directive.d.ts +32 -32
  10. package/dist/components/link.directive.d.ts +22 -22
  11. package/dist/components/missing-component.component.d.ts +4 -4
  12. package/dist/components/placeholder-loading.directive.d.ts +5 -5
  13. package/dist/components/placeholder.component.d.ts +46 -46
  14. package/dist/components/placeholder.token.d.ts +31 -31
  15. package/dist/components/raw.component.d.ts +9 -9
  16. package/dist/components/render-component.component.d.ts +31 -31
  17. package/dist/components/render-each.directive.d.ts +5 -5
  18. package/dist/components/render-empty.directive.d.ts +5 -5
  19. package/dist/components/rendering-field.d.ts +40 -40
  20. package/dist/components/rendering.d.ts +5 -5
  21. package/dist/components/rich-text.directive.d.ts +12 -12
  22. package/dist/components/router-link.directive.d.ts +16 -16
  23. package/dist/components/text.directive.d.ts +13 -13
  24. package/dist/esm2015/components/date.directive.js +52 -52
  25. package/dist/esm2015/components/file.directive.js +44 -44
  26. package/dist/esm2015/components/generic-link.directive.js +57 -57
  27. package/dist/esm2015/components/hidden-rendering.component.js +16 -16
  28. package/dist/esm2015/components/image.directive.js +122 -122
  29. package/dist/esm2015/components/link.directive.js +101 -101
  30. package/dist/esm2015/components/missing-component.component.js +12 -12
  31. package/dist/esm2015/components/placeholder-loading.directive.js +14 -14
  32. package/dist/esm2015/components/placeholder.component.js +197 -197
  33. package/dist/esm2015/components/placeholder.token.js +21 -21
  34. package/dist/esm2015/components/raw.component.js +36 -36
  35. package/dist/esm2015/components/render-component.component.js +88 -88
  36. package/dist/esm2015/components/render-each.directive.js +14 -14
  37. package/dist/esm2015/components/render-empty.directive.js +14 -14
  38. package/dist/esm2015/components/rendering-field.js +1 -1
  39. package/dist/esm2015/components/rendering.js +7 -7
  40. package/dist/esm2015/components/rich-text.directive.js +40 -40
  41. package/dist/esm2015/components/router-link.directive.js +43 -43
  42. package/dist/esm2015/components/text.directive.js +53 -53
  43. package/dist/esm2015/jss-component-factory.service.js +87 -87
  44. package/dist/esm2015/lib.module.js +114 -114
  45. package/dist/esm2015/public_api.js +18 -18
  46. package/dist/esm2015/sitecore-jss-sitecore-jss-angular.js +13 -13
  47. package/dist/fesm2015/sitecore-jss-sitecore-jss-angular.js +1050 -1050
  48. package/dist/jss-component-factory.service.d.ts +21 -21
  49. package/dist/lib.module.d.ts +24 -24
  50. package/dist/package.json +2 -2
  51. package/dist/public_api.d.ts +19 -19
  52. package/dist/sitecore-jss-sitecore-jss-angular.d.ts +13 -13
  53. package/package.json +3 -3
  54. package/typings/README.md +2 -2
@@ -1,207 +1,207 @@
1
- /* eslint-disable @angular-eslint/no-conflicting-lifecycle */
2
- import { ChangeDetectorRef, Component, ComponentFactoryResolver, ContentChild, ElementRef, EventEmitter, Inject, Input, KeyValueDiffers, Output, Renderer2, Type, ViewChild, ViewContainerRef, } from '@angular/core';
3
- import { Observable } from 'rxjs';
4
- import { takeWhile } from 'rxjs/operators';
5
- import { JssComponentFactoryService, } from '../jss-component-factory.service';
6
- import { HIDDEN_RENDERING_NAME } from './hidden-rendering.component';
7
- import { PlaceholderLoadingDirective } from './placeholder-loading.directive';
8
- import { PLACEHOLDER_HIDDEN_RENDERING_COMPONENT, PLACEHOLDER_MISSING_COMPONENT_COMPONENT, } from './placeholder.token';
9
- import { RenderEachDirective } from './render-each.directive';
10
- import { RenderEmptyDirective } from './render-empty.directive';
11
- import { isRawRendering } from './rendering';
12
- /**
13
- * @param {ComponentRendering} rendering
14
- * @param {string} name
15
- */
16
- function getPlaceholder(rendering, name) {
17
- if (rendering && rendering.placeholders && Object.keys(rendering.placeholders).length > 0) {
18
- return rendering.placeholders[name];
19
- }
20
- return null;
21
- }
22
- export class PlaceholderComponent {
23
- constructor(componentFactoryResolver, differs, componentFactory, changeDetectorRef, elementRef, renderer, missingComponentComponent, hiddenRenderingComponent) {
24
- this.componentFactoryResolver = componentFactoryResolver;
25
- this.differs = differs;
26
- this.componentFactory = componentFactory;
27
- this.changeDetectorRef = changeDetectorRef;
28
- this.elementRef = elementRef;
29
- this.renderer = renderer;
30
- this.missingComponentComponent = missingComponentComponent;
31
- this.hiddenRenderingComponent = hiddenRenderingComponent;
32
- this._componentInstances = [];
33
- this.destroyed = false;
34
- this.parentStyleAttribute = '';
35
- this.isLoading = true;
36
- this.loaded = new EventEmitter();
37
- }
38
- set inputs(value) {
39
- this._inputs = value;
40
- if (!this._differ && value) {
41
- this._differ = this.differs.find(value).create();
42
- }
43
- }
44
- ngOnInit() {
45
- // just to ensure the element exists
46
- const elem = this.elementRef.nativeElement;
47
- if (elem) {
48
- const attributes = elem.attributes;
49
- for (let i = 0; i < attributes.length; i++) {
50
- const attr = attributes.item(i);
51
- if (attr && attr.name.indexOf('_ngcontent') !== -1) {
52
- this.parentStyleAttribute = attr.name;
53
- }
54
- }
55
- }
56
- }
57
- ngOnDestroy() {
58
- this.destroyed = true;
59
- this._componentInstances = [];
60
- }
61
- ngOnChanges(changes) {
62
- if (changes.rendering || changes.renderings) {
63
- this._render();
64
- }
65
- }
66
- ngDoCheck() {
67
- if (!this._differ || !this._inputs || this._componentInstances.length === 0) {
68
- return;
69
- }
70
- const changes = this._differ.diff(this._inputs);
71
- if (!changes) {
72
- return;
73
- }
74
- const updates = {};
75
- changes.forEachRemovedItem((change) => (updates[change.key] = null));
76
- changes.forEachAddedItem((change) => (updates[change.key] = change.currentValue));
77
- changes.forEachChangedItem((change) => (updates[change.key] = change.currentValue));
78
- this._componentInstances.forEach((componentInstance) => this._setComponentInputs(componentInstance, updates));
79
- }
80
- _setComponentInputs(componentInstance, inputs) {
81
- Object.entries(inputs).forEach(([input, inputValue]) => (componentInstance[input] = inputValue));
82
- }
83
- _subscribeComponentOutputs(componentInstance, outputs) {
84
- Object.keys(outputs)
85
- .filter((output) => componentInstance[output] && componentInstance[output] instanceof Observable)
86
- .forEach((output) => componentInstance[output]
87
- .pipe(takeWhile(() => !this.destroyed))
88
- .subscribe(outputs[output]));
89
- }
90
- _render() {
91
- this._componentInstances = [];
92
- this.view.clear();
93
- if (!this.rendering && !this.renderings) {
94
- return;
95
- }
96
- if (!this.name && !this.renderings) {
97
- console.warn('Placeholder name was not specified, and explicit renderings array was not passed. Placeholder requires either name and rendering, or renderings.');
98
- this.isLoading = false;
99
- return;
100
- }
101
- const placeholder = this.renderings || getPlaceholder(this.rendering, this.name || '');
102
- if (!placeholder) {
103
- console.warn(`Placeholder '${this.name}' was not found in the current rendering data`, JSON.stringify(this.rendering, null, 2));
104
- this.isLoading = false;
105
- return;
106
- }
107
- // if the placeholder is empty (contains only raw renderings), then we may need to use the empty template if it's defined
108
- const placeholderIsEmpty = placeholder.every((rendering) => isRawRendering(rendering));
109
- if (this.renderEmptyTemplate && placeholderIsEmpty) {
110
- this.view.createEmbeddedView(this.renderEmptyTemplate.templateRef, {
111
- renderings: placeholder,
112
- });
113
- this.isLoading = false;
114
- }
115
- else {
116
- this.componentFactory
117
- .getComponents(placeholder)
118
- .then((components) => components.forEach((rendering, index) => {
119
- if (this.renderEachTemplate && !isRawRendering(rendering.componentDefinition)) {
120
- this._renderTemplatedComponent(rendering.componentDefinition, index);
121
- }
122
- else {
123
- this._renderEmbeddedComponent(rendering, index);
124
- }
125
- this.isLoading = false;
126
- }))
127
- .then(() => {
128
- this.changeDetectorRef.markForCheck();
129
- this.loaded.emit(this.name);
130
- });
131
- }
132
- }
133
- _renderTemplatedComponent(rendering, index) {
134
- // the render-each template takes care of all component mapping etc
135
- // generally using <sc-render-component> which is about like _renderEmbeddedComponent()
136
- // as a separate component
137
- this.view.createEmbeddedView(this.renderEachTemplate.templateRef, {
138
- rendering,
139
- index,
140
- });
141
- }
142
- _renderEmbeddedComponent(rendering, index) {
143
- if (rendering.componentDefinition.componentName === HIDDEN_RENDERING_NAME) {
144
- rendering.componentImplementation = this.hiddenRenderingComponent;
145
- }
146
- if (!rendering.componentImplementation) {
147
- const componentName = rendering.componentDefinition.componentName;
1
+ /* eslint-disable @angular-eslint/no-conflicting-lifecycle */
2
+ import { ChangeDetectorRef, Component, ComponentFactoryResolver, ContentChild, ElementRef, EventEmitter, Inject, Input, KeyValueDiffers, Output, Renderer2, Type, ViewChild, ViewContainerRef, } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+ import { takeWhile } from 'rxjs/operators';
5
+ import { JssComponentFactoryService, } from '../jss-component-factory.service';
6
+ import { HIDDEN_RENDERING_NAME } from './hidden-rendering.component';
7
+ import { PlaceholderLoadingDirective } from './placeholder-loading.directive';
8
+ import { PLACEHOLDER_HIDDEN_RENDERING_COMPONENT, PLACEHOLDER_MISSING_COMPONENT_COMPONENT, } from './placeholder.token';
9
+ import { RenderEachDirective } from './render-each.directive';
10
+ import { RenderEmptyDirective } from './render-empty.directive';
11
+ import { isRawRendering } from './rendering';
12
+ /**
13
+ * @param {ComponentRendering} rendering
14
+ * @param {string} name
15
+ */
16
+ function getPlaceholder(rendering, name) {
17
+ if (rendering && rendering.placeholders && Object.keys(rendering.placeholders).length > 0) {
18
+ return rendering.placeholders[name];
19
+ }
20
+ return null;
21
+ }
22
+ export class PlaceholderComponent {
23
+ constructor(componentFactoryResolver, differs, componentFactory, changeDetectorRef, elementRef, renderer, missingComponentComponent, hiddenRenderingComponent) {
24
+ this.componentFactoryResolver = componentFactoryResolver;
25
+ this.differs = differs;
26
+ this.componentFactory = componentFactory;
27
+ this.changeDetectorRef = changeDetectorRef;
28
+ this.elementRef = elementRef;
29
+ this.renderer = renderer;
30
+ this.missingComponentComponent = missingComponentComponent;
31
+ this.hiddenRenderingComponent = hiddenRenderingComponent;
32
+ this._componentInstances = [];
33
+ this.destroyed = false;
34
+ this.parentStyleAttribute = '';
35
+ this.isLoading = true;
36
+ this.loaded = new EventEmitter();
37
+ }
38
+ set inputs(value) {
39
+ this._inputs = value;
40
+ if (!this._differ && value) {
41
+ this._differ = this.differs.find(value).create();
42
+ }
43
+ }
44
+ ngOnInit() {
45
+ // just to ensure the element exists
46
+ const elem = this.elementRef.nativeElement;
47
+ if (elem) {
48
+ const attributes = elem.attributes;
49
+ for (let i = 0; i < attributes.length; i++) {
50
+ const attr = attributes.item(i);
51
+ if (attr && attr.name.indexOf('_ngcontent') !== -1) {
52
+ this.parentStyleAttribute = attr.name;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ ngOnDestroy() {
58
+ this.destroyed = true;
59
+ this._componentInstances = [];
60
+ }
61
+ ngOnChanges(changes) {
62
+ if (changes.rendering || changes.renderings) {
63
+ this._render();
64
+ }
65
+ }
66
+ ngDoCheck() {
67
+ if (!this._differ || !this._inputs || this._componentInstances.length === 0) {
68
+ return;
69
+ }
70
+ const changes = this._differ.diff(this._inputs);
71
+ if (!changes) {
72
+ return;
73
+ }
74
+ const updates = {};
75
+ changes.forEachRemovedItem((change) => (updates[change.key] = null));
76
+ changes.forEachAddedItem((change) => (updates[change.key] = change.currentValue));
77
+ changes.forEachChangedItem((change) => (updates[change.key] = change.currentValue));
78
+ this._componentInstances.forEach((componentInstance) => this._setComponentInputs(componentInstance, updates));
79
+ }
80
+ _setComponentInputs(componentInstance, inputs) {
81
+ Object.entries(inputs).forEach(([input, inputValue]) => (componentInstance[input] = inputValue));
82
+ }
83
+ _subscribeComponentOutputs(componentInstance, outputs) {
84
+ Object.keys(outputs)
85
+ .filter((output) => componentInstance[output] && componentInstance[output] instanceof Observable)
86
+ .forEach((output) => componentInstance[output]
87
+ .pipe(takeWhile(() => !this.destroyed))
88
+ .subscribe(outputs[output]));
89
+ }
90
+ _render() {
91
+ this._componentInstances = [];
92
+ this.view.clear();
93
+ if (!this.rendering && !this.renderings) {
94
+ return;
95
+ }
96
+ if (!this.name && !this.renderings) {
97
+ console.warn('Placeholder name was not specified, and explicit renderings array was not passed. Placeholder requires either name and rendering, or renderings.');
98
+ this.isLoading = false;
99
+ return;
100
+ }
101
+ const placeholder = this.renderings || getPlaceholder(this.rendering, this.name || '');
102
+ if (!placeholder) {
103
+ console.warn(`Placeholder '${this.name}' was not found in the current rendering data`, JSON.stringify(this.rendering, null, 2));
104
+ this.isLoading = false;
105
+ return;
106
+ }
107
+ // if the placeholder is empty (contains only raw renderings), then we may need to use the empty template if it's defined
108
+ const placeholderIsEmpty = placeholder.every((rendering) => isRawRendering(rendering));
109
+ if (this.renderEmptyTemplate && placeholderIsEmpty) {
110
+ this.view.createEmbeddedView(this.renderEmptyTemplate.templateRef, {
111
+ renderings: placeholder,
112
+ });
113
+ this.isLoading = false;
114
+ }
115
+ else {
116
+ this.componentFactory
117
+ .getComponents(placeholder)
118
+ .then((components) => components.forEach((rendering, index) => {
119
+ if (this.renderEachTemplate && !isRawRendering(rendering.componentDefinition)) {
120
+ this._renderTemplatedComponent(rendering.componentDefinition, index);
121
+ }
122
+ else {
123
+ this._renderEmbeddedComponent(rendering, index);
124
+ }
125
+ this.isLoading = false;
126
+ }))
127
+ .then(() => {
128
+ this.changeDetectorRef.markForCheck();
129
+ this.loaded.emit(this.name);
130
+ });
131
+ }
132
+ }
133
+ _renderTemplatedComponent(rendering, index) {
134
+ // the render-each template takes care of all component mapping etc
135
+ // generally using <sc-render-component> which is about like _renderEmbeddedComponent()
136
+ // as a separate component
137
+ this.view.createEmbeddedView(this.renderEachTemplate.templateRef, {
138
+ rendering,
139
+ index,
140
+ });
141
+ }
142
+ _renderEmbeddedComponent(rendering, index) {
143
+ if (rendering.componentDefinition.componentName === HIDDEN_RENDERING_NAME) {
144
+ rendering.componentImplementation = this.hiddenRenderingComponent;
145
+ }
146
+ if (!rendering.componentImplementation) {
147
+ const componentName = rendering.componentDefinition.componentName;
148
148
  console.error(`Placeholder ${this.name} contains unknown component ${componentName}.`, `Ensure component is mapped, like:
149
149
  JssModule.withComponents([
150
150
  { name: '${componentName}', type: ${componentName}Component }
151
- ])`);
152
- rendering.componentImplementation = this.missingComponentComponent;
153
- }
154
- const componentFactory = rendering.componentFactory ||
155
- this.componentFactoryResolver.resolveComponentFactory(rendering.componentImplementation);
156
- // apply the parent style attribute _ngcontent
157
- // work-around for https://github.com/angular/angular/issues/12215
158
- const createdComponentRef = this.view.createComponent(componentFactory, index);
159
- if (this.parentStyleAttribute) {
160
- this.renderer.setAttribute(createdComponentRef.location.nativeElement, this.parentStyleAttribute, '');
161
- }
162
- const componentInstance = createdComponentRef.instance;
163
- componentInstance.rendering = rendering.componentDefinition;
164
- if (this._inputs) {
165
- this._setComponentInputs(componentInstance, this._inputs);
166
- }
167
- if (this.outputs) {
168
- this._subscribeComponentOutputs(componentInstance, this.outputs);
169
- }
170
- this._componentInstances.push(componentInstance);
171
- }
172
- }
173
- PlaceholderComponent.decorators = [
174
- { type: Component, args: [{
175
- selector: 'sc-placeholder,[sc-placeholder]',
151
+ ])`);
152
+ rendering.componentImplementation = this.missingComponentComponent;
153
+ }
154
+ const componentFactory = rendering.componentFactory ||
155
+ this.componentFactoryResolver.resolveComponentFactory(rendering.componentImplementation);
156
+ // apply the parent style attribute _ngcontent
157
+ // work-around for https://github.com/angular/angular/issues/12215
158
+ const createdComponentRef = this.view.createComponent(componentFactory, index);
159
+ if (this.parentStyleAttribute) {
160
+ this.renderer.setAttribute(createdComponentRef.location.nativeElement, this.parentStyleAttribute, '');
161
+ }
162
+ const componentInstance = createdComponentRef.instance;
163
+ componentInstance.rendering = rendering.componentDefinition;
164
+ if (this._inputs) {
165
+ this._setComponentInputs(componentInstance, this._inputs);
166
+ }
167
+ if (this.outputs) {
168
+ this._subscribeComponentOutputs(componentInstance, this.outputs);
169
+ }
170
+ this._componentInstances.push(componentInstance);
171
+ }
172
+ }
173
+ PlaceholderComponent.decorators = [
174
+ { type: Component, args: [{
175
+ selector: 'sc-placeholder,[sc-placeholder]',
176
176
  template: `
177
177
  <ng-template
178
178
  *ngIf="isLoading"
179
179
  [ngTemplateOutlet]="placeholderLoading?.templateRef"
180
180
  ></ng-template>
181
181
  <ng-template #view></ng-template>
182
- `
183
- },] }
184
- ];
185
- PlaceholderComponent.ctorParameters = () => [
186
- { type: ComponentFactoryResolver },
187
- { type: KeyValueDiffers },
188
- { type: JssComponentFactoryService },
189
- { type: ChangeDetectorRef },
190
- { type: ElementRef },
191
- { type: Renderer2 },
192
- { type: Type, decorators: [{ type: Inject, args: [PLACEHOLDER_MISSING_COMPONENT_COMPONENT,] }] },
193
- { type: Type, decorators: [{ type: Inject, args: [PLACEHOLDER_HIDDEN_RENDERING_COMPONENT,] }] }
194
- ];
195
- PlaceholderComponent.propDecorators = {
196
- name: [{ type: Input }],
197
- rendering: [{ type: Input }],
198
- renderings: [{ type: Input }],
199
- outputs: [{ type: Input }],
200
- loaded: [{ type: Output }],
201
- view: [{ type: ViewChild, args: ['view', { read: ViewContainerRef, static: true },] }],
202
- renderEachTemplate: [{ type: ContentChild, args: [RenderEachDirective, { static: true },] }],
203
- renderEmptyTemplate: [{ type: ContentChild, args: [RenderEmptyDirective, { static: true },] }],
204
- placeholderLoading: [{ type: ContentChild, args: [PlaceholderLoadingDirective, { static: true },] }],
205
- inputs: [{ type: Input }]
206
- };
182
+ `
183
+ },] }
184
+ ];
185
+ PlaceholderComponent.ctorParameters = () => [
186
+ { type: ComponentFactoryResolver },
187
+ { type: KeyValueDiffers },
188
+ { type: JssComponentFactoryService },
189
+ { type: ChangeDetectorRef },
190
+ { type: ElementRef },
191
+ { type: Renderer2 },
192
+ { type: Type, decorators: [{ type: Inject, args: [PLACEHOLDER_MISSING_COMPONENT_COMPONENT,] }] },
193
+ { type: Type, decorators: [{ type: Inject, args: [PLACEHOLDER_HIDDEN_RENDERING_COMPONENT,] }] }
194
+ ];
195
+ PlaceholderComponent.propDecorators = {
196
+ name: [{ type: Input }],
197
+ rendering: [{ type: Input }],
198
+ renderings: [{ type: Input }],
199
+ outputs: [{ type: Input }],
200
+ loaded: [{ type: Output }],
201
+ view: [{ type: ViewChild, args: ['view', { read: ViewContainerRef, static: true },] }],
202
+ renderEachTemplate: [{ type: ContentChild, args: [RenderEachDirective, { static: true },] }],
203
+ renderEmptyTemplate: [{ type: ContentChild, args: [RenderEmptyDirective, { static: true },] }],
204
+ placeholderLoading: [{ type: ContentChild, args: [PlaceholderLoadingDirective, { static: true },] }],
205
+ inputs: [{ type: Input }]
206
+ };
207
207
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGxhY2Vob2xkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFFVCxJQUFJLEVBQ0osU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsMEJBQTBCLEdBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUNMLHNDQUFzQyxFQUN0Qyx1Q0FBdUMsR0FDeEMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTdDOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUFDLFNBQTZCLEVBQUUsSUFBWTtJQUNqRSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsWUFBWSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFD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RTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzNEO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbEU7UUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDbkQsQ0FBQzs7O1lBM09GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUNBQWlDO2dCQUMzQyxRQUFRLEVBQUU7Ozs7OztHQU1UO2FBQ0Y7OztZQXhEQyx3QkFBd0I7WUFReEIsZUFBZTtZQWdCZiwwQkFBMEI7WUExQjFCLGlCQUFpQjtZQUtqQixVQUFVO1lBVVYsU0FBUztZQUVULElBQUksdUJBK0VELE1BQU0sU0FBQyx1Q0FBdUM7WUEvRWpELElBQUksdUJBaUZELE1BQU0sU0FBQyxzQ0FBc0M7OzttQkEvQi9DLEtBQUs7d0JBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7cUJBRUwsTUFBTTttQkFHTixTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7aUNBQzFELFlBQVksU0FBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7a0NBQ2xELFlBQVksU0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7aUNBQ25ELFlBQVksU0FBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7cUJBRzFELEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgS2V5VmFsdWVEaWZmZXIsXHJcbiAgS2V5VmFsdWVEaWZmZXJzLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUeXBlLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJpbmcsIEh0bWxFbGVtZW50UmVuZGVyaW5nIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc3VsdCxcclxuICBKc3NDb21wb25lbnRGYWN0b3J5U2VydmljZSxcclxufSBmcm9tICcuLi9qc3MtY29tcG9uZW50LWZhY3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEhJRERFTl9SRU5ERVJJTkdfTkFNRSB9IGZyb20gJy4vaGlkZGVuLXJlbmRlcmluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQbGFjZWhvbGRlckxvYWRpbmdEaXJlY3RpdmUgfSBmcm9tICcuL3BsYWNlaG9sZGVyLWxvYWRpbmcuZGlyZWN0aXZlJztcclxuaW1wb3J0IHtcclxuICBQTEFDRUhPTERFUl9ISURERU5fUkVOREVSSU5HX0NPTVBPTkVOVCxcclxuICBQTEFDRUhPTERFUl9NSVNTSU5HX0NPTVBPTkVOVF9DT01QT05FTlQsXHJcbn0gZnJvbSAnLi9wbGFjZWhvbGRlci50b2tlbic7XHJcbmltcG9ydCB7IFJlbmRlckVhY2hEaXJlY3RpdmUgfSBmcm9tICcuL3JlbmRlci1lYWNoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJlbmRlckVtcHR5RGlyZWN0aXZlIH0gZnJvbSAnLi9yZW5kZXItZW1wdHkuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgaXNSYXdSZW5kZXJpbmcgfSBmcm9tICcuL3JlbmRlcmluZyc7XHJcblxyXG4vKipcclxuICogQHBhcmFtIHtDb21wb25lbnRSZW5kZXJpbmd9IHJlbmRlcmluZ1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0UGxhY2Vob2xkZXIocmVuZGVyaW5nOiBDb21wb25lbnRSZW5kZXJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gIGlmIChyZW5kZXJpbmcgJiYgcmVuZGVyaW5nLnBsYWNlaG9sZGVycyAmJiBPYmplY3Qua2V5cyhyZW5kZXJpbmcucGxhY2Vob2xkZXJzKS5sZW5ndGggPiAwKSB7XHJcbiAgICByZXR1cm4gcmVuZGVyaW5nLnBsYWNlaG9sZGVyc1tuYW1lXTtcclxuICB9XHJcbiAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2MtcGxhY2Vob2xkZXIsW3NjLXBsYWNlaG9sZGVyXScsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAqbmdJZj1cImlzTG9hZGluZ1wiXHJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInBsYWNlaG9sZGVyTG9hZGluZz8udGVtcGxhdGVSZWZcIlxyXG4gICAgPjwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgI3ZpZXc+PC9uZy10ZW1wbGF0ZT5cclxuICBgLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGxhY2Vob2xkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9pbnB1dHM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xyXG4gIHByaXZhdGUgX2RpZmZlcjogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCB1bmtub3duPjtcclxuICBwcml2YXRlIF9jb21wb25lbnRJbnN0YW5jZXM6IHsgW3Byb3A6IHN0cmluZ106IHVua25vd24gfVtdID0gW107XHJcbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIHBhcmVudFN0eWxlQXR0cmlidXRlID0gJyc7XHJcbiAgcHVibGljIGlzTG9hZGluZyA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIG5hbWU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcmVuZGVyaW5nOiBDb21wb25lbnRSZW5kZXJpbmc7XHJcbiAgQElucHV0KCkgcmVuZGVyaW5ncz86IEFycmF5PENvbXBvbmVudFJlbmRlcmluZyB8IEh0bWxFbGVtZW50UmVuZGVyaW5nPjtcclxuICBASW5wdXQoKSBvdXRwdXRzOiB7IFtrOiBzdHJpbmddOiAoZXZlbnRUeXBlOiB1bmtub3duKSA9PiB2b2lkIH07XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xyXG5cclxuICBAVmlld0NoaWxkKCd2aWV3JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSB2aWV3OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBDb250ZW50Q2hpbGQoUmVuZGVyRWFjaERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcmVuZGVyRWFjaFRlbXBsYXRlOiBSZW5kZXJFYWNoRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoUmVuZGVyRW1wdHlEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHJlbmRlckVtcHR5VGVtcGxhdGU6IFJlbmRlckVtcHR5RGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoUGxhY2Vob2xkZXJMb2FkaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHBsYWNlaG9sZGVyTG9hZGluZz86IFBsYWNlaG9sZGVyTG9hZGluZ0RpcmVjdGl2ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaW5wdXRzKHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSkge1xyXG4gICAgdGhpcy5faW5wdXRzID0gdmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuX2RpZmZlciAmJiB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLmRpZmZlcnMuZmluZCh2YWx1ZSkuY3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeTogSnNzQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIEBJbmplY3QoUExBQ0VIT0xERVJfTUlTU0lOR19DT01QT05FTlRfQ09NUE9ORU5UKVxyXG4gICAgcHJpdmF0ZSBtaXNzaW5nQ29tcG9uZW50Q29tcG9uZW50OiBUeXBlPHVua25vd24+LFxyXG4gICAgQEluamVjdChQTEFDRUhPTERFUl9ISURERU5fUkVOREVSSU5HX0NPTVBPTkVOVClcclxuICAgIHByaXZhdGUgaGlkZGVuUmVuZGVyaW5nQ29tcG9uZW50OiBUeXBlPHVua25vd24+XHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIGp1c3QgdG8gZW5zdXJlIHRoZSBlbGVtZW50IGV4aXN0c1xyXG4gICAgY29uc3QgZWxlbSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmIChlbGVtKSB7XHJcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IE5hbWVkTm9kZU1hcCA9IGVsZW0uYXR0cmlidXRlcztcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYXR0cjogQXR0ciB8IG51bGwgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7XHJcbiAgICAgICAgaWYgKGF0dHIgJiYgYXR0ci5uYW1lLmluZGV4T2YoJ19uZ2NvbnRlbnQnKSAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUgPSBhdHRyLm5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIHRoaXMuX2NvbXBvbmVudEluc3RhbmNlcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMucmVuZGVyaW5nIHx8IGNoYW5nZXMucmVuZGVyaW5ncykge1xyXG4gICAgICB0aGlzLl9yZW5kZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpIHtcclxuICAgIGlmICghdGhpcy5fZGlmZmVyIHx8ICF0aGlzLl9pbnB1dHMgfHwgdGhpcy5fY29tcG9uZW50SW5zdGFuY2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX2lucHV0cyk7XHJcbiAgICBpZiAoIWNoYW5nZXMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdXBkYXRlczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fTtcclxuICAgIGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChjaGFuZ2UpID0+ICh1cGRhdGVzW2NoYW5nZS5rZXldID0gbnVsbCkpO1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChjaGFuZ2UpID0+ICh1cGRhdGVzW2NoYW5nZS5rZXldID0gY2hhbmdlLmN1cnJlbnRWYWx1ZSkpO1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoQ2hhbmdlZEl0ZW0oKGNoYW5nZSkgPT4gKHVwZGF0ZXNbY2hhbmdlLmtleV0gPSBjaGFuZ2UuY3VycmVudFZhbHVlKSk7XHJcbiAgICB0aGlzLl9jb21wb25lbnRJbnN0YW5jZXMuZm9yRWFjaCgoY29tcG9uZW50SW5zdGFuY2UpID0+XHJcbiAgICAgIHRoaXMuX3NldENvbXBvbmVudElucHV0cyhjb21wb25lbnRJbnN0YW5jZSwgdXBkYXRlcylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRDb21wb25lbnRJbnB1dHMoXHJcbiAgICBjb21wb25lbnRJbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sXHJcbiAgICBpbnB1dHM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9XHJcbiAgKSB7XHJcbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goXHJcbiAgICAgIChbaW5wdXQsIGlucHV0VmFsdWVdKSA9PiAoY29tcG9uZW50SW5zdGFuY2VbaW5wdXRdID0gaW5wdXRWYWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdWJzY3JpYmVDb21wb25lbnRPdXRwdXRzKFxyXG4gICAgY29tcG9uZW50SW5zdGFuY2U6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxyXG4gICAgb3V0cHV0czogeyBbazogc3RyaW5nXTogKGV2ZW50VHlwZTogdW5rbm93bikgPT4gdm9pZCB9XHJcbiAgKSB7XHJcbiAgICBPYmplY3Qua2V5cyhvdXRwdXRzKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvdXRwdXQpID0+IGNvbXBvbmVudEluc3RhbmNlW291dHB1dF0gJiYgY29tcG9uZW50SW5zdGFuY2Vbb3V0cHV0XSBpbnN0YW5jZW9mIE9ic2VydmFibGVcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgob3V0cHV0KSA9PlxyXG4gICAgICAgIChjb21wb25lbnRJbnN0YW5jZVtvdXRwdXRdIGFzIE9ic2VydmFibGU8dW5rbm93bj4pXHJcbiAgICAgICAgICAucGlwZSh0YWtlV2hpbGUoKCkgPT4gIXRoaXMuZGVzdHJveWVkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUob3V0cHV0c1tvdXRwdXRdKVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyKCkge1xyXG4gICAgdGhpcy5fY29tcG9uZW50SW5zdGFuY2VzID0gW107XHJcbiAgICB0aGlzLnZpZXcuY2xlYXIoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMucmVuZGVyaW5nICYmICF0aGlzLnJlbmRlcmluZ3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5uYW1lICYmICF0aGlzLnJlbmRlcmluZ3MpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgICdQbGFjZWhvbGRlciBuYW1lIHdhcyBub3Qgc3BlY2lmaWVkLCBhbmQgZXhwbGljaXQgcmVuZGVyaW5ncyBhcnJheSB3YXMgbm90IHBhc3NlZC4gUGxhY2Vob2xkZXIgcmVxdWlyZXMgZWl0aGVyIG5hbWUgYW5kIHJlbmRlcmluZywgb3IgcmVuZGVyaW5ncy4nXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IHRoaXMucmVuZGVyaW5ncyB8fCBnZXRQbGFjZWhvbGRlcih0aGlzLnJlbmRlcmluZywgdGhpcy5uYW1lIHx8ICcnKTtcclxuXHJcbiAgICBpZiAoIXBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgUGxhY2Vob2xkZXIgJyR7dGhpcy5uYW1lfScgd2FzIG5vdCBmb3VuZCBpbiB0aGUgY3VycmVudCByZW5kZXJpbmcgZGF0YWAsXHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5yZW5kZXJpbmcsIG51bGwsIDIpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiB0aGUgcGxhY2Vob2xkZXIgaXMgZW1wdHkgKGNvbnRhaW5zIG9ubHkgcmF3IHJlbmRlcmluZ3MpLCB0aGVuIHdlIG1heSBuZWVkIHRvIHVzZSB0aGUgZW1wdHkgdGVtcGxhdGUgaWYgaXQncyBkZWZpbmVkXHJcbiAgICBjb25zdCBwbGFjZWhvbGRlcklzRW1wdHkgPSBwbGFjZWhvbGRlci5ldmVyeShcclxuICAgICAgKHJlbmRlcmluZzogQ29tcG9uZW50UmVuZGVyaW5nIHwgSHRtbEVsZW1lbnRSZW5kZXJpbmcpID0+IGlzUmF3UmVuZGVyaW5nKHJlbmRlcmluZylcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVuZGVyRW1wdHlUZW1wbGF0ZSAmJiBwbGFjZWhvbGRlcklzRW1wdHkpIHtcclxuICAgICAgdGhpcy52aWV3LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnJlbmRlckVtcHR5VGVtcGxhdGUudGVtcGxhdGVSZWYsIHtcclxuICAgICAgICByZW5kZXJpbmdzOiBwbGFjZWhvbGRlcixcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlcclxuICAgICAgICAuZ2V0Q29tcG9uZW50cyhwbGFjZWhvbGRlcilcclxuICAgICAgICAudGhlbigoY29tcG9uZW50cykgPT5cclxuICAgICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaCgocmVuZGVyaW5nLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5yZW5kZXJFYWNoVGVtcGxhdGUgJiYgIWlzUmF3UmVuZGVyaW5nKHJlbmRlcmluZy5jb21wb25lbnREZWZpbml0aW9uKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlbmRlclRlbXBsYXRlZENvbXBvbmVudChyZW5kZXJpbmcuY29tcG9uZW50RGVmaW5pdGlvbiwgaW5kZXgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3JlbmRlckVtYmVkZGVkQ29tcG9uZW50KHJlbmRlcmluZywgaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkZWQuZW1pdCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyVGVtcGxhdGVkQ29tcG9uZW50KFxyXG4gICAgcmVuZGVyaW5nOiBDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZyxcclxuICAgIGluZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIC8vIHRoZSByZW5kZXItZWFjaCB0ZW1wbGF0ZSB0YWtlcyBjYXJlIG9mIGFsbCBjb21wb25lbnQgbWFwcGluZyBldGNcclxuICAgIC8vIGdlbmVyYWxseSB1c2luZyA8c2MtcmVuZGVyLWNvbXBvbmVudD4gd2hpY2ggaXMgYWJvdXQgbGlrZSBfcmVuZGVyRW1iZWRkZWRDb21wb25lbnQoKVxyXG4gICAgLy8gYXMgYSBzZXBhcmF0ZSBjb21wb25lbnRcclxuICAgIHRoaXMudmlldy5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5yZW5kZXJFYWNoVGVtcGxhdGUudGVtcGxhdGVSZWYsIHtcclxuICAgICAgcmVuZGVyaW5nLFxyXG4gICAgICBpbmRleCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVuZGVyRW1iZWRkZWRDb21wb25lbnQocmVuZGVyaW5nOiBDb21wb25lbnRGYWN0b3J5UmVzdWx0LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChyZW5kZXJpbmcuY29tcG9uZW50RGVmaW5pdGlvbiBhcyBDb21wb25lbnRSZW5kZXJpbmcpLmNvbXBvbmVudE5hbWUgPT09IEhJRERFTl9SRU5ERVJJTkdfTkFNRVxyXG4gICAgKSB7XHJcbiAgICAgIHJlbmRlcmluZy5jb21wb25lbnRJbXBsZW1lbnRhdGlvbiA9IHRoaXMuaGlkZGVuUmVuZGVyaW5nQ29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcmVuZGVyaW5nLmNvbXBvbmVudEltcGxlbWVudGF0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAocmVuZGVyaW5nLmNvbXBvbmVudERlZmluaXRpb24gYXMgQ29tcG9uZW50UmVuZGVyaW5nKS5jb21wb25lbnROYW1lO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgIGBQbGFjZWhvbGRlciAke3RoaXMubmFtZX0gY29udGFpbnMgdW5rbm93biBjb21wb25lbnQgJHtjb21wb25lbnROYW1lfS5gLFxyXG4gICAgICAgIGBFbnN1cmUgY29tcG9uZW50IGlzIG1hcHBlZCwgbGlrZTpcclxuICAgICAgICBKc3NNb2R1bGUud2l0aENvbXBvbmVudHMoW1xyXG4gICAgICAgICAgeyBuYW1lOiAnJHtjb21wb25lbnROYW1lfScsIHR5cGU6ICR7Y29tcG9uZW50TmFtZX1Db21wb25lbnQgfVxyXG4gICAgICAgIF0pYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmVuZGVyaW5nLmNvbXBvbmVudEltcGxlbWVudGF0aW9uID0gdGhpcy5taXNzaW5nQ29tcG9uZW50Q29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxyXG4gICAgICByZW5kZXJpbmcuY29tcG9uZW50RmFjdG9yeSB8fFxyXG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShyZW5kZXJpbmcuY29tcG9uZW50SW1wbGVtZW50YXRpb24pO1xyXG5cclxuICAgIC8vIGFwcGx5IHRoZSBwYXJlbnQgc3R5bGUgYXR0cmlidXRlIF9uZ2NvbnRlbnRcclxuICAgIC8vIHdvcmstYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMjIxNVxyXG4gICAgY29uc3QgY3JlYXRlZENvbXBvbmVudFJlZiA9IHRoaXMudmlldy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSwgaW5kZXgpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgY3JlYXRlZENvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUsXHJcbiAgICAgICAgJydcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZWRDb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5yZW5kZXJpbmcgPSByZW5kZXJpbmcuY29tcG9uZW50RGVmaW5pdGlvbjtcclxuICAgIGlmICh0aGlzLl9pbnB1dHMpIHtcclxuICAgICAgdGhpcy5fc2V0Q29tcG9uZW50SW5wdXRzKGNvbXBvbmVudEluc3RhbmNlLCB0aGlzLl9pbnB1dHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3V0cHV0cykge1xyXG4gICAgICB0aGlzLl9zdWJzY3JpYmVDb21wb25lbnRPdXRwdXRzKGNvbXBvbmVudEluc3RhbmNlLCB0aGlzLm91dHB1dHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY29tcG9uZW50SW5zdGFuY2VzLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,22 +1,22 @@
1
- import { InjectionToken } from '@angular/core';
2
- /** Registers a statically loaded component */
3
- export class ComponentNameAndType {
4
- }
5
- /**
6
- * @param {unknown} object
7
- */
8
- export function instanceOfComponentNameAndType(object) {
9
- return typeof object === 'object' && object !== null && 'type' in object;
10
- }
11
- /**
12
- * @param {unknown} object
13
- */
14
- export function instanceOfComponentNameAndModule(object) {
15
- return typeof object === 'object' && object !== null && 'module' in object;
16
- }
17
- export const PLACEHOLDER_COMPONENTS = new InjectionToken('Sc.placeholder.components');
18
- export const PLACEHOLDER_LAZY_COMPONENTS = new InjectionToken('Sc.placeholder.lazyComponents');
19
- export const PLACEHOLDER_MISSING_COMPONENT_COMPONENT = new InjectionToken('Sc.placeholder.missingComponentComponent');
20
- export const PLACEHOLDER_HIDDEN_RENDERING_COMPONENT = new InjectionToken('Sc.placeholder.hiddenRenderingComponent');
21
- export const DYNAMIC_COMPONENT = new InjectionToken('Sc.placeholder.dynamicComponent');
1
+ import { InjectionToken } from '@angular/core';
2
+ /** Registers a statically loaded component */
3
+ export class ComponentNameAndType {
4
+ }
5
+ /**
6
+ * @param {unknown} object
7
+ */
8
+ export function instanceOfComponentNameAndType(object) {
9
+ return typeof object === 'object' && object !== null && 'type' in object;
10
+ }
11
+ /**
12
+ * @param {unknown} object
13
+ */
14
+ export function instanceOfComponentNameAndModule(object) {
15
+ return typeof object === 'object' && object !== null && 'module' in object;
16
+ }
17
+ export const PLACEHOLDER_COMPONENTS = new InjectionToken('Sc.placeholder.components');
18
+ export const PLACEHOLDER_LAZY_COMPONENTS = new InjectionToken('Sc.placeholder.lazyComponents');
19
+ export const PLACEHOLDER_MISSING_COMPONENT_COMPONENT = new InjectionToken('Sc.placeholder.missingComponentComponent');
20
+ export const PLACEHOLDER_HIDDEN_RENDERING_COMPONENT = new InjectionToken('Sc.placeholder.hiddenRenderingComponent');
21
+ export const DYNAMIC_COMPONENT = new InjectionToken('Sc.placeholder.dynamicComponent');
22
22
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wbGFjZWhvbGRlci50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBRXJELDhDQUE4QztBQUM5QyxNQUFNLE9BQU8sb0JBQW9CO0NBR2hDO0FBYUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQUMsTUFBZTtJQUM1RCxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFDM0UsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdDQUFnQyxDQUM5QyxNQUFlO0lBRWYsT0FBTyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDO0FBQzdFLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsMkJBQTJCLENBQzVCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FDM0QsK0JBQStCLENBQ2hDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxJQUFJLGNBQWMsQ0FDdkUsMENBQTBDLENBQzNDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxzQ0FBc0MsR0FBRyxJQUFJLGNBQWMsQ0FDdEUseUNBQXlDLENBQzFDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FDakQsaUNBQWlDLENBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqIFJlZ2lzdGVycyBhIHN0YXRpY2FsbHkgbG9hZGVkIGNvbXBvbmVudCAqL1xyXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50TmFtZUFuZFR5cGUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBUeXBlPHVua25vd24+O1xyXG59XHJcblxyXG4vKiogUmVnaXN0ZXJzIGEgbGF6aWx5IGxvYWRlZCBjb21wb25lbnQgYnkgbmFtZSBhbmQgbW9kdWxlIHRvIGxhenkgbG9hZCB3aGVuIGl0J3MgbmVlZGVkICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50TmFtZUFuZE1vZHVsZSB7XHJcbiAgLyoqIE5hbWUgb2YgdGhlIGNvbXBvbmVudCAqL1xyXG4gIHBhdGg6IHN0cmluZztcclxuICAvKipcclxuICAgKiBEeW5hbWljIGltcG9ydCBvZiB0aGUgY29tcG9uZW50LFxyXG4gICAqIGUuZy4gKCkgPT4gaW1wb3J0KCcuL3BhdGgvdG8vbGF6eWxvYWRlZGNvbXBvbmVudC5tb2R1bGUnKS50aGVuKG0gPT4gbS5MYXp5TG9hZGVkQ29tcG9uZW50TW9kdWxlRXhwb3J0TmFtZSlcclxuICAgKi9cclxuICBsb2FkQ2hpbGRyZW46ICgpID0+IFByb21pc2U8VHlwZTx1bmtub3duPj47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge3Vua25vd259IG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlT2ZDb21wb25lbnROYW1lQW5kVHlwZShvYmplY3Q6IHVua25vd24pOiBvYmplY3QgaXMgQ29tcG9uZW50TmFtZUFuZFR5cGUge1xyXG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgJ3R5cGUnIGluIG9iamVjdDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7dW5rbm93bn0gb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFuY2VPZkNvbXBvbmVudE5hbWVBbmRNb2R1bGUoXHJcbiAgb2JqZWN0OiB1bmtub3duXHJcbik6IG9iamVjdCBpcyBDb21wb25lbnROYW1lQW5kTW9kdWxlIHtcclxuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmICdtb2R1bGUnIGluIG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFBMQUNFSE9MREVSX0NPTVBPTkVOVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50TmFtZUFuZFR5cGVbXT4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLmNvbXBvbmVudHMnXHJcbik7XHJcbmV4cG9ydCBjb25zdCBQTEFDRUhPTERFUl9MQVpZX0NPTVBPTkVOVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50TmFtZUFuZFR5cGVbXT4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLmxhenlDb21wb25lbnRzJ1xyXG4pO1xyXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfTUlTU0lOR19DT01QT05FTlRfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8dW5rbm93bj4+KFxyXG4gICdTYy5wbGFjZWhvbGRlci5taXNzaW5nQ29tcG9uZW50Q29tcG9uZW50J1xyXG4pO1xyXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfSElEREVOX1JFTkRFUklOR19DT01QT05FTlQgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHlwZTx1bmtub3duPj4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLmhpZGRlblJlbmRlcmluZ0NvbXBvbmVudCdcclxuKTtcclxuZXhwb3J0IGNvbnN0IERZTkFNSUNfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8dW5rbm93bj4gfCB7IFtzOiBzdHJpbmddOiB1bmtub3duIH0+KFxyXG4gICdTYy5wbGFjZWhvbGRlci5keW5hbWljQ29tcG9uZW50J1xyXG4pO1xyXG4iXX0=
@@ -1,37 +1,37 @@
1
- import { Component, ElementRef, Input, Renderer2 } from '@angular/core';
2
- export class RawComponent {
3
- constructor(renderer, elementRef) {
4
- this.renderer = renderer;
5
- this.elementRef = elementRef;
6
- }
7
- ngOnInit() {
8
- const el = this.renderer.createElement(this.rendering.name);
9
- const contents = this.renderer.createText(this.rendering.contents || '');
10
- const attributes = this.rendering.attributes;
11
- for (const attr in attributes) {
12
- // eslint-disable-next-line no-prototype-builtins
13
- if (attributes.hasOwnProperty(attr)) {
14
- const value = attributes[attr];
15
- this.renderer.setAttribute(el, attr, value || '');
16
- }
17
- }
18
- this.renderer.appendChild(el, contents);
19
- const parentNode = this.renderer.parentNode(this.elementRef.nativeElement);
20
- this.renderer.insertBefore(parentNode, el, this.elementRef.nativeElement);
21
- parentNode.removeChild(this.elementRef.nativeElement);
22
- }
23
- }
24
- RawComponent.decorators = [
25
- { type: Component, args: [{
26
- selector: 'sc-raw',
27
- template: ''
28
- },] }
29
- ];
30
- RawComponent.ctorParameters = () => [
31
- { type: Renderer2 },
32
- { type: ElementRef }
33
- ];
34
- RawComponent.propDecorators = {
35
- rendering: [{ type: Input }]
36
- };
1
+ import { Component, ElementRef, Input, Renderer2 } from '@angular/core';
2
+ export class RawComponent {
3
+ constructor(renderer, elementRef) {
4
+ this.renderer = renderer;
5
+ this.elementRef = elementRef;
6
+ }
7
+ ngOnInit() {
8
+ const el = this.renderer.createElement(this.rendering.name);
9
+ const contents = this.renderer.createText(this.rendering.contents || '');
10
+ const attributes = this.rendering.attributes;
11
+ for (const attr in attributes) {
12
+ // eslint-disable-next-line no-prototype-builtins
13
+ if (attributes.hasOwnProperty(attr)) {
14
+ const value = attributes[attr];
15
+ this.renderer.setAttribute(el, attr, value || '');
16
+ }
17
+ }
18
+ this.renderer.appendChild(el, contents);
19
+ const parentNode = this.renderer.parentNode(this.elementRef.nativeElement);
20
+ this.renderer.insertBefore(parentNode, el, this.elementRef.nativeElement);
21
+ parentNode.removeChild(this.elementRef.nativeElement);
22
+ }
23
+ }
24
+ RawComponent.decorators = [
25
+ { type: Component, args: [{
26
+ selector: 'sc-raw',
27
+ template: ''
28
+ },] }
29
+ ];
30
+ RawComponent.ctorParameters = () => [
31
+ { type: Renderer2 },
32
+ { type: ElementRef }
33
+ ];
34
+ RawComponent.propDecorators = {
35
+ rendering: [{ type: Input }]
36
+ };
37
37
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Jhdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9oRixNQUFNLE9BQU8sWUFBWTtJQUd2QixZQUFvQixRQUFtQixFQUFVLFVBQXNCO1FBQW5ELGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQUUzRSxRQUFRO1FBQ04sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUM3QixpREFBaUQ7WUFDakQsSUFBSSxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ25EO1NBQ0Y7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7OztZQXpCRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRSxFQUFFO2FBQ2I7OztZQU44QyxTQUFTO1lBQXBDLFVBQVU7Ozt3QkFRM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0bWxFbGVtZW50UmVuZGVyaW5nIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MvbGF5b3V0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2MtcmF3JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHJlbmRlcmluZzogSHRtbEVsZW1lbnRSZW5kZXJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KHRoaXMucmVuZGVyaW5nLm5hbWUpO1xyXG4gICAgY29uc3QgY29udGVudHMgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQodGhpcy5yZW5kZXJpbmcuY29udGVudHMgfHwgJycpO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMucmVuZGVyaW5nLmF0dHJpYnV0ZXM7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gYXR0cmlidXRlcykge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXHJcbiAgICAgIGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGF0dHIpKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJdO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBhdHRyLCB2YWx1ZSB8fCAnJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGVsLCBjb250ZW50cyk7XHJcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5yZW5kZXJlci5wYXJlbnROb2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGVsLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcbn1cclxuIl19