tui-image-editor-angular3 14.0.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.
- package/README.md +155 -0
- package/esm2020/lib/consts.mjs +170 -0
- package/esm2020/lib/i18n/en.mjs +129 -0
- package/esm2020/lib/i18n/nl.mjs +128 -0
- package/esm2020/lib/i18n/translation.service.mjs +40 -0
- package/esm2020/lib/interfaces/command.mjs +2 -0
- package/esm2020/lib/interfaces/history-item.mjs +343 -0
- package/esm2020/lib/interfaces/image-size.mjs +2 -0
- package/esm2020/lib/interfaces/tools-config.mjs +2 -0
- package/esm2020/lib/menus/buttons/crop/crop.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/delete/delete.component.mjs +40 -0
- package/esm2020/lib/menus/buttons/delete-all/delete-all.component.mjs +27 -0
- package/esm2020/lib/menus/buttons/download/download.component.mjs +40 -0
- package/esm2020/lib/menus/buttons/drag/drag.component.mjs +41 -0
- package/esm2020/lib/menus/buttons/draw/draw.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/filter/filter.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/flip/flip.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/history/history.component.mjs +41 -0
- package/esm2020/lib/menus/buttons/icon/icon.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/load/load.component.mjs +23 -0
- package/esm2020/lib/menus/buttons/mask/mask.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/redo/redo.component.mjs +36 -0
- package/esm2020/lib/menus/buttons/reset/reset.component.mjs +28 -0
- package/esm2020/lib/menus/buttons/rotate/rotate.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/shape/shape.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/text/text.component.mjs +22 -0
- package/esm2020/lib/menus/buttons/undo/undo.component.mjs +36 -0
- package/esm2020/lib/menus/buttons/zoom-in/zoom-in.component.mjs +45 -0
- package/esm2020/lib/menus/buttons/zoom-out/zoom-out.component.mjs +20 -0
- package/esm2020/lib/services/history.service.mjs +86 -0
- package/esm2020/lib/services/tools.config-manager.service.mjs +45 -0
- package/esm2020/lib/submenus/crop/crop.component.mjs +76 -0
- package/esm2020/lib/submenus/draw/draw.component.mjs +149 -0
- package/esm2020/lib/submenus/filter/filter.component.mjs +345 -0
- package/esm2020/lib/submenus/flip/flip.component.mjs +39 -0
- package/esm2020/lib/submenus/icon/icon.component.mjs +119 -0
- package/esm2020/lib/submenus/mask/mask.component.mjs +69 -0
- package/esm2020/lib/submenus/rotate/rotate.component.mjs +57 -0
- package/esm2020/lib/submenus/shape/shape.component.mjs +163 -0
- package/esm2020/lib/submenus/text/text.component.mjs +175 -0
- package/esm2020/lib/svg-definitions/svg-definitions.component.mjs +12 -0
- package/esm2020/lib/tui-image-editor.component.mjs +294 -0
- package/esm2020/lib/tui-image-editor.module.mjs +136 -0
- package/esm2020/lib/utils.mjs +173 -0
- package/esm2020/public-api.mjs +8 -0
- package/esm2020/tui-image-editor-angular2.mjs +5 -0
- package/esm2020/tui-image-editor-angular3.mjs +5 -0
- package/fesm2015/tui-image-editor-angular2.mjs +3166 -0
- package/fesm2015/tui-image-editor-angular2.mjs.map +1 -0
- package/fesm2015/tui-image-editor-angular3.mjs +3166 -0
- package/fesm2015/tui-image-editor-angular3.mjs.map +1 -0
- package/fesm2020/tui-image-editor-angular2.mjs +3126 -0
- package/fesm2020/tui-image-editor-angular2.mjs.map +1 -0
- package/fesm2020/tui-image-editor-angular3.mjs +3126 -0
- package/fesm2020/tui-image-editor-angular3.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/consts.d.ts +144 -0
- package/lib/consts.d.ts.map +1 -0
- package/lib/i18n/en.d.ts +128 -0
- package/lib/i18n/en.d.ts.map +1 -0
- package/lib/i18n/nl.d.ts +127 -0
- package/lib/i18n/nl.d.ts.map +1 -0
- package/lib/i18n/translation.service.d.ts +14 -0
- package/lib/i18n/translation.service.d.ts.map +1 -0
- package/lib/interfaces/command.d.ts +4 -0
- package/lib/interfaces/command.d.ts.map +1 -0
- package/lib/interfaces/history-item.d.ts +26 -0
- package/lib/interfaces/history-item.d.ts.map +1 -0
- package/lib/interfaces/image-size.d.ts +6 -0
- package/lib/interfaces/image-size.d.ts.map +1 -0
- package/lib/interfaces/tools-config.d.ts +14 -0
- package/lib/interfaces/tools-config.d.ts.map +1 -0
- package/lib/menus/buttons/crop/crop.component.d.ts +10 -0
- package/lib/menus/buttons/crop/crop.component.d.ts.map +1 -0
- package/lib/menus/buttons/delete/delete.component.d.ts +13 -0
- package/lib/menus/buttons/delete/delete.component.d.ts.map +1 -0
- package/lib/menus/buttons/delete-all/delete-all.component.d.ts +11 -0
- package/lib/menus/buttons/delete-all/delete-all.component.d.ts.map +1 -0
- package/lib/menus/buttons/download/download.component.d.ts +9 -0
- package/lib/menus/buttons/download/download.component.d.ts.map +1 -0
- package/lib/menus/buttons/drag/drag.component.d.ts +11 -0
- package/lib/menus/buttons/drag/drag.component.d.ts.map +1 -0
- package/lib/menus/buttons/draw/draw.component.d.ts +10 -0
- package/lib/menus/buttons/draw/draw.component.d.ts.map +1 -0
- package/lib/menus/buttons/filter/filter.component.d.ts +10 -0
- package/lib/menus/buttons/filter/filter.component.d.ts.map +1 -0
- package/lib/menus/buttons/flip/flip.component.d.ts +10 -0
- package/lib/menus/buttons/flip/flip.component.d.ts.map +1 -0
- package/lib/menus/buttons/history/history.component.d.ts +13 -0
- package/lib/menus/buttons/history/history.component.d.ts.map +1 -0
- package/lib/menus/buttons/icon/icon.component.d.ts +10 -0
- package/lib/menus/buttons/icon/icon.component.d.ts.map +1 -0
- package/lib/menus/buttons/load/load.component.d.ts +9 -0
- package/lib/menus/buttons/load/load.component.d.ts.map +1 -0
- package/lib/menus/buttons/mask/mask.component.d.ts +10 -0
- package/lib/menus/buttons/mask/mask.component.d.ts.map +1 -0
- package/lib/menus/buttons/redo/redo.component.d.ts +12 -0
- package/lib/menus/buttons/redo/redo.component.d.ts.map +1 -0
- package/lib/menus/buttons/reset/reset.component.d.ts +12 -0
- package/lib/menus/buttons/reset/reset.component.d.ts.map +1 -0
- package/lib/menus/buttons/rotate/rotate.component.d.ts +10 -0
- package/lib/menus/buttons/rotate/rotate.component.d.ts.map +1 -0
- package/lib/menus/buttons/shape/shape.component.d.ts +10 -0
- package/lib/menus/buttons/shape/shape.component.d.ts.map +1 -0
- package/lib/menus/buttons/text/text.component.d.ts +10 -0
- package/lib/menus/buttons/text/text.component.d.ts.map +1 -0
- package/lib/menus/buttons/undo/undo.component.d.ts +12 -0
- package/lib/menus/buttons/undo/undo.component.d.ts.map +1 -0
- package/lib/menus/buttons/zoom-in/zoom-in.component.d.ts +12 -0
- package/lib/menus/buttons/zoom-in/zoom-in.component.d.ts.map +1 -0
- package/lib/menus/buttons/zoom-out/zoom-out.component.d.ts +9 -0
- package/lib/menus/buttons/zoom-out/zoom-out.component.d.ts.map +1 -0
- package/lib/services/history.service.d.ts +45 -0
- package/lib/services/history.service.d.ts.map +1 -0
- package/lib/services/tools.config-manager.service.d.ts +12 -0
- package/lib/services/tools.config-manager.service.d.ts.map +1 -0
- package/lib/submenus/crop/crop.component.d.ts +23 -0
- package/lib/submenus/crop/crop.component.d.ts.map +1 -0
- package/lib/submenus/draw/draw.component.d.ts +32 -0
- package/lib/submenus/draw/draw.component.d.ts.map +1 -0
- package/lib/submenus/filter/filter.component.d.ts +70 -0
- package/lib/submenus/filter/filter.component.d.ts.map +1 -0
- package/lib/submenus/flip/flip.component.d.ts +10 -0
- package/lib/submenus/flip/flip.component.d.ts.map +1 -0
- package/lib/submenus/icon/icon.component.d.ts +24 -0
- package/lib/submenus/icon/icon.component.d.ts.map +1 -0
- package/lib/submenus/mask/mask.component.d.ts +16 -0
- package/lib/submenus/mask/mask.component.d.ts.map +1 -0
- package/lib/submenus/rotate/rotate.component.d.ts +12 -0
- package/lib/submenus/rotate/rotate.component.d.ts.map +1 -0
- package/lib/submenus/shape/shape.component.d.ts +31 -0
- package/lib/submenus/shape/shape.component.d.ts.map +1 -0
- package/lib/submenus/text/text.component.d.ts +31 -0
- package/lib/submenus/text/text.component.d.ts.map +1 -0
- package/lib/svg-definitions/svg-definitions.component.d.ts +6 -0
- package/lib/svg-definitions/svg-definitions.component.d.ts.map +1 -0
- package/lib/tui-image-editor.component.d.ts +71 -0
- package/lib/tui-image-editor.component.d.ts.map +1 -0
- package/lib/tui-image-editor.module.d.ts +48 -0
- package/lib/tui-image-editor.module.d.ts.map +1 -0
- package/lib/utils.d.ts +45 -0
- package/lib/utils.d.ts.map +1 -0
- package/package.json +43 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
- package/src/checkboxes.scss +95 -0
- package/src/theme.scss +936 -0
- package/tui-image-editor-angular2.d.ts.map +1 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { Component, Input, } from '@angular/core';
|
|
2
|
+
import { defaultColors, eventNames } from '../../consts';
|
|
3
|
+
import { clearSelection, getActiveObjectId } from '../../utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../services/tools.config-manager.service";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
import * as i3 from "ngx-color-picker";
|
|
8
|
+
import * as i4 from "@ngx-translate/core";
|
|
9
|
+
export class DrawComponent {
|
|
10
|
+
constructor(toolConfigService) {
|
|
11
|
+
this.toolConfigService = toolConfigService;
|
|
12
|
+
this.defaultDrawShapeColors = defaultColors;
|
|
13
|
+
this.drawStrokeWidthValue = 12;
|
|
14
|
+
this.drawStrokeColor = 'rgba(0, 169, 255, 1)';
|
|
15
|
+
this.onObjectActivatedEventListener = this.onObjectActivated.bind(this);
|
|
16
|
+
this.toolConfigService.config$.subscribe(config => {
|
|
17
|
+
const { drawType, drawStrokeColor, drawStrokeWidthValue } = config.pen;
|
|
18
|
+
this.drawStrokeWidthValue = drawStrokeWidthValue;
|
|
19
|
+
this.drawType = drawType;
|
|
20
|
+
this.drawStrokeColor = drawStrokeColor;
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
ngOnChanges(changes) {
|
|
24
|
+
var that = this;
|
|
25
|
+
if (changes['imageEditor']) {
|
|
26
|
+
this.activeObjectId = getActiveObjectId(changes['imageEditor'].currentValue);
|
|
27
|
+
this.checkActiveObject(this.activeObjectId, true);
|
|
28
|
+
changes['imageEditor'].previousValue?.off(eventNames.OBJECT_ACTIVATED, that.onObjectActivatedEventListener);
|
|
29
|
+
changes['imageEditor'].currentValue?.on(eventNames.OBJECT_ACTIVATED, that.onObjectActivatedEventListener);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
ngOnDestroy() {
|
|
33
|
+
if (this.imageEditor) {
|
|
34
|
+
this.imageEditor.off(eventNames.OBJECT_ACTIVATED, this.onObjectActivatedEventListener);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
onObjectActivated(props) {
|
|
38
|
+
this.activeObjectId = props?.id;
|
|
39
|
+
this.checkActiveObject(this.activeObjectId);
|
|
40
|
+
}
|
|
41
|
+
checkActiveObject(activeObjectId, enableDrawModeIfNoActiveObject = false) {
|
|
42
|
+
let ifNoActiveObject = () => {
|
|
43
|
+
this.setDrawMode('free', {
|
|
44
|
+
width: this.drawStrokeWidthValue,
|
|
45
|
+
color: this.drawStrokeColor,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
if (activeObjectId != null) {
|
|
49
|
+
var props = this.imageEditor?.getObjectProperties(activeObjectId, [
|
|
50
|
+
'type',
|
|
51
|
+
'strokeWidth',
|
|
52
|
+
'stroke',
|
|
53
|
+
]);
|
|
54
|
+
if (props && (props.type === 'path' || props.type === 'line')) {
|
|
55
|
+
this.drawStrokeWidthValue = props.strokeWidth;
|
|
56
|
+
this.drawStrokeColor = props.stroke;
|
|
57
|
+
}
|
|
58
|
+
else if (enableDrawModeIfNoActiveObject) {
|
|
59
|
+
ifNoActiveObject();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else if (enableDrawModeIfNoActiveObject) {
|
|
63
|
+
ifNoActiveObject();
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
drawStrokeWidthChanged(currentStrokeWidth, isSilent) {
|
|
67
|
+
this.setDrawMode(this.drawType, {
|
|
68
|
+
width: typeof currentStrokeWidth === "number" ? currentStrokeWidth : this.drawStrokeWidthValue,
|
|
69
|
+
color: this.drawStrokeColor,
|
|
70
|
+
});
|
|
71
|
+
this.strokeChangeActiveObject('strokeWidth', isSilent);
|
|
72
|
+
this.toolConfigService.changePenConfig({ drawStrokeWidthValue: (typeof currentStrokeWidth === "number" ? currentStrokeWidth : this.drawStrokeWidthValue) });
|
|
73
|
+
}
|
|
74
|
+
setDrawType(type) {
|
|
75
|
+
clearSelection(this.imageEditor);
|
|
76
|
+
if (this.drawType != type) {
|
|
77
|
+
this.drawType = type;
|
|
78
|
+
this.setDrawMode(this.drawType, {
|
|
79
|
+
width: this.drawStrokeWidthValue,
|
|
80
|
+
color: this.drawStrokeColor,
|
|
81
|
+
});
|
|
82
|
+
this.toolConfigService.changePenConfig({ drawType: type });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.drawType = null;
|
|
86
|
+
this.imageEditor.stopDrawingMode();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
drawStrokeColorChanged(currentStrokeColor) {
|
|
90
|
+
this.setDrawMode(this.drawType, {
|
|
91
|
+
width: this.drawStrokeWidthValue,
|
|
92
|
+
color: currentStrokeColor,
|
|
93
|
+
});
|
|
94
|
+
this.strokeChangeActiveObject('strokeColor', false);
|
|
95
|
+
this.toolConfigService.changePenConfig({ drawStrokeColor: currentStrokeColor });
|
|
96
|
+
}
|
|
97
|
+
setDrawMode(type, settings) {
|
|
98
|
+
this.drawType = type;
|
|
99
|
+
this.imageEditor.stopDrawingMode();
|
|
100
|
+
if (type === 'free') {
|
|
101
|
+
clearSelection(this.imageEditor);
|
|
102
|
+
this.imageEditor.startDrawingMode('FREE_DRAWING', settings);
|
|
103
|
+
}
|
|
104
|
+
else if (type === 'line') {
|
|
105
|
+
clearSelection(this.imageEditor);
|
|
106
|
+
this.imageEditor.startDrawingMode('LINE_DRAWING', settings);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
strokeChangeActiveObject(changedProperty, isSilent) {
|
|
110
|
+
if (this.activeObjectId != null &&
|
|
111
|
+
getActiveObjectId(this.imageEditor) == this.activeObjectId) {
|
|
112
|
+
var props = this.imageEditor.getObjectProperties(this.activeObjectId, 'type');
|
|
113
|
+
if (props != null && (props.type === 'path' || props.type === 'line')) {
|
|
114
|
+
let parameters = null;
|
|
115
|
+
switch (changedProperty) {
|
|
116
|
+
case 'strokeWidth':
|
|
117
|
+
parameters = {
|
|
118
|
+
strokeWidth: this.drawStrokeWidthValue,
|
|
119
|
+
};
|
|
120
|
+
break;
|
|
121
|
+
case 'strokeColor':
|
|
122
|
+
parameters = {
|
|
123
|
+
stroke: this.drawStrokeColor,
|
|
124
|
+
};
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
if (isSilent) {
|
|
128
|
+
this.imageEditor.setObjectPropertiesQuietly(this.activeObjectId, parameters);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
this.imageEditor.setObjectProperties(this.activeObjectId, parameters);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
DrawComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DrawComponent, deps: [{ token: i1.ToolsConfigService }], target: i0.ɵɵFactoryTarget.Component });
|
|
140
|
+
DrawComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: DrawComponent, selector: "tui-image-editor-submenus-draw", inputs: { imageEditor: "imageEditor", defaultDrawShapeColors: "defaultDrawShapeColors" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"tui-image-editor-menu-draw\">\r\n <div class=\"tui-image-editor-submenu-item\">\r\n <div class=\"tie-draw-line-select-button\">\r\n <div\r\n class=\"tui-image-editor-d-flex tui-image-editor-flex-row tui-image-editor-align-items-center tui-image-editor-justify-content-center tui-image-editor-my-3\"\r\n >\r\n <div\r\n (click)=\"setDrawType('free')\"\r\n [class]=\"\r\n 'tui-image-editor-button free ' +\r\n (drawType == 'free' ? 'active' : '')\r\n \"\r\n >\r\n <div>\r\n <svg class=\"svg_ic-submenu\">\r\n <use xlink:href=\"#ic-draw-free\" class=\"normal use-default\"></use>\r\n <use xlink:href=\"#ic-draw-free\" class=\"active use-default\"></use>\r\n </svg>\r\n </div>\r\n <label>\r\n {{ \"tui-image-editor-angular-submenus-draw-free\" | translate }}\r\n </label>\r\n </div>\r\n <div\r\n (click)=\"setDrawType('line')\"\r\n [class]=\"\r\n 'tui-image-editor-button line ' +\r\n (drawType == 'line' ? 'active' : '')\r\n \"\r\n >\r\n <div>\r\n <svg class=\"svg_ic-submenu\">\r\n <use xlink:href=\"#ic-draw-line\" class=\"normal use-default\"></use>\r\n <use xlink:href=\"#ic-draw-line\" class=\"active use-default\"></use>\r\n </svg>\r\n </div>\r\n <label>\r\n {{ \"tui-image-editor-angular-submenus-draw-straight\" | translate }}\r\n </label>\r\n </div>\r\n <div class=\"tui-image-editor-partition\">\r\n <div></div>\r\n </div>\r\n <div\r\n class=\"tie-draw-color tui-image-editor-button tui-image-editor-button-color-picker tui-image-editor-d-flex tui-image-editor-flex-column\"\r\n title=\"Color\"\r\n >\r\n <label>\r\n <input\r\n readonly\r\n class=\"tie-draw-color-picker\"\r\n [style.background]=\"drawStrokeColor\"\r\n [(colorPicker)]=\"drawStrokeColor\"\r\n [cpOutputFormat]=\"'rgba'\"\r\n [cpPresetColors]=\"defaultDrawShapeColors\"\r\n [cpUseRootViewContainer]=\"true\"\r\n (colorPickerChange)=\"drawStrokeColorChanged($event)\"\r\n />\r\n <div>\r\n {{ \"tui-image-editor-angular-submenus-draw-color\" | translate }}\r\n </div></label\r\n >\r\n </div>\r\n </div>\r\n <div\r\n class=\"tui-image-editor-newline tui-image-editor-range-wrap tui-image-editor-d-flex tui-image-editor-flex-row tui-image-editor-align-items-center tui-image-editor-justify-content-center tui-image-editor-my-3\"\r\n >\r\n <label class=\"range\">{{\r\n \"tui-image-editor-angular-submenus-draw-strokeWidth\" | translate\r\n }}</label>\r\n <input\r\n type=\"range\"\r\n [(ngModel)]=\"drawStrokeWidthValue\"\r\n (ngModelChange)=\"drawStrokeWidthChanged($event, true)\"\r\n (change)=\"drawStrokeWidthChanged($event, false)\"\r\n min=\"5\"\r\n max=\"30\"\r\n />\r\n <input\r\n type=\"number\"\r\n min=\"5\"\r\n max=\"30\"\r\n step=\"1\"\r\n class=\"tie-draw-range-value tui-image-editor-range-value\"\r\n [(ngModel)]=\"drawStrokeWidthValue\"\r\n (ngModelChange)=\"drawStrokeWidthChanged($event, true)\"\r\n (change)=\"drawStrokeWidthChanged($event, false)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.RangeValueAccessor, selector: "input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i2.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.ColorPickerDirective, selector: "[colorPicker]", inputs: ["colorPicker", "cpWidth", "cpHeight", "cpToggle", "cpDisabled", "cpIgnoredElements", "cpFallbackColor", "cpColorMode", "cpCmykEnabled", "cpOutputFormat", "cpAlphaChannel", "cpDisableInput", "cpDialogDisplay", "cpSaveClickOutside", "cpCloseClickOutside", "cpUseRootViewContainer", "cpPosition", "cpPositionOffset", "cpPositionRelativeToArrow", "cpOKButton", "cpOKButtonText", "cpOKButtonClass", "cpCancelButton", "cpCancelButtonText", "cpCancelButtonClass", "cpEyeDropper", "cpPresetLabel", "cpPresetColors", "cpPresetColorsClass", "cpMaxPresetColorsLength", "cpPresetEmptyMessage", "cpPresetEmptyMessageClass", "cpAddColorButton", "cpAddColorButtonText", "cpAddColorButtonClass", "cpRemoveColorButtonClass", "cpExtraTemplate"], outputs: ["cpInputChange", "cpToggleChange", "cpSliderChange", "cpSliderDragEnd", "cpSliderDragStart", "colorPickerOpen", "colorPickerClose", "colorPickerCancel", "colorPickerSelect", "colorPickerChange", "cpCmykColorChange", "cpPresetColorsChange"], exportAs: ["ngxColorPicker"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
|
|
141
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: DrawComponent, decorators: [{
|
|
142
|
+
type: Component,
|
|
143
|
+
args: [{ selector: 'tui-image-editor-submenus-draw', template: "<div class=\"tui-image-editor-menu-draw\">\r\n <div class=\"tui-image-editor-submenu-item\">\r\n <div class=\"tie-draw-line-select-button\">\r\n <div\r\n class=\"tui-image-editor-d-flex tui-image-editor-flex-row tui-image-editor-align-items-center tui-image-editor-justify-content-center tui-image-editor-my-3\"\r\n >\r\n <div\r\n (click)=\"setDrawType('free')\"\r\n [class]=\"\r\n 'tui-image-editor-button free ' +\r\n (drawType == 'free' ? 'active' : '')\r\n \"\r\n >\r\n <div>\r\n <svg class=\"svg_ic-submenu\">\r\n <use xlink:href=\"#ic-draw-free\" class=\"normal use-default\"></use>\r\n <use xlink:href=\"#ic-draw-free\" class=\"active use-default\"></use>\r\n </svg>\r\n </div>\r\n <label>\r\n {{ \"tui-image-editor-angular-submenus-draw-free\" | translate }}\r\n </label>\r\n </div>\r\n <div\r\n (click)=\"setDrawType('line')\"\r\n [class]=\"\r\n 'tui-image-editor-button line ' +\r\n (drawType == 'line' ? 'active' : '')\r\n \"\r\n >\r\n <div>\r\n <svg class=\"svg_ic-submenu\">\r\n <use xlink:href=\"#ic-draw-line\" class=\"normal use-default\"></use>\r\n <use xlink:href=\"#ic-draw-line\" class=\"active use-default\"></use>\r\n </svg>\r\n </div>\r\n <label>\r\n {{ \"tui-image-editor-angular-submenus-draw-straight\" | translate }}\r\n </label>\r\n </div>\r\n <div class=\"tui-image-editor-partition\">\r\n <div></div>\r\n </div>\r\n <div\r\n class=\"tie-draw-color tui-image-editor-button tui-image-editor-button-color-picker tui-image-editor-d-flex tui-image-editor-flex-column\"\r\n title=\"Color\"\r\n >\r\n <label>\r\n <input\r\n readonly\r\n class=\"tie-draw-color-picker\"\r\n [style.background]=\"drawStrokeColor\"\r\n [(colorPicker)]=\"drawStrokeColor\"\r\n [cpOutputFormat]=\"'rgba'\"\r\n [cpPresetColors]=\"defaultDrawShapeColors\"\r\n [cpUseRootViewContainer]=\"true\"\r\n (colorPickerChange)=\"drawStrokeColorChanged($event)\"\r\n />\r\n <div>\r\n {{ \"tui-image-editor-angular-submenus-draw-color\" | translate }}\r\n </div></label\r\n >\r\n </div>\r\n </div>\r\n <div\r\n class=\"tui-image-editor-newline tui-image-editor-range-wrap tui-image-editor-d-flex tui-image-editor-flex-row tui-image-editor-align-items-center tui-image-editor-justify-content-center tui-image-editor-my-3\"\r\n >\r\n <label class=\"range\">{{\r\n \"tui-image-editor-angular-submenus-draw-strokeWidth\" | translate\r\n }}</label>\r\n <input\r\n type=\"range\"\r\n [(ngModel)]=\"drawStrokeWidthValue\"\r\n (ngModelChange)=\"drawStrokeWidthChanged($event, true)\"\r\n (change)=\"drawStrokeWidthChanged($event, false)\"\r\n min=\"5\"\r\n max=\"30\"\r\n />\r\n <input\r\n type=\"number\"\r\n min=\"5\"\r\n max=\"30\"\r\n step=\"1\"\r\n class=\"tie-draw-range-value tui-image-editor-range-value\"\r\n [(ngModel)]=\"drawStrokeWidthValue\"\r\n (ngModelChange)=\"drawStrokeWidthChanged($event, true)\"\r\n (change)=\"drawStrokeWidthChanged($event, false)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
|
|
144
|
+
}], ctorParameters: function () { return [{ type: i1.ToolsConfigService }]; }, propDecorators: { imageEditor: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], defaultDrawShapeColors: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}] } });
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWktaW1hZ2UtZWRpdG9yLWFuZ3VsYXIyL3NyYy9saWIvc3VibWVudXMvZHJhdy9kcmF3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1aS1pbWFnZS1lZGl0b3ItYW5ndWxhcjIvc3JjL2xpYi9zdWJtZW51cy9kcmF3L2RyYXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEdBS04sTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxhQUFhO0lBU3hCLFlBQ1UsaUJBQXFDO1FBQXJDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBb0I7UUFSdEMsMkJBQXNCLEdBQWEsYUFBYSxDQUFDO1FBQ25ELHlCQUFvQixHQUFXLEVBQUUsQ0FBQztRQUVsQyxvQkFBZSxHQUFXLHNCQUFzQixDQUFDO1FBT3RELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hELE1BQU0sRUFBQyxRQUFRLEVBQUMsZUFBZSxFQUFDLG9CQUFvQixFQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztZQUNuRSxJQUFJLENBQUMsb0JBQW9CLEdBQUMsb0JBQW9CLENBQUM7WUFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBQyxRQUFRLENBQUM7WUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBQyxlQUFlLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUNyQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsWUFBWSxDQUNwQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQ3ZDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFDM0IsSUFBSSxDQUFDLDhCQUE4QixDQUNwQyxDQUFDO1lBQ0YsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQ3JDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFDM0IsSUFBSSxDQUFDLDhCQUE4QixDQUNwQyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FDbEIsVUFBVSxDQUFDLGdCQUFnQixFQUMzQixJQUFJLENBQUMsOEJBQThCLENBQ3BDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFLO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsY0FBc0IsRUFDdEIsaUNBQTBDLEtBQUs7UUFFL0MsSUFBSSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CO2dCQUNoQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWU7YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxjQUFjLElBQUksSUFBSSxFQUFFO1lBQzFCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsY0FBYyxFQUFFO2dCQUNoRSxNQUFNO2dCQUNOLGFBQWE7Z0JBQ2IsUUFBUTthQUNULENBQUMsQ0FBQztZQUNILElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUNyQztpQkFBTSxJQUFJLDhCQUE4QixFQUFFO2dCQUN6QyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ3BCO1NBQ0Y7YUFBTSxJQUFJLDhCQUE4QixFQUFFO1lBQ3pDLGdCQUFnQixFQUFFLENBQUM7U0FDcEI7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsa0JBQWtDLEVBQUUsUUFBaUI7UUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLEtBQUssRUFBRSxPQUFPLGtCQUFrQixLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0I7WUFDOUYsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxFQUFDLG9CQUFvQixFQUFDLENBQUMsT0FBTyxrQkFBa0IsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBQyxDQUFDLENBQUE7SUFDMUosQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFxQjtRQUMvQixjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUM5QixLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtnQkFDaEMsS0FBSyxFQUFFLElBQUksQ0FBQyxlQUFlO2FBQzVCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsRUFBQyxRQUFRLEVBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQTtTQUN4RDthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztTQUNwQztJQUNILENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxrQkFBMEI7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CO1lBQ2hDLEtBQUssRUFBRSxrQkFBa0I7U0FDMUIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEVBQUMsZUFBZSxFQUFDLGtCQUFrQixFQUFDLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0lBRUQsV0FBVyxDQUNULElBQTRCLEVBQzVCLFFBT0M7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNuQixjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQzdEO2FBQU0sSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1lBQzFCLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQ3RCLGVBQThDLEVBQzlDLFFBQWlCO1FBRWpCLElBQ0UsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJO1lBQzNCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUMxRDtZQUNBLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQzlDLElBQUksQ0FBQyxjQUFjLEVBQ25CLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsRUFBRTtnQkFDckUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixRQUFRLGVBQWUsRUFBRTtvQkFDdkIsS0FBSyxhQUFhO3dCQUNoQixVQUFVLEdBQUc7NEJBQ1gsV0FBVyxFQUFFLElBQUksQ0FBQyxvQkFBb0I7eUJBQ3ZDLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLGFBQWE7d0JBQ2hCLFVBQVUsR0FBRzs0QkFDWCxNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWU7eUJBQzdCLENBQUM7d0JBQ0YsTUFBTTtpQkFDVDtnQkFDRCxJQUFJLFFBQVEsRUFBRTtvQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUN6QyxJQUFJLENBQUMsY0FBYyxFQUNuQixVQUFVLENBQ1gsQ0FBQztpQkFDSDtxQkFBTTtvQkFDTCxVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQ2xDLElBQUksQ0FBQyxjQUFjLEVBQ25CLFVBQVUsQ0FDWCxDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7U0FDRjtJQUNILENBQUM7OzBHQWpMVSxhQUFhOzhGQUFiLGFBQWEscUxDbEIxQiwwbkhBNEZBOzJGRDFFYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLGdDQUFnQzt5R0FLakMsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUb29sc0NvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b29scy5jb25maWctbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9vbENvbmZpZywgUGVuQ29uZmlnLCBUZXh0Q29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90b29scy1jb25maWcnO1xyXG5pbXBvcnQgeyBkZWZhdWx0Q29sb3JzLCBldmVudE5hbWVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcclxuaW1wb3J0IHsgY2xlYXJTZWxlY3Rpb24sIGdldEFjdGl2ZU9iamVjdElkIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0dWktaW1hZ2UtZWRpdG9yLXN1Ym1lbnVzLWRyYXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcmF3LmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIERyYXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQElucHV0KCkgaW1hZ2VFZGl0b3I6IGFueTtcclxuICBASW5wdXQoKSBkZWZhdWx0RHJhd1NoYXBlQ29sb3JzOiBzdHJpbmdbXSA9IGRlZmF1bHRDb2xvcnM7XHJcbiAgcHVibGljIGRyYXdTdHJva2VXaWR0aFZhbHVlOiBudW1iZXIgPSAxMjtcclxuICBwdWJsaWMgZHJhd1R5cGU6ICdmcmVlJyB8ICdsaW5lJztcclxuICBwdWJsaWMgZHJhd1N0cm9rZUNvbG9yOiBzdHJpbmcgPSAncmdiYSgwLCAxNjksIDI1NSwgMSknO1xyXG4gIHB1YmxpYyBhY3RpdmVPYmplY3RJZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBvbk9iamVjdEFjdGl2YXRlZEV2ZW50TGlzdGVuZXI6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRvb2xDb25maWdTZXJ2aWNlOiBUb29sc0NvbmZpZ1NlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMub25PYmplY3RBY3RpdmF0ZWRFdmVudExpc3RlbmVyID0gdGhpcy5vbk9iamVjdEFjdGl2YXRlZC5iaW5kKHRoaXMpO1xyXG4gICAgdGhpcy50b29sQ29uZmlnU2VydmljZS5jb25maWckLnN1YnNjcmliZShjb25maWcgPT4ge1xyXG4gICAgICBjb25zdCB7ZHJhd1R5cGUsZHJhd1N0cm9rZUNvbG9yLGRyYXdTdHJva2VXaWR0aFZhbHVlfSA9IGNvbmZpZy5wZW47XHJcbiAgICAgIHRoaXMuZHJhd1N0cm9rZVdpZHRoVmFsdWU9ZHJhd1N0cm9rZVdpZHRoVmFsdWU7XHJcbiAgICAgIHRoaXMuZHJhd1R5cGU9ZHJhd1R5cGU7XHJcbiAgICAgIHRoaXMuZHJhd1N0cm9rZUNvbG9yPWRyYXdTdHJva2VDb2xvcjtcclxuICAgIH0pO1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICBpZiAoY2hhbmdlc1snaW1hZ2VFZGl0b3InXSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZU9iamVjdElkID0gZ2V0QWN0aXZlT2JqZWN0SWQoXHJcbiAgICAgICAgY2hhbmdlc1snaW1hZ2VFZGl0b3InXS5jdXJyZW50VmFsdWVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jaGVja0FjdGl2ZU9iamVjdCh0aGlzLmFjdGl2ZU9iamVjdElkLCB0cnVlKTtcclxuICAgICAgY2hhbmdlc1snaW1hZ2VFZGl0b3InXS5wcmV2aW91c1ZhbHVlPy5vZmYoXHJcbiAgICAgICAgZXZlbnROYW1lcy5PQkpFQ1RfQUNUSVZBVEVELFxyXG4gICAgICAgIHRoYXQub25PYmplY3RBY3RpdmF0ZWRFdmVudExpc3RlbmVyXHJcbiAgICAgICk7XHJcbiAgICAgIGNoYW5nZXNbJ2ltYWdlRWRpdG9yJ10uY3VycmVudFZhbHVlPy5vbihcclxuICAgICAgICBldmVudE5hbWVzLk9CSkVDVF9BQ1RJVkFURUQsXHJcbiAgICAgICAgdGhhdC5vbk9iamVjdEFjdGl2YXRlZEV2ZW50TGlzdGVuZXJcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW1hZ2VFZGl0b3IpIHtcclxuICAgICAgdGhpcy5pbWFnZUVkaXRvci5vZmYoXHJcbiAgICAgICAgZXZlbnROYW1lcy5PQkpFQ1RfQUNUSVZBVEVELFxyXG4gICAgICAgIHRoaXMub25PYmplY3RBY3RpdmF0ZWRFdmVudExpc3RlbmVyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uT2JqZWN0QWN0aXZhdGVkKHByb3BzKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU9iamVjdElkID0gcHJvcHM/LmlkO1xyXG4gICAgdGhpcy5jaGVja0FjdGl2ZU9iamVjdCh0aGlzLmFjdGl2ZU9iamVjdElkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tBY3RpdmVPYmplY3QoXHJcbiAgICBhY3RpdmVPYmplY3RJZDogbnVtYmVyLFxyXG4gICAgZW5hYmxlRHJhd01vZGVJZk5vQWN0aXZlT2JqZWN0OiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIGxldCBpZk5vQWN0aXZlT2JqZWN0ID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldERyYXdNb2RlKCdmcmVlJywge1xyXG4gICAgICAgIHdpZHRoOiB0aGlzLmRyYXdTdHJva2VXaWR0aFZhbHVlLFxyXG4gICAgICAgIGNvbG9yOiB0aGlzLmRyYXdTdHJva2VDb2xvcixcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgaWYgKGFjdGl2ZU9iamVjdElkICE9IG51bGwpIHtcclxuICAgICAgdmFyIHByb3BzID0gdGhpcy5pbWFnZUVkaXRvcj8uZ2V0T2JqZWN0UHJvcGVydGllcyhhY3RpdmVPYmplY3RJZCwgW1xyXG4gICAgICAgICd0eXBlJyxcclxuICAgICAgICAnc3Ryb2tlV2lkdGgnLFxyXG4gICAgICAgICdzdHJva2UnLFxyXG4gICAgICBdKTtcclxuICAgICAgaWYgKHByb3BzICYmIChwcm9wcy50eXBlID09PSAncGF0aCcgfHwgcHJvcHMudHlwZSA9PT0gJ2xpbmUnKSkge1xyXG4gICAgICAgIHRoaXMuZHJhd1N0cm9rZVdpZHRoVmFsdWUgPSBwcm9wcy5zdHJva2VXaWR0aDtcclxuICAgICAgICB0aGlzLmRyYXdTdHJva2VDb2xvciA9IHByb3BzLnN0cm9rZTtcclxuICAgICAgfSBlbHNlIGlmIChlbmFibGVEcmF3TW9kZUlmTm9BY3RpdmVPYmplY3QpIHtcclxuICAgICAgICBpZk5vQWN0aXZlT2JqZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZW5hYmxlRHJhd01vZGVJZk5vQWN0aXZlT2JqZWN0KSB7XHJcbiAgICAgIGlmTm9BY3RpdmVPYmplY3QoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdTdHJva2VXaWR0aENoYW5nZWQoY3VycmVudFN0cm9rZVdpZHRoOiBudW1iZXIgfCBFdmVudCwgaXNTaWxlbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuc2V0RHJhd01vZGUodGhpcy5kcmF3VHlwZSwge1xyXG4gICAgICB3aWR0aDogdHlwZW9mIGN1cnJlbnRTdHJva2VXaWR0aCA9PT0gXCJudW1iZXJcIiA/IGN1cnJlbnRTdHJva2VXaWR0aCA6IHRoaXMuZHJhd1N0cm9rZVdpZHRoVmFsdWUsXHJcbiAgICAgIGNvbG9yOiB0aGlzLmRyYXdTdHJva2VDb2xvcixcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zdHJva2VDaGFuZ2VBY3RpdmVPYmplY3QoJ3N0cm9rZVdpZHRoJywgaXNTaWxlbnQpO1xyXG4gICAgdGhpcy50b29sQ29uZmlnU2VydmljZS5jaGFuZ2VQZW5Db25maWcoe2RyYXdTdHJva2VXaWR0aFZhbHVlOih0eXBlb2YgY3VycmVudFN0cm9rZVdpZHRoID09PSBcIm51bWJlclwiID8gY3VycmVudFN0cm9rZVdpZHRoIDogdGhpcy5kcmF3U3Ryb2tlV2lkdGhWYWx1ZSl9KVxyXG4gIH1cclxuXHJcbiAgc2V0RHJhd1R5cGUodHlwZTogJ2ZyZWUnIHwgJ2xpbmUnKSB7XHJcbiAgICBjbGVhclNlbGVjdGlvbih0aGlzLmltYWdlRWRpdG9yKTtcclxuICAgIGlmICh0aGlzLmRyYXdUeXBlICE9IHR5cGUpIHtcclxuICAgICAgdGhpcy5kcmF3VHlwZSA9IHR5cGU7XHJcbiAgICAgIHRoaXMuc2V0RHJhd01vZGUodGhpcy5kcmF3VHlwZSwge1xyXG4gICAgICAgIHdpZHRoOiB0aGlzLmRyYXdTdHJva2VXaWR0aFZhbHVlLFxyXG4gICAgICAgIGNvbG9yOiB0aGlzLmRyYXdTdHJva2VDb2xvcixcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG9vbENvbmZpZ1NlcnZpY2UuY2hhbmdlUGVuQ29uZmlnKHtkcmF3VHlwZTp0eXBlfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHJhd1R5cGUgPSBudWxsO1xyXG4gICAgICB0aGlzLmltYWdlRWRpdG9yLnN0b3BEcmF3aW5nTW9kZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd1N0cm9rZUNvbG9yQ2hhbmdlZChjdXJyZW50U3Ryb2tlQ29sb3I6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXREcmF3TW9kZSh0aGlzLmRyYXdUeXBlLCB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLmRyYXdTdHJva2VXaWR0aFZhbHVlLFxyXG4gICAgICBjb2xvcjogY3VycmVudFN0cm9rZUNvbG9yLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN0cm9rZUNoYW5nZUFjdGl2ZU9iamVjdCgnc3Ryb2tlQ29sb3InLCBmYWxzZSk7XHJcbiAgICB0aGlzLnRvb2xDb25maWdTZXJ2aWNlLmNoYW5nZVBlbkNvbmZpZyh7ZHJhd1N0cm9rZUNvbG9yOmN1cnJlbnRTdHJva2VDb2xvcn0pXHJcbiAgfVxyXG5cclxuICBzZXREcmF3TW9kZShcclxuICAgIHR5cGU6ICdmcmVlJyB8ICdsaW5lJyB8IG51bGwsXHJcbiAgICBzZXR0aW5nczoge1xyXG4gICAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgICBjb2xvcjogc3RyaW5nO1xyXG4gICAgICBhcnJvd1R5cGU/OiB7XHJcbiAgICAgICAgdGFpbDogJ2NoZXZyb24nIHwgJ3RyaWFuZ2xlJztcclxuICAgICAgICBoZWFkOiAnY2hldnJvbicgfCAndHJpYW5nbGUnO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICkge1xyXG4gICAgdGhpcy5kcmF3VHlwZSA9IHR5cGU7XHJcbiAgICB0aGlzLmltYWdlRWRpdG9yLnN0b3BEcmF3aW5nTW9kZSgpO1xyXG4gICAgaWYgKHR5cGUgPT09ICdmcmVlJykge1xyXG4gICAgICBjbGVhclNlbGVjdGlvbih0aGlzLmltYWdlRWRpdG9yKTtcclxuICAgICAgdGhpcy5pbWFnZUVkaXRvci5zdGFydERyYXdpbmdNb2RlKCdGUkVFX0RSQVdJTkcnLCBzZXR0aW5ncyk7XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdsaW5lJykge1xyXG4gICAgICBjbGVhclNlbGVjdGlvbih0aGlzLmltYWdlRWRpdG9yKTtcclxuICAgICAgdGhpcy5pbWFnZUVkaXRvci5zdGFydERyYXdpbmdNb2RlKCdMSU5FX0RSQVdJTkcnLCBzZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdHJva2VDaGFuZ2VBY3RpdmVPYmplY3QoXHJcbiAgICBjaGFuZ2VkUHJvcGVydHk6ICdzdHJva2VXaWR0aCcgfCAnc3Ryb2tlQ29sb3InLFxyXG4gICAgaXNTaWxlbnQ6IGJvb2xlYW5cclxuICApIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hY3RpdmVPYmplY3RJZCAhPSBudWxsICYmXHJcbiAgICAgIGdldEFjdGl2ZU9iamVjdElkKHRoaXMuaW1hZ2VFZGl0b3IpID09IHRoaXMuYWN0aXZlT2JqZWN0SWRcclxuICAgICkge1xyXG4gICAgICB2YXIgcHJvcHMgPSB0aGlzLmltYWdlRWRpdG9yLmdldE9iamVjdFByb3BlcnRpZXMoXHJcbiAgICAgICAgdGhpcy5hY3RpdmVPYmplY3RJZCxcclxuICAgICAgICAndHlwZSdcclxuICAgICAgKTtcclxuICAgICAgaWYgKHByb3BzICE9IG51bGwgJiYgKHByb3BzLnR5cGUgPT09ICdwYXRoJyB8fCBwcm9wcy50eXBlID09PSAnbGluZScpKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBudWxsO1xyXG4gICAgICAgIHN3aXRjaCAoY2hhbmdlZFByb3BlcnR5KSB7XHJcbiAgICAgICAgICBjYXNlICdzdHJva2VXaWR0aCc6XHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuZHJhd1N0cm9rZVdpZHRoVmFsdWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnc3Ryb2tlQ29sb3InOlxyXG4gICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogdGhpcy5kcmF3U3Ryb2tlQ29sb3IsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNTaWxlbnQpIHtcclxuICAgICAgICAgIHRoaXMuaW1hZ2VFZGl0b3Iuc2V0T2JqZWN0UHJvcGVydGllc1F1aWV0bHkoXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlT2JqZWN0SWQsXHJcbiAgICAgICAgICAgIHBhcmFtZXRlcnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmltYWdlRWRpdG9yLnNldE9iamVjdFByb3BlcnRpZXMoXHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVPYmplY3RJZCxcclxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInR1aS1pbWFnZS1lZGl0b3ItbWVudS1kcmF3XCI+XHJcbiAgPGRpdiBjbGFzcz1cInR1aS1pbWFnZS1lZGl0b3Itc3VibWVudS1pdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGllLWRyYXctbGluZS1zZWxlY3QtYnV0dG9uXCI+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInR1aS1pbWFnZS1lZGl0b3ItZC1mbGV4IHR1aS1pbWFnZS1lZGl0b3ItZmxleC1yb3cgdHVpLWltYWdlLWVkaXRvci1hbGlnbi1pdGVtcy1jZW50ZXIgdHVpLWltYWdlLWVkaXRvci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHR1aS1pbWFnZS1lZGl0b3ItbXktM1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAoY2xpY2spPVwic2V0RHJhd1R5cGUoJ2ZyZWUnKVwiXHJcbiAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICd0dWktaW1hZ2UtZWRpdG9yLWJ1dHRvbiBmcmVlICcgK1xyXG4gICAgICAgICAgICAoZHJhd1R5cGUgPT0gJ2ZyZWUnID8gJ2FjdGl2ZScgOiAnJylcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cInN2Z19pYy1zdWJtZW51XCI+XHJcbiAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2ljLWRyYXctZnJlZVwiIGNsYXNzPVwibm9ybWFsIHVzZS1kZWZhdWx0XCI+PC91c2U+XHJcbiAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2ljLWRyYXctZnJlZVwiIGNsYXNzPVwiYWN0aXZlIHVzZS1kZWZhdWx0XCI+PC91c2U+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgIHt7IFwidHVpLWltYWdlLWVkaXRvci1hbmd1bGFyLXN1Ym1lbnVzLWRyYXctZnJlZVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIChjbGljayk9XCJzZXREcmF3VHlwZSgnbGluZScpXCJcclxuICAgICAgICAgIFtjbGFzc109XCJcclxuICAgICAgICAgICAgJ3R1aS1pbWFnZS1lZGl0b3ItYnV0dG9uIGxpbmUgJyArXHJcbiAgICAgICAgICAgIChkcmF3VHlwZSA9PSAnbGluZScgPyAnYWN0aXZlJyA6ICcnKVxyXG4gICAgICAgICAgXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwic3ZnX2ljLXN1Ym1lbnVcIj5cclxuICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjaWMtZHJhdy1saW5lXCIgY2xhc3M9XCJub3JtYWwgdXNlLWRlZmF1bHRcIj48L3VzZT5cclxuICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjaWMtZHJhdy1saW5lXCIgY2xhc3M9XCJhY3RpdmUgdXNlLWRlZmF1bHRcIj48L3VzZT5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAge3sgXCJ0dWktaW1hZ2UtZWRpdG9yLWFuZ3VsYXItc3VibWVudXMtZHJhdy1zdHJhaWdodFwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dWktaW1hZ2UtZWRpdG9yLXBhcnRpdGlvblwiPlxyXG4gICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cInRpZS1kcmF3LWNvbG9yIHR1aS1pbWFnZS1lZGl0b3ItYnV0dG9uIHR1aS1pbWFnZS1lZGl0b3ItYnV0dG9uLWNvbG9yLXBpY2tlciB0dWktaW1hZ2UtZWRpdG9yLWQtZmxleCB0dWktaW1hZ2UtZWRpdG9yLWZsZXgtY29sdW1uXCJcclxuICAgICAgICAgIHRpdGxlPVwiQ29sb3JcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgcmVhZG9ubHlcclxuICAgICAgICAgICAgICBjbGFzcz1cInRpZS1kcmF3LWNvbG9yLXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmRdPVwiZHJhd1N0cm9rZUNvbG9yXCJcclxuICAgICAgICAgICAgICBbKGNvbG9yUGlja2VyKV09XCJkcmF3U3Ryb2tlQ29sb3JcIlxyXG4gICAgICAgICAgICAgIFtjcE91dHB1dEZvcm1hdF09XCIncmdiYSdcIlxyXG4gICAgICAgICAgICAgIFtjcFByZXNldENvbG9yc109XCJkZWZhdWx0RHJhd1NoYXBlQ29sb3JzXCJcclxuICAgICAgICAgICAgICBbY3BVc2VSb290Vmlld0NvbnRhaW5lcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAoY29sb3JQaWNrZXJDaGFuZ2UpPVwiZHJhd1N0cm9rZUNvbG9yQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICB7eyBcInR1aS1pbWFnZS1lZGl0b3ItYW5ndWxhci1zdWJtZW51cy1kcmF3LWNvbG9yXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgPC9kaXY+PC9sYWJlbFxyXG4gICAgICAgICAgPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidHVpLWltYWdlLWVkaXRvci1uZXdsaW5lIHR1aS1pbWFnZS1lZGl0b3ItcmFuZ2Utd3JhcCB0dWktaW1hZ2UtZWRpdG9yLWQtZmxleCB0dWktaW1hZ2UtZWRpdG9yLWZsZXgtcm93IHR1aS1pbWFnZS1lZGl0b3ItYWxpZ24taXRlbXMtY2VudGVyIHR1aS1pbWFnZS1lZGl0b3ItanVzdGlmeS1jb250ZW50LWNlbnRlciB0dWktaW1hZ2UtZWRpdG9yLW15LTNcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFuZ2VcIj57e1xyXG4gICAgICAgICAgXCJ0dWktaW1hZ2UtZWRpdG9yLWFuZ3VsYXItc3VibWVudXMtZHJhdy1zdHJva2VXaWR0aFwiIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgfX08L2xhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInJhbmdlXCJcclxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZHJhd1N0cm9rZVdpZHRoVmFsdWVcIlxyXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZHJhd1N0cm9rZVdpZHRoQ2hhbmdlZCgkZXZlbnQsIHRydWUpXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwiZHJhd1N0cm9rZVdpZHRoQ2hhbmdlZCgkZXZlbnQsIGZhbHNlKVwiXHJcbiAgICAgICAgICBtaW49XCI1XCJcclxuICAgICAgICAgIG1heD1cIjMwXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiXHJcbiAgICAgICAgICBtaW49XCI1XCJcclxuICAgICAgICAgIG1heD1cIjMwXCJcclxuICAgICAgICAgIHN0ZXA9XCIxXCJcclxuICAgICAgICAgIGNsYXNzPVwidGllLWRyYXctcmFuZ2UtdmFsdWUgdHVpLWltYWdlLWVkaXRvci1yYW5nZS12YWx1ZVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImRyYXdTdHJva2VXaWR0aFZhbHVlXCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImRyYXdTdHJva2VXaWR0aENoYW5nZWQoJGV2ZW50LCB0cnVlKVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cImRyYXdTdHJva2VXaWR0aENoYW5nZWQoJGV2ZW50LCBmYWxzZSlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|