genassist-chat-react 1.0.24 → 1.0.25
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/dist/components/GenAgentConfigPanel.d.ts +8 -0
- package/dist/components/GenAgentConfigPanel.js +30 -13
- package/dist/hooks/useChat.d.ts +2 -2
- package/dist/hooks/useChat.js +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/services/chatService.d.ts +2 -2
- package/dist/services/chatService.js +10 -8
- package/package.json +2 -2
|
@@ -13,6 +13,11 @@ export interface ChatSettingsConfig {
|
|
|
13
13
|
agentName: string;
|
|
14
14
|
logoUrl?: string;
|
|
15
15
|
}
|
|
16
|
+
export interface FeatureFlags {
|
|
17
|
+
useAudio?: boolean;
|
|
18
|
+
useFile?: boolean;
|
|
19
|
+
useWs?: boolean;
|
|
20
|
+
}
|
|
16
21
|
export interface GenAgentConfigPanelProps {
|
|
17
22
|
theme?: ChatTheme;
|
|
18
23
|
onThemeChange?: (next: ChatTheme) => void;
|
|
@@ -20,6 +25,8 @@ export interface GenAgentConfigPanelProps {
|
|
|
20
25
|
onChatSettingsChange?: (next: ChatSettingsConfig) => void;
|
|
21
26
|
metadata?: Record<string, any>;
|
|
22
27
|
onMetadataChange?: (next: Record<string, any>) => void;
|
|
28
|
+
featureFlags?: FeatureFlags;
|
|
29
|
+
onFeatureFlagsChange?: (next: FeatureFlags) => void;
|
|
23
30
|
defaultOpen?: {
|
|
24
31
|
appearance?: boolean;
|
|
25
32
|
settings?: boolean;
|
|
@@ -29,6 +36,7 @@ export interface GenAgentConfigPanelProps {
|
|
|
29
36
|
theme: ChatTheme;
|
|
30
37
|
chatSettings: ChatSettingsConfig;
|
|
31
38
|
metadata: Record<string, any>;
|
|
39
|
+
featureFlags: FeatureFlags;
|
|
32
40
|
}) => void;
|
|
33
41
|
onCancel?: () => void;
|
|
34
42
|
style?: React.CSSProperties;
|
|
@@ -35,6 +35,11 @@ var defaultSettings = {
|
|
|
35
35
|
agentName: 'Agent',
|
|
36
36
|
logoUrl: '',
|
|
37
37
|
};
|
|
38
|
+
var defaultFeatureFlags = {
|
|
39
|
+
useAudio: false,
|
|
40
|
+
useFile: false,
|
|
41
|
+
useWs: false,
|
|
42
|
+
};
|
|
38
43
|
function objectToParams(obj) {
|
|
39
44
|
if (!obj)
|
|
40
45
|
return [];
|
|
@@ -59,11 +64,12 @@ function paramsToObject(params) {
|
|
|
59
64
|
}
|
|
60
65
|
export var GenAgentConfigPanel = function (_a) {
|
|
61
66
|
var _b, _c;
|
|
62
|
-
var themeProp = _a.theme, onThemeChange = _a.onThemeChange, chatSettingsProp = _a.chatSettings, onChatSettingsChange = _a.onChatSettingsChange, metadataProp = _a.metadata, onMetadataChange = _a.onMetadataChange, defaultOpen = _a.defaultOpen, onSave = _a.onSave, onCancel = _a.onCancel, style = _a.style;
|
|
67
|
+
var themeProp = _a.theme, onThemeChange = _a.onThemeChange, chatSettingsProp = _a.chatSettings, onChatSettingsChange = _a.onChatSettingsChange, metadataProp = _a.metadata, onMetadataChange = _a.onMetadataChange, featureFlagsProp = _a.featureFlags, onFeatureFlagsChange = _a.onFeatureFlagsChange, defaultOpen = _a.defaultOpen, onSave = _a.onSave, onCancel = _a.onCancel, style = _a.style;
|
|
63
68
|
// Controlled or internal state fallbacks
|
|
64
69
|
var _d = useState(themeProp || defaultTheme), theme = _d[0], setTheme = _d[1];
|
|
65
70
|
var _e = useState(chatSettingsProp || defaultSettings), chatSettings = _e[0], setChatSettings = _e[1];
|
|
66
71
|
var _f = useState(objectToParams(metadataProp)), params = _f[0], setParams = _f[1];
|
|
72
|
+
var _g = useState(featureFlagsProp || defaultFeatureFlags), featureFlags = _g[0], setFeatureFlags = _g[1];
|
|
67
73
|
useEffect(function () {
|
|
68
74
|
if (themeProp)
|
|
69
75
|
setTheme(themeProp);
|
|
@@ -76,19 +82,23 @@ export var GenAgentConfigPanel = function (_a) {
|
|
|
76
82
|
if (metadataProp)
|
|
77
83
|
setParams(objectToParams(metadataProp));
|
|
78
84
|
}, [metadataProp]);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
var
|
|
85
|
+
useEffect(function () {
|
|
86
|
+
if (featureFlagsProp)
|
|
87
|
+
setFeatureFlags(featureFlagsProp);
|
|
88
|
+
}, [featureFlagsProp]);
|
|
89
|
+
var _h = useState(typeof (defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.appearance) === 'boolean' ? !!(defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.appearance) : true), showAppearance = _h[0], setShowAppearance = _h[1];
|
|
90
|
+
var _j = useState(typeof (defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.settings) === 'boolean' ? !!(defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.settings) : false), showSettings = _j[0], setShowSettings = _j[1];
|
|
91
|
+
var _k = useState(typeof (defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.metadata) === 'boolean' ? !!(defaultOpen === null || defaultOpen === void 0 ? void 0 : defaultOpen.metadata) : false), showMetadata = _k[0], setShowMetadata = _k[1];
|
|
92
|
+
var _l = useState(false), showAddParam = _l[0], setShowAddParam = _l[1];
|
|
93
|
+
var _m = useState({
|
|
84
94
|
name: 'param_1',
|
|
85
95
|
type: 'string',
|
|
86
96
|
required: false,
|
|
87
97
|
value: '',
|
|
88
|
-
}), draftParam =
|
|
89
|
-
var
|
|
90
|
-
var
|
|
91
|
-
var
|
|
98
|
+
}), draftParam = _m[0], setDraftParam = _m[1];
|
|
99
|
+
var _o = useState(false), showEditParam = _o[0], setShowEditParam = _o[1];
|
|
100
|
+
var _p = useState(null), editIndex = _p[0], setEditIndex = _p[1];
|
|
101
|
+
var _q = useState({ name: '', type: 'string', required: false, value: '' }), editDraft = _q[0], setEditDraft = _q[1];
|
|
92
102
|
var metadata = useMemo(function () { return paramsToObject(params); }, [params]);
|
|
93
103
|
var handleThemeChange = function (key, value) {
|
|
94
104
|
var _a;
|
|
@@ -104,6 +114,13 @@ export var GenAgentConfigPanel = function (_a) {
|
|
|
104
114
|
setChatSettings(next);
|
|
105
115
|
onChatSettingsChange === null || onChatSettingsChange === void 0 ? void 0 : onChatSettingsChange(next);
|
|
106
116
|
};
|
|
117
|
+
var handleFeatureFlagChange = function (key, value) {
|
|
118
|
+
var _a;
|
|
119
|
+
var next = __assign(__assign({}, featureFlags), (_a = {}, _a[key] = value, _a));
|
|
120
|
+
if (!featureFlagsProp)
|
|
121
|
+
setFeatureFlags(next);
|
|
122
|
+
onFeatureFlagsChange === null || onFeatureFlagsChange === void 0 ? void 0 : onFeatureFlagsChange(next);
|
|
123
|
+
};
|
|
107
124
|
var handleAddParam = function () {
|
|
108
125
|
var name = draftParam.name.trim();
|
|
109
126
|
if (!name)
|
|
@@ -286,7 +303,7 @@ export var GenAgentConfigPanel = function (_a) {
|
|
|
286
303
|
backgroundColor: '#fafafa',
|
|
287
304
|
};
|
|
288
305
|
var handleSave = function () {
|
|
289
|
-
onSave === null || onSave === void 0 ? void 0 : onSave({ theme: theme, chatSettings: chatSettings, metadata: metadata });
|
|
306
|
+
onSave === null || onSave === void 0 ? void 0 : onSave({ theme: theme, chatSettings: chatSettings, metadata: metadata, featureFlags: featureFlags });
|
|
290
307
|
};
|
|
291
308
|
return (_jsxs("div", { style: containerStyle, children: [_jsxs("div", { style: { borderBottom: '1px solid #e0e0e0' }, children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowAppearance(!showAppearance); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "APPEARANCE" }), showAppearance ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showAppearance && (_jsxs(_Fragment, { children: [_jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Primary Color" }), _jsx("input", { type: "color", value: theme.primaryColor, onChange: function (e) { return handleThemeChange('primaryColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Secondary Color" }), _jsx("input", { type: "color", value: theme.secondaryColor, onChange: function (e) { return handleThemeChange('secondaryColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Background Color" }), _jsx("input", { type: "color", value: theme.backgroundColor, onChange: function (e) { return handleThemeChange('backgroundColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Text Color" }), _jsx("input", { type: "color", value: theme.textColor, onChange: function (e) { return handleThemeChange('textColor', e.target.value); }, style: colorPickerStyle })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Font Size" }), _jsxs("select", { style: selectStyle, value: theme.fontSize, onChange: function (e) { return handleThemeChange('fontSize', e.target.value); }, children: [_jsx("option", { value: "12px", children: "Small (12px)" }), _jsx("option", { value: "15px", children: "Medium (15px)" }), _jsx("option", { value: "18px", children: "Large (18px)" })] })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Font Family" }), _jsxs("select", { style: selectStyle, value: theme.fontFamily.split(',')[0].trim(), onChange: function (e) {
|
|
292
309
|
var v = e.target.value;
|
|
@@ -298,7 +315,7 @@ export var GenAgentConfigPanel = function (_a) {
|
|
|
298
315
|
? "'Times New Roman', serif"
|
|
299
316
|
: 'monospace';
|
|
300
317
|
handleThemeChange('fontFamily', ff);
|
|
301
|
-
}, children: [_jsx("option", { value: "Inter", children: "Inter" }), _jsx("option", { value: "Arial", children: "Arial" }), _jsx("option", { value: "Times New Roman", children: "Times New Roman" }), _jsx("option", { value: "monospace", children: "Monospace" })] })] })] }))] }), _jsxs("div", { children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowSettings(!showSettings); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "SETTINGS" }), showSettings ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showSettings && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '16px 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Name" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.name, onChange: function (e) { return handleSettingChange('name', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Description" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.description, onChange: function (e) { return handleSettingChange('description', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Agent Name" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.agentName, onChange: function (e) { return handleSettingChange('agentName', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 16px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Logo URL" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.logoUrl || '', onChange: function (e) { return handleSettingChange('logoUrl', e.target.value); }, placeholder: "https://example.com/logo.png" })] })] }))] }), _jsxs("div", { children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowMetadata(!showMetadata); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "METADATA" }), showMetadata ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showMetadata && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '12px 16px' }, children: [_jsx("div", { style: { fontSize: 13, color: '#555', marginBottom: 10 }, children: "Define key/value parameters sent as chat metadata." }), _jsxs("button", { style: fullWidthActionButton, onClick: function () { return setShowAddParam(true); }, children: [_jsx(Plus, { size: 18 }), _jsx("span", { children: "Add Parameter" })] })] }), params.length > 0 && (_jsx("div", { style: { padding: '2px 16px 12px', display: 'flex', flexDirection: 'column', gap: 6 }, children: params.map(function (p, idx) {
|
|
318
|
+
}, children: [_jsx("option", { value: "Inter", children: "Inter" }), _jsx("option", { value: "Arial", children: "Arial" }), _jsx("option", { value: "Times New Roman", children: "Times New Roman" }), _jsx("option", { value: "monospace", children: "Monospace" })] })] })] }))] }), _jsxs("div", { children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowSettings(!showSettings); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "SETTINGS" }), showSettings ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showSettings && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '16px 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Name" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.name, onChange: function (e) { return handleSettingChange('name', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Description" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.description, onChange: function (e) { return handleSettingChange('description', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 12px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Agent Name" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.agentName, onChange: function (e) { return handleSettingChange('agentName', e.target.value); } })] }), _jsxs("div", { style: { padding: '0 16px 16px' }, children: [_jsx("label", { style: __assign(__assign({}, labelStyle), { display: 'block', marginBottom: 8 }), children: "Logo URL" }), _jsx("input", { type: "text", style: __assign(__assign({}, inputStyle), { height: 40, padding: '0 12px', boxSizing: 'border-box' }), value: chatSettings.logoUrl || '', onChange: function (e) { return handleSettingChange('logoUrl', e.target.value); }, placeholder: "https://example.com/logo.png" })] }), _jsxs("div", { style: { padding: '16px', borderTop: '1px solid #e0e0e0', marginTop: 8 }, children: [_jsx("div", { style: { fontSize: 13, color: '#555', marginBottom: 12, fontWeight: 500 }, children: "Features" }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Use Audio" }), _jsx("input", { type: "checkbox", checked: !!featureFlags.useAudio, onChange: function (e) { return handleFeatureFlagChange('useAudio', e.target.checked); }, style: { width: 20, height: 20, cursor: 'pointer' } })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Use File" }), _jsx("input", { type: "checkbox", checked: !!featureFlags.useFile, onChange: function (e) { return handleFeatureFlagChange('useFile', e.target.checked); }, style: { width: 20, height: 20, cursor: 'pointer' } })] }), _jsxs("div", { style: formGroupStyle, children: [_jsx("label", { style: labelStyle, children: "Use WebSocket" }), _jsx("input", { type: "checkbox", checked: !!featureFlags.useWs, onChange: function (e) { return handleFeatureFlagChange('useWs', e.target.checked); }, style: { width: 20, height: 20, cursor: 'pointer' } })] })] })] }))] }), _jsxs("div", { children: [_jsxs("div", { style: sectionHeaderStyle, onClick: function () { return setShowMetadata(!showMetadata); }, children: [_jsx("h3", { style: sectionTitleStyle, children: "METADATA" }), showMetadata ? _jsx(ChevronUp, { size: 16 }) : _jsx(ChevronDown, { size: 16 })] }), showMetadata && (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '12px 16px' }, children: [_jsx("div", { style: { fontSize: 13, color: '#555', marginBottom: 10 }, children: "Define key/value parameters sent as chat metadata." }), _jsxs("button", { style: fullWidthActionButton, onClick: function () { return setShowAddParam(true); }, children: [_jsx(Plus, { size: 18 }), _jsx("span", { children: "Add Parameter" })] })] }), params.length > 0 && (_jsx("div", { style: { padding: '2px 16px 12px', display: 'flex', flexDirection: 'column', gap: 6 }, children: params.map(function (p, idx) {
|
|
302
319
|
var _a;
|
|
303
320
|
var displayVal = p.type === 'boolean' ? (p.value ? 'True' : 'False') : String((_a = p.value) !== null && _a !== void 0 ? _a : '');
|
|
304
321
|
return (_jsxs("div", { style: metaRowStyle, children: [_jsx("div", { style: metaNameStyle, children: p.name }), _jsx("div", { style: metaValueStyle, title: displayVal, children: displayVal }), _jsx("button", { title: "Edit", style: smallIconButton, onClick: function () {
|
|
@@ -359,4 +376,4 @@ var modalFooterStyle = {
|
|
|
359
376
|
borderTop: '1px solid #eee',
|
|
360
377
|
backgroundColor: '#fafafa',
|
|
361
378
|
};
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDb25maWdQYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0dlbkFnZW50Q29uZmlnUGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBZSxNQUFNLGNBQWMsQ0FBQztBQTZDekYsSUFBTSxZQUFZLEdBQWM7SUFDOUIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsY0FBYyxFQUFFLFNBQVM7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixRQUFRLEVBQUUsTUFBTTtDQUNqQixDQUFDO0FBRUYsSUFBTSxlQUFlLEdBQXVCO0lBQzFDLElBQUksRUFBRSxXQUFXO0lBQ2pCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLE9BQU8sRUFBRSxFQUFFO0NBQ1osQ0FBQztBQUVGLFNBQVMsY0FBYyxDQUFDLEdBQW9DO0lBQzFELElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDcEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUM7UUFDNUIsSUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLElBQUksSUFBSSxHQUFjLFFBQVEsQ0FBQztRQUMvQixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7WUFBRSxJQUFJLEdBQUcsUUFBUSxDQUFDO2FBQ3RDLElBQUksT0FBTyxDQUFDLEtBQUssU0FBUztZQUFFLElBQUksR0FBRyxTQUFTLENB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LEdBQXdCO0lBQzVDLE9BQU8sRUFBRSxFQUFFO0lBQ1gsT0FBTyxFQUFFLE1BQU07SUFDZixjQUFjLEVBQUUsVUFBVTtJQUMxQixHQUFHLEVBQUUsQ0FBQztJQUNOLFNBQVMsRUFBRSxnQkFBZ0I7SUFDM0IsZUFBZSxFQUFFLFNBQVM7Q0FDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hldnJvbkRvd24sIENoZXZyb25VcCwgUGx1cywgVHJhc2gyLCBQZW5jaWwsIFgsIFNwYXJrbGVzIH0gZnJvbSAnbHVjaWRlLXJlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0VGhlbWUge1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZztcbiAgc2Vjb25kYXJ5Q29sb3I6IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG4gIHRleHRDb2xvcjogc3RyaW5nO1xuICBmb250RmFtaWx5OiBzdHJpbmc7XG4gIGZvbnRTaXplOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhdFNldHRpbmdzQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhZ2VudE5hbWU6IHN0cmluZztcbiAgbG9nb1VybD86IHN0cmluZztcbn1cblxudHlwZSBQYXJhbVR5cGUgPSAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nO1xuXG5pbnRlcmZhY2UgTWV0YWRhdGFQYXJhbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogUGFyYW1UeXBlO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5BZ2VudENvbmZpZ1BhbmVsUHJvcHMge1xuICB0aGVtZT86IENoYXRUaGVtZTtcbiAgb25UaGVtZUNoYW5nZT86IChuZXh0OiBDaGF0VGhlbWUpID0+IHZvaWQ7XG5cbiAgY2hhdFNldHRpbmdzPzogQ2hhdFNldHRpbmdzQ29uZmlnO1xuICBvbkNoYXRTZXR0aW5nc0NoYW5nZT86IChuZXh0OiBDaGF0U2V0dGluZ3NDb25maWcpID0+IHZvaWQ7XG5cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbk1ldGFkYXRhQ2hhbmdlPzogKG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG5cbiAgZGVmYXVsdE9wZW4/OiB7IGFwcGVhcmFuY2U/OiBib29sZWFuOyBzZXR0aW5ncz86IGJvb2xlYW47IG1ldGFkYXRhPzogYm9vbGVhbiB9O1xuICBvblNhdmU/OiAocGF5bG9hZDogeyB0aGVtZTogQ2hhdFRoZW1lOyBjaGF0U2V0dGluZ3M6IENoYXRTZXR0aW5nc0NvbmZpZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfSkgPT4gdm9pZDtcbiAgb25DYW5jZWw/OiAoKSA9PiB2b2lkO1xuXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn1cblxuY29uc3QgZGVmYXVsdFRoZW1lOiBDaGF0VGhlbWUgPSB7XG4gIHByaW1hcnlDb2xvcjogJyM0RjQ2RTUnLFxuICBzZWNvbmRhcnlDb2xvcjogJyNmNWY1ZjUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgdGV4dENvbG9yOiAnIzAwMDAwMCcsXG4gIGZvbnRGYW1pbHk6ICdJbnRlciwgc2Fucy1zZXJpZicsXG4gIGZvbnRTaXplOiAnMTVweCcsXG59O1xuXG5jb25zdCBkZWZhdWx0U2V0dGluZ3M6IENoYXRTZXR0aW5nc0NvbmZpZyA9IHtcbiAgbmFtZTogJ0dlbmFzc2lzdCcsXG4gIGRlc2NyaXB0aW9uOiAnU3VwcG9ydCcsXG4gIGFnZW50TmFtZTogJ0FnZW50JyxcbiAgbG9nb1VybDogJycsXG59O1xuXG5mdW5jdGlvbiBvYmplY3RUb1BhcmFtcyhvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQpOiBNZXRhZGF0YVBhcmFtW10ge1xuICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoKGspID0+IHtcbiAgICBjb25zdCB2ID0gb2JqW2tdO1xuICAgIGxldCB0eXBlOiBQYXJhbVR5cGUgPSAnc3RyaW5nJztcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB0eXBlID0gJ251bWJlcic7XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykgdHlwZSA9ICdib29sZWFuJztcbiAgICByZXR1cm4geyBuYW1lOiBrLCB0eXBlLCByZXF1aXJlZDogZmFsc2UsIHZhbHVlOiB2IH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJhbXNUb09iamVjdChwYXJhbXM6IE1ldGFkYXRhUGFyYW1bXSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHBhcmFtcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwLnZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb1twLm5hbWVdID0gcC52YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbztcbn1cblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q29uZmlnUGFuZWw6IFJlYWN0LkZDPEdlbkFnZW50Q29uZmlnUGFuZWxQcm9wcz4gPSAoe1xuICB0aGVtZTogdGhlbWVQcm9wLFxuICBvblRoZW1lQ2hhbmdlLFxuICBjaGF0U2V0dGluZ3M6IGNoYXRTZXR0aW5nc1Byb3AsXG4gIG9uQ2hhdFNldHRpbmdzQ2hhbmdlLFxuICBtZXRhZGF0YTogbWV0YWRhdGFQcm9wLFxuICBvbk1ldGFkYXRhQ2hhbmdlLFxuICBkZWZhdWx0T3BlbixcbiAgb25TYXZlLFxuICBvbkNhbmNlbCxcbiAgc3R5bGUsXG59KSA9PiB7XG4gIC8vIENvbnRyb2xsZWQgb3IgaW50ZXJuYWwgc3RhdGUgZmFsbGJhY2tzXG4gIGNvbnN0IFt0aGVtZSwgc2V0VGhlbWVdID0gdXNlU3RhdGU8Q2hhdFRoZW1lPih0aGVtZVByb3AgfHwgZGVmYXVsdFRoZW1lKTtcbiAgY29uc3QgW2NoYXRTZXR0aW5ncywgc2V0Q2hhdFNldHRpbmdzXSA9IHVzZVN0YXRlPENoYXRTZXR0aW5nc0NvbmZpZz4oY2hhdFNldHRpbmdzUHJvcCB8fCBkZWZhdWx0U2V0dGluZ3MpO1xuICBjb25zdCBbcGFyYW1zLCBzZXRQYXJhbXNdID0gdXNlU3RhdGU8TWV0YWRhdGFQYXJhbVtdPihvYmplY3RUb1BhcmFtcyhtZXRhZGF0YVByb3ApKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGVtZVByb3ApIHNldFRoZW1lKHRoZW1lUHJvcCk7XG4gIH0sIFt0aGVtZVByb3BdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0U2V0dGluZ3NQcm9wKSBzZXRDaGF0U2V0dGluZ3MoY2hhdFNldHRpbmdzUHJvcCk7XG4gIH0sIFtjaGF0U2V0dGluZ3NQcm9wXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWV0YWRhdGFQcm9wKSBzZXRQYXJhbXMob2JqZWN0VG9QYXJhbXMobWV0YWRhdGFQcm9wKSk7XG4gIH0sIFttZXRhZGF0YVByb3BdKTtcblxuICBjb25zdCBbc2hvd0FwcGVhcmFuY2UsIHNldFNob3dBcHBlYXJhbmNlXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBkZWZhdWx0T3Blbj8uYXBwZWFyYW5jZSA9PT0gJ2Jvb2xlYW4nID8gISFkZWZhdWx0T3Blbj8uYXBwZWFyYW5jZSA6IHRydWVcbiAgKTtcbiAgY29uc3QgW3Nob3dTZXR0aW5ncywgc2V0U2hvd1NldHRpbmdzXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBkZWZhdWx0T3Blbj8uc2V0dGluZ3MgPT09ICdib29sZWFuJyA/ICEhZGVmYXVsdE9wZW4/LnNldHRpbmdzIDogZmFsc2VcbiAgKTtcbiAgY29uc3QgW3Nob3dNZXRhZGF0YSwgc2V0U2hvd01ldGFkYXRhXSA9IHVzZVN0YXRlKFxuICAgIHR5cGVvZiBkZWZhdWx0T3Blbj8ubWV0YWRhdGEgPT09ICdib29sZWFuJyA/ICEhZGVmYXVsdE9wZW4/Lm1ldGFkYXRhIDogZmFsc2VcbiAgKTtcblxuICBjb25zdCBbc2hvd0FkZFBhcmFtLCBzZXRTaG93QWRkUGFyYW1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZHJhZnRQYXJhbSwgc2V0RHJhZnRQYXJhbV0gPSB1c2VTdGF0ZTxNZXRhZGF0YVBhcmFtPih7XG4gICAgbmFtZTogJ3BhcmFtXzEnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICB2YWx1ZTogJycsXG4gIH0pO1xuXG4gIGNvbnN0IFtzaG93RWRpdFBhcmFtLCBzZXRTaG93RWRpdFBhcmFtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2VkaXRJbmRleCwgc2V0RWRpdEluZGV4XSA9IHVzZVN0YXRlPG51bWJlciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZWRpdERyYWZ0LCBzZXRFZGl0RHJhZnRdID0gdXNlU3RhdGU8TWV0YWRhdGFQYXJhbT4oeyBuYW1lOiAnJywgdHlwZTogJ3N0cmluZycsIHJlcXVpcmVkOiBmYWxzZSwgdmFsdWU6ICcnIH0pO1xuXG4gIGNvbnN0IG1ldGFkYXRhID0gdXNlTWVtbygoKSA9PiBwYXJhbXNUb09iamVjdChwYXJhbXMpLCBbcGFyYW1zXSk7XG5cbiAgY29uc3QgaGFuZGxlVGhlbWVDaGFuZ2UgPSAoa2V5OiBrZXlvZiBDaGF0VGhlbWUsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi50aGVtZSwgW2tleV06IHZhbHVlIH0gYXMgQ2hhdFRoZW1lO1xuICAgIGlmICghdGhlbWVQcm9wKSBzZXRUaGVtZShuZXh0KTtcbiAgICBvblRoZW1lQ2hhbmdlPy4obmV4dCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2V0dGluZ0NoYW5nZSA9IChrZXk6IGtleW9mIENoYXRTZXR0aW5nc0NvbmZpZywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG5leHQgPSB7IC4uLmNoYXRTZXR0aW5ncywgW2tleV06IHZhbHVlIH0gYXMgQ2hhdFNldHRpbmdzQ29uZmlnO1xuICAgIGlmICghY2hhdFNldHRpbmdzUHJvcCkgc2V0Q2hhdFNldHRpbmdzKG5leHQpO1xuICAgIG9uQ2hhdFNldHRpbmdzQ2hhbmdlPy4obmV4dCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQWRkUGFyYW0gPSAoKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGRyYWZ0UGFyYW0ubmFtZS50cmltKCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgaWYgKHBhcmFtcy5zb21lKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpKSByZXR1cm47XG4gICAgY29uc3Qgbm9ybWFsaXplZDogTWV0YWRhdGFQYXJhbSA9IHtcbiAgICAgIC4uLmRyYWZ0UGFyYW0sXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWU6XG4gICAgICAgIHR5cGVvZiBkcmFmdFBhcmFtLnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgID8gZHJhZnRQYXJhbS52YWx1ZVxuICAgICAgICAgIDogZHJhZnRQYXJhbS50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gMFxuICAgICAgICAgIDogZHJhZnRQYXJhbS50eXBlID09PSAnYm9vbGVhbidcbiAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgOiAnJyxcbiAgICB9O1xuICAgIGNvbnN0IG5leHQgPSBbLi4ucGFyYW1zLCBub3JtYWxpemVkXTtcbiAgICBzZXRQYXJhbXMobmV4dCk7XG4gICAgb25NZXRhZGF0YUNoYW5nZT8uKHBhcmFtc1RvT2JqZWN0KG5leHQpKTtcbiAgICBzZXREcmFmdFBhcmFtKHsgbmFtZTogJ3BhcmFtXzEnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCB2YWx1ZTogJycgfSk7XG4gICAgc2V0U2hvd0FkZFBhcmFtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBjb2VyY2VGb3JUeXBlID0gKHZhbDogYW55LCB0eXBlOiBQYXJhbVR5cGUpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIodmFsKTtcbiAgICAgIHJldHVybiBpc05hTihuKSA/IDAgOiBuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsO1xuICAgICAgY29uc3QgcyA9IFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gcyA9PT0gJ3RydWUnIHx8IHMgPT09ICcxJyB8fCBzID09PSAneWVzJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWwgPz8gJycpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUVkaXRTYXZlID0gKCkgPT4ge1xuICAgIGlmIChlZGl0SW5kZXggPT09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBuZXdOYW1lID0gZWRpdERyYWZ0Lm5hbWUudHJpbSgpO1xuICAgIGlmICghbmV3TmFtZSkgcmV0dXJuO1xuICAgIGlmIChwYXJhbXMuc29tZSgocCwgaSkgPT4gaSAhPT0gZWRpdEluZGV4ICYmIHAubmFtZSA9PT0gbmV3TmFtZSkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gWy4uLnBhcmFtc107XG4gICAgY29uc3Qgb2xkID0gbmV4dFtlZGl0SW5kZXhdO1xuICAgIGNvbnN0IHVwZGF0ZWQ6IE1ldGFkYXRhUGFyYW0gPSB7IC4uLm9sZCwgLi4uZWRpdERyYWZ0IH07XG4gICAgdXBkYXRlZC52YWx1ZSA9IGNvZXJjZUZvclR5cGUob2xkLnZhbHVlLCBlZGl0RHJhZnQudHlwZSk7XG4gICAgbmV4dFtlZGl0SW5kZXhdID0gdXBkYXRlZDtcbiAgICBzZXRQYXJhbXMobmV4dCk7XG4gICAgb25NZXRhZGF0YUNoYW5nZT8uKHBhcmFtc1RvT2JqZWN0KG5leHQpKTtcbiAgICBzZXRTaG93RWRpdFBhcmFtKGZhbHNlKTtcbiAgICBzZXRFZGl0SW5kZXgobnVsbCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlUGFyYW0gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBwYXJhbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgc2V0UGFyYW1zKG5leHQpO1xuICAgIG9uTWV0YWRhdGFDaGFuZ2U/LihwYXJhbXNUb09iamVjdChuZXh0KSk7XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogJzEnLFxuICAgIG1heFdpZHRoOiAzMDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjEpJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIC4uLnN0eWxlLFxuICB9O1xuXG4gIGNvbnN0IHNlY3Rpb25IZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAxNixcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXG4gIH07XG5cbiAgY29uc3Qgc2VjdGlvblRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRTaXplOiAxMixcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgICBsZXR0ZXJTcGFjaW5nOiAxLFxuICB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXM7XG5cbiAgY29uc3QgZm9ybUdyb3VwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzE2cHggMTZweCAxMnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3JkZXJCb3R0b206ICdub25lJyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBmb250U2l6ZTogMTQsIGNvbG9yOiAnIzMzMycgfTtcbiAgY29uc3QgY29sb3JQaWNrZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBhcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgd2lkdGg6IDEyMCxcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogNCxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuXG4gIGNvbnN0IHNlbGVjdFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAxNDAsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBwYWRkaW5nOiAnMCA4cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgZm9udFNpemU6IDE0LFxuICB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXM7XG5cbiAgY29uc3QgaW5wdXRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogMzIsXG4gICAgcGFkZGluZzogJzAgOHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgIGZvbnRTaXplOiAxNCxcbiAgfTtcblxuICBjb25zdCBhY3Rpb25CYXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAxMixcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICAgZ2FwOiA4LFxuICAgIGJvcmRlclRvcDogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmFmYWZhJyxcbiAgfTtcblxuICBjb25zdCBjYW5jZWxCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH07XG4gIGNvbnN0IHNhdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyMxMTE4MjcnLFxuICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICMwYjEyMjAnLFxuICAgIGJvcmRlclJhZGl1czogNixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgfTtcblxuICBjb25zdCBmdWxsV2lkdGhBY3Rpb25CdXR0b246IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogOCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDEycHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udFNpemU6IDE0LFxuICAgIGNvbG9yOiAnIzExMScsXG4gIH07XG5cbiAgY29uc3Qgc21hbGxJY29uQnV0dG9uOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgd2lkdGg6IDI4LFxuICAgIGhlaWdodDogMjgsXG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH07XG5cbiAgY29uc3QgbWV0YVJvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdncmlkJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiAnMWZyIG1pbm1heCg5MHB4LCAxNTBweCkgMjhweCAyOHB4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6IDgsXG4gICAgcGFkZGluZzogJzZweCAwJyxcbiAgfTtcbiAgY29uc3QgbWV0YU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogMTMsXG4gICAgY29sb3I6ICcjMjIyJyxcbiAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfTtcbiAgY29uc3QgbWV0YVZhbHVlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWF4V2lkdGg6IDE1MCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGZvbnRTaXplOiAxMyxcbiAgICBjb2xvcjogJyMxMTEnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTZlNmU2JyxcbiAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgIHBhZGRpbmc6ICc2cHggMTBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZhZmFmYScsXG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2F2ZSA9ICgpID0+IHtcbiAgICBvblNhdmU/Lih7IHRoZW1lLCBjaGF0U2V0dGluZ3MsIG1ldGFkYXRhIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9PlxuICAgICAgey8qIEFwcGVhcmFuY2UgU2VjdGlvbiAqL31cbiAgICAgIDxkaXYgc3R5bGU9e3sgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNlMGUwZTAnIH19PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzZWN0aW9uSGVhZGVyU3R5bGV9IG9uQ2xpY2s9eygpID0+IHNldFNob3dBcHBlYXJhbmNlKCFzaG93QXBwZWFyYW5jZSl9PlxuICAgICAgICAgIDxoMyBzdHlsZT17c2VjdGlvblRpdGxlU3R5bGV9PkFQUEVBUkFOQ0U8L2gzPlxuICAgICAgICAgIHtzaG93QXBwZWFyYW5jZSA/IDxDaGV2cm9uVXAgc2l6ZT17MTZ9IC8+IDogPENoZXZyb25Eb3duIHNpemU9ezE2fSAvPn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzaG93QXBwZWFyYW5jZSAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5QcmltYXJ5IENvbG9yPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlbWUucHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGhlbWVDaGFuZ2UoJ3ByaW1hcnlDb2xvcicsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17Y29sb3JQaWNrZXJTdHlsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PlNlY29uZGFyeSBDb2xvcjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZW1lLnNlY29uZGFyeUNvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGhlbWVDaGFuZ2UoJ3NlY29uZGFyeUNvbG9yJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtjb2xvclBpY2tlclN0eWxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+QmFja2dyb3VuZCBDb2xvcjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjb2xvclwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZW1lLmJhY2tncm91bmRDb2xvcn1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVRoZW1lQ2hhbmdlKCdiYWNrZ3JvdW5kQ29sb3InLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgc3R5bGU9e2NvbG9yUGlja2VyU3R5bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5UZXh0IENvbG9yPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlbWUudGV4dENvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGhlbWVDaGFuZ2UoJ3RleHRDb2xvcicsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17Y29sb3JQaWNrZXJTdHlsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PkZvbnQgU2l6ZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoZW1lLmZvbnRTaXplfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGhlbWVDaGFuZ2UoJ2ZvbnRTaXplJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEycHhcIj5TbWFsbCAoMTJweCk8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTVweFwiPk1lZGl1bSAoMTVweCk8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMThweFwiPkxhcmdlICgxOHB4KTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PkZvbnQgRmFtaWx5PC9sYWJlbD5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgIHN0eWxlPXtzZWxlY3RTdHlsZX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlbWUuZm9udEZhbWlseS5zcGxpdCgnLCcpWzBdLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBlLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZmID1cbiAgICAgICAgICAgICAgICAgICAgdiA9PT0gJ0ludGVyJ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ0ludGVyLCBzYW5zLXNlcmlmJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdiA9PT0gJ0FyaWFsJ1xuICAgICAgICAgICAgICAgICAgICAgID8gJ0FyaWFsLCBzYW5zLXNlcmlmJ1xuICAgICAgICAgICAgICAgICAgICAgIDogdiA9PT0gJ1RpbWVzIE5ldyBSb21hbidcbiAgICAgICAgICAgICAgICAgICAgICA/IFwiJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmXCJcbiAgICAgICAgICAgICAgICAgICAgICA6ICdtb25vc3BhY2UnO1xuICAgICAgICAgICAgICAgICAgaGFuZGxlVGhlbWVDaGFuZ2UoJ2ZvbnRGYW1pbHknLCBmZik7XG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJJbnRlclwiPkludGVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFyaWFsXCI+QXJpYWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiVGltZXMgTmV3IFJvbWFuXCI+VGltZXMgTmV3IFJvbWFuPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1vbm9zcGFjZVwiPk1vbm9zcGFjZTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBTZXR0aW5ncyBTZWN0aW9uICovfVxuICAgICAgPGRpdj5cbiAgICAgICAgPGRpdiBzdHlsZT17c2VjdGlvbkhlYWRlclN0eWxlfSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93U2V0dGluZ3MoIXNob3dTZXR0aW5ncyl9PlxuICAgICAgICAgIDxoMyBzdHlsZT17c2VjdGlvblRpdGxlU3R5bGV9PlNFVFRJTkdTPC9oMz5cbiAgICAgICAgICB7c2hvd1NldHRpbmdzID8gPENoZXZyb25VcCBzaXplPXsxNn0gLz4gOiA8Q2hldnJvbkRvd24gc2l6ZT17MTZ9IC8+fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dTZXR0aW5ncyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzE2cHggMTZweCAxMnB4JyB9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IC4uLmxhYmVsU3R5bGUsIGRpc3BsYXk6ICdibG9jaycsIG1hcmdpbkJvdHRvbTogOCB9fT5OYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLmlucHV0U3R5bGUsIGhlaWdodDogNDAsIHBhZGRpbmc6ICcwIDEycHgnLCBib3hTaXppbmc6ICdib3JkZXItYm94JyB9fVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjaGF0U2V0dGluZ3MubmFtZX1cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IGhhbmRsZVNldHRpbmdDaGFuZ2UoJ25hbWUnLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCAxMnB4JyB9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IC4uLmxhYmVsU3R5bGUsIGRpc3BsYXk6ICdibG9jaycsIG1hcmdpbkJvdHRvbTogOCB9fT5EZXNjcmlwdGlvbjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5pbnB1dFN0eWxlLCBoZWlnaHQ6IDQwLCBwYWRkaW5nOiAnMCAxMnB4JywgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcgfX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y2hhdFNldHRpbmdzLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlU2V0dGluZ0NoYW5nZSgnZGVzY3JpcHRpb24nLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCAxMnB4JyB9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IC4uLmxhYmVsU3R5bGUsIGRpc3BsYXk6ICdibG9jaycsIG1hcmdpbkJvdHRvbTogOCB9fT5BZ2VudCBOYW1lPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLmlucHV0U3R5bGUsIGhlaWdodDogNDAsIHBhZGRpbmc6ICcwIDEycHgnLCBib3hTaXppbmc6ICdib3JkZXItYm94JyB9fVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjaGF0U2V0dGluZ3MuYWdlbnROYW1lfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlU2V0dGluZ0NoYW5nZSgnYWdlbnROYW1lJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcwIDE2cHggMTZweCcgfX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyAuLi5sYWJlbFN0eWxlLCBkaXNwbGF5OiAnYmxvY2snLCBtYXJnaW5Cb3R0b206IDggfX0+TG9nbyBVUkw8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uaW5wdXRTdHlsZSwgaGVpZ2h0OiA0MCwgcGFkZGluZzogJzAgMTJweCcsIGJveFNpemluZzogJ2JvcmRlci1ib3gnIH19XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NoYXRTZXR0aW5ncy5sb2dvVXJsIHx8ICcnfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlU2V0dGluZ0NoYW5nZSgnbG9nb1VybCcsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImh0dHBzOi8vZXhhbXBsZS5jb20vbG9nby5wbmdcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIE1ldGFkYXRhIFNlY3Rpb24gKi99XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzZWN0aW9uSGVhZGVyU3R5bGV9IG9uQ2xpY2s9eygpID0+IHNldFNob3dNZXRhZGF0YSghc2hvd01ldGFkYXRhKX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXtzZWN0aW9uVGl0bGVTdHlsZX0+TUVUQURBVEE8L2gzPlxuICAgICAgICAgIHtzaG93TWV0YWRhdGEgPyA8Q2hldnJvblVwIHNpemU9ezE2fSAvPiA6IDxDaGV2cm9uRG93biBzaXplPXsxNn0gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd01ldGFkYXRhICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMTJweCAxNnB4JyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTMsIGNvbG9yOiAnIzU1NScsIG1hcmdpbkJvdHRvbTogMTAgfX0+XG4gICAgICAgICAgICAgICAgRGVmaW5lIGtleS92YWx1ZSBwYXJhbWV0ZXJzIHNlbnQgYXMgY2hhdCBtZXRhZGF0YS5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2Z1bGxXaWR0aEFjdGlvbkJ1dHRvbn0gb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZFBhcmFtKHRydWUpfT5cbiAgICAgICAgICAgICAgICA8UGx1cyBzaXplPXsxOH0gLz5cbiAgICAgICAgICAgICAgICA8c3Bhbj5BZGQgUGFyYW1ldGVyPC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge3BhcmFtcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMnB4IDE2cHggMTJweCcsIGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNiB9fT5cbiAgICAgICAgICAgICAgICB7cGFyYW1zLm1hcCgocCwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsID0gcC50eXBlID09PSAnYm9vbGVhbicgPyAocC52YWx1ZSA/ICdUcnVlJyA6ICdGYWxzZScpIDogU3RyaW5nKHAudmFsdWUgPz8gJycpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrZXk9e3AubmFtZX0gc3R5bGU9e21ldGFSb3dTdHlsZX0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17bWV0YU5hbWVTdHlsZX0+e3AubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXRhVmFsdWVTdHlsZX0gdGl0bGU9e2Rpc3BsYXlWYWx9PlxuICAgICAgICAgICAgICAgICAgICAgICAge2Rpc3BsYXlWYWx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzbWFsbEljb25CdXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXRJbmRleChpZHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0RHJhZnQoeyAuLi5wIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTaG93RWRpdFBhcmFtKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BFZGl0ICR7cC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBlbmNpbCBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbW92ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17c21hbGxJY29uQnV0dG9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUmVtb3ZlUGFyYW0oaWR4KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2BSZW1vdmUgJHtwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VHJhc2gyIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogQWN0aW9uIEJ1dHRvbnMgKi99XG4gICAgICA8ZGl2IHN0eWxlPXthY3Rpb25CYXJTdHlsZX0+XG4gICAgICAgIDxidXR0b24gc3R5bGU9e2NhbmNlbEJ1dHRvblN0eWxlfSBvbkNsaWNrPXsoKSA9PiBvbkNhbmNlbD8uKCl9PkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHN0eWxlPXtzYXZlQnV0dG9uU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVNhdmV9PlNhdmUgQ2hhbmdlczwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBTaW1wbGUgUGFyYW1ldGVyIE1vZGFscyAqL31cbiAgICAgIHtzaG93QWRkUGFyYW0gJiYgKFxuICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbE92ZXJsYXlTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxTdHlsZX0+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEhlYWRlclN0eWxlfT5BZGQgUGFyYW1ldGVyPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UGFyYW1ldGVyIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS5uYW1lfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREcmFmdFBhcmFtKChkKSA9PiAoeyAuLi5kLCBuYW1lOiBlLnRhcmdldC52YWx1ZSB9KSl9XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInBhcmFtXzFcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDEyIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2LCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5UeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS50eXBlfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgc2V0RHJhZnRQYXJhbSgoZCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlLnRhcmdldC52YWx1ZSBhcyBQYXJhbVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50YXJnZXQudmFsdWUgPT09ICdib29sZWFuJyA/IGZhbHNlIDogZS50YXJnZXQudmFsdWUgPT09ICdudW1iZXInID8gMCA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzdHJpbmdcIj5TdHJpbmc8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm51bWJlclwiPk51bWJlcjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiYm9vbGVhblwiPkJvb2xlYW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYsIGZsZXg6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBjb2xvcjogJyM3NzcnIH19PlJlcXVpcmVkPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS5yZXF1aXJlZCA/ICd5ZXMnIDogJ25vJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXREcmFmdFBhcmFtKChkKSA9PiAoeyAuLi5kLCByZXF1aXJlZDogZS50YXJnZXQudmFsdWUgPT09ICd5ZXMnIH0pKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vXCI+Tm88L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllc1wiPlllczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+RGVmYXVsdCAvIFZhbHVlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICB7ZHJhZnRQYXJhbS50eXBlID09PSAnYm9vbGVhbicgPyAoXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZWxlY3RTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2RyYWZ0UGFyYW0udmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldERyYWZ0UGFyYW0oKGQpID0+ICh7IC4uLmQsIHZhbHVlOiBlLnRhcmdldC52YWx1ZSA9PT0gJ3RydWUnIH0pKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImZhbHNlXCI+RmFsc2U8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRydWVcIj5UcnVlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9e2RyYWZ0UGFyYW0udHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtTdHJpbmcoZHJhZnRQYXJhbS52YWx1ZSA/PyAnJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXREcmFmdFBhcmFtKChkKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkcmFmdFBhcmFtLnR5cGUgPT09ICdudW1iZXInID8gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsRm9vdGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjYW5jZWxCdXR0b25TdHlsZX0gb25DbGljaz17KCkgPT4gc2V0U2hvd0FkZFBhcmFtKGZhbHNlKX0+XG4gICAgICAgICAgICAgICAgQ2FuY2VsXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtzYXZlQnV0dG9uU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZUFkZFBhcmFtfT5cbiAgICAgICAgICAgICAgICBBZGRcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7c2hvd0VkaXRQYXJhbSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e21vZGFsT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbFN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsSGVhZGVyU3R5bGV9PkVkaXQgUGFyYW1ldGVyPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEJvZHlTdHlsZX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UGFyYW1ldGVyIE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17ZWRpdERyYWZ0Lm5hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEVkaXREcmFmdCgoZCkgPT4gKHsgLi4uZCwgbmFtZTogZS50YXJnZXQudmFsdWUgfSkpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6IDEyIH19PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2LCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5UeXBlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZWRpdERyYWZ0LnR5cGV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0RHJhZnQoKGQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogZS50YXJnZXQudmFsdWUgYXMgUGFyYW1UeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LnZhbHVlID09PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlLnRhcmdldC52YWx1ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBkLnZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInN0cmluZ1wiPlN0cmluZzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNiwgZmxleDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UmVxdWlyZWQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlZGl0RHJhZnQucmVxdWlyZWQgPyAneWVzJyA6ICdubyd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RWRpdERyYWZ0KChkKSA9PiAoeyAuLi5kLCByZXF1aXJlZDogZS50YXJnZXQudmFsdWUgPT09ICd5ZXMnIH0pKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vXCI+Tm88L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllc1wiPlllczwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+VmFsdWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIHtlZGl0RHJhZnQudHlwZSA9PT0gJ2Jvb2xlYW4nID8gKFxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlZGl0RHJhZnQudmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEVkaXREcmFmdCgoZCkgPT4gKHsgLi4uZCwgdmFsdWU6IGUudGFyZ2V0LnZhbHVlID09PSAndHJ1ZScgfSkpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZmFsc2VcIj5GYWxzZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHJ1ZVwiPlRydWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT17ZWRpdERyYWZ0LnR5cGUgPT09ICdudW1iZXInID8gJ251bWJlcicgOiAndGV4dCd9XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17U3RyaW5nKGVkaXREcmFmdC52YWx1ZSA/PyAnJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRFZGl0RHJhZnQoKGQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVkaXREcmFmdC50eXBlID09PSAnbnVtYmVyJyA/IE51bWJlcihlLnRhcmdldC52YWx1ZSkgOiBlLnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbEZvb3RlclN0eWxlfT5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y2FuY2VsQnV0dG9uU3R5bGV9IG9uQ2xpY2s9eygpID0+IHNldFNob3dFZGl0UGFyYW0oZmFsc2UpfT5cbiAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3NhdmVCdXR0b25TdHlsZX0gb25DbGljaz17aGFuZGxlRWRpdFNhdmV9PlxuICAgICAgICAgICAgICAgIFNhdmVcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuLy8gTW9kYWwgc3R5bGVzIChzaGFyZWQpXG5jb25zdCBtb2RhbE92ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIGluc2V0OiAwLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuMjUpJyxcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICB6SW5kZXg6IDk5OTksXG59O1xuXG5jb25zdCBtb2RhbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICB3aWR0aDogNDIwLFxuICBtYXhXaWR0aDogJzkydncnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmJyxcbiAgYm9yZGVyUmFkaXVzOiAxMixcbiAgYm94U2hhZG93OiAnMCA4cHggMjRweCByZ2JhKDAsMCwwLDAuMTgpJyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxufTtcblxuY29uc3QgbW9kYWxIZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgcGFkZGluZzogJzEycHggMTZweCcsXG4gIGZvbnRXZWlnaHQ6IDYwMCxcbiAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNlZWUnLFxufTtcblxuY29uc3QgbW9kYWxCb2R5U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIHBhZGRpbmc6IDE2LFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBnYXA6IDEyLFxufTtcblxuY29uc3QgbW9kYWxGb290ZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgcGFkZGluZzogMTIsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gIGdhcDogOCxcbiAgYm9yZGVyVG9wOiAnMXB4IHNvbGlkICNlZWUnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmFmYWZhJyxcbn07Il19
|
|
379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDb25maWdQYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL0dlbkFnZW50Q29uZmlnUGFuZWwudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQWMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBZSxNQUFNLGNBQWMsQ0FBQztBQXNEekYsSUFBTSxZQUFZLEdBQWM7SUFDOUIsWUFBWSxFQUFFLFNBQVM7SUFDdkIsY0FBYyxFQUFFLFNBQVM7SUFDekIsZUFBZSxFQUFFLFNBQVM7SUFDMUIsU0FBUyxFQUFFLFNBQVM7SUFDcEIsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixRQUFRLEVBQUUsTUFBTTtDQUNqQixDQUFDO0FBRUYsSUFBTSxlQUFlLEdBQXVCO0lBQzFDLElBQUksRUFBRSxXQUFXO0lBQ2pCLFdBQVcsRUFBRSxTQUFTO0lBQ3RCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLE9BQU8sRUFBRSxFQUFFO0NBQ1osQ0FBQztBQUVGLElBQU0sbUJBQW1CLEdBQWlCO0lBQ3hDLFFBQVEsRUFBRSxLQUFLO0lBQ2YsT0FBTyxFQUFFLEtBQUs7SUFDZCxLQUFLLEVBQUUsS0FBSztDQUNiLENBQUM7QUFFRixTQUFTLGNBQWMsQ0FBQyxHQUFvQztJQUMxRCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3BCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBQyxDQUFDO1FBQzVCLElBQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLElBQUksR0FBYyxRQUFRLENBQUM7UUFDL0IsSUFBSSxPQUFP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RSxVQUFVO0lBQzFCLEdBQUcsRUFBRSxDQUFDO0lBQ04sU0FBUyxFQUFFLGdCQUFnQjtJQUMzQixlQUFlLEVBQUUsU0FBUztDQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGV2cm9uRG93biwgQ2hldnJvblVwLCBQbHVzLCBUcmFzaDIsIFBlbmNpbCwgWCwgU3BhcmtsZXMgfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRUaGVtZSB7XG4gIHByaW1hcnlDb2xvcjogc3RyaW5nO1xuICBzZWNvbmRhcnlDb2xvcjogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcbiAgdGV4dENvbG9yOiBzdHJpbmc7XG4gIGZvbnRGYW1pbHk6IHN0cmluZztcbiAgZm9udFNpemU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGF0U2V0dGluZ3NDb25maWcge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGFnZW50TmFtZTogc3RyaW5nO1xuICBsb2dvVXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZlYXR1cmVGbGFncyB7XG4gIHVzZUF1ZGlvPzogYm9vbGVhbjtcbiAgdXNlRmlsZT86IGJvb2xlYW47XG4gIHVzZVdzPzogYm9vbGVhbjtcbn1cblxudHlwZSBQYXJhbVR5cGUgPSAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nO1xuXG5pbnRlcmZhY2UgTWV0YWRhdGFQYXJhbSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogUGFyYW1UeXBlO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5BZ2VudENvbmZpZ1BhbmVsUHJvcHMge1xuICB0aGVtZT86IENoYXRUaGVtZTtcbiAgb25UaGVtZUNoYW5nZT86IChuZXh0OiBDaGF0VGhlbWUpID0+IHZvaWQ7XG5cbiAgY2hhdFNldHRpbmdzPzogQ2hhdFNldHRpbmdzQ29uZmlnO1xuICBvbkNoYXRTZXR0aW5nc0NoYW5nZT86IChuZXh0OiBDaGF0U2V0dGluZ3NDb25maWcpID0+IHZvaWQ7XG5cbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBvbk1ldGFkYXRhQ2hhbmdlPzogKG5leHQ6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG5cbiAgZmVhdHVyZUZsYWdzPzogRmVhdHVyZUZsYWdzO1xuICBvbkZlYXR1cmVGbGFnc0NoYW5nZT86IChuZXh0OiBGZWF0dXJlRmxhZ3MpID0+IHZvaWQ7XG5cbiAgZGVmYXVsdE9wZW4/OiB7IGFwcGVhcmFuY2U/OiBib29sZWFuOyBzZXR0aW5ncz86IGJvb2xlYW47IG1ldGFkYXRhPzogYm9vbGVhbiB9O1xuICBvblNhdmU/OiAocGF5bG9hZDogeyB0aGVtZTogQ2hhdFRoZW1lOyBjaGF0U2V0dGluZ3M6IENoYXRTZXR0aW5nc0NvbmZpZzsgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47IGZlYXR1cmVGbGFnczogRmVhdHVyZUZsYWdzIH0pID0+IHZvaWQ7XG4gIG9uQ2FuY2VsPzogKCkgPT4gdm9pZDtcblxuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59XG5cbmNvbnN0IGRlZmF1bHRUaGVtZTogQ2hhdFRoZW1lID0ge1xuICBwcmltYXJ5Q29sb3I6ICcjNEY0NkU1JyxcbiAgc2Vjb25kYXJ5Q29sb3I6ICcjZjVmNWY1JyxcbiAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gIHRleHRDb2xvcjogJyMwMDAwMDAnLFxuICBmb250RmFtaWx5OiAnSW50ZXIsIHNhbnMtc2VyaWYnLFxuICBmb250U2l6ZTogJzE1cHgnLFxufTtcblxuY29uc3QgZGVmYXVsdFNldHRpbmdzOiBDaGF0U2V0dGluZ3NDb25maWcgPSB7XG4gIG5hbWU6ICdHZW5hc3Npc3QnLFxuICBkZXNjcmlwdGlvbjogJ1N1cHBvcnQnLFxuICBhZ2VudE5hbWU6ICdBZ2VudCcsXG4gIGxvZ29Vcmw6ICcnLFxufTtcblxuY29uc3QgZGVmYXVsdEZlYXR1cmVGbGFnczogRmVhdHVyZUZsYWdzID0ge1xuICB1c2VBdWRpbzogZmFsc2UsXG4gIHVzZUZpbGU6IGZhbHNlLFxuICB1c2VXczogZmFsc2UsXG59O1xuXG5mdW5jdGlvbiBvYmplY3RUb1BhcmFtcyhvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQpOiBNZXRhZGF0YVBhcmFtW10ge1xuICBpZiAoIW9iaikgcmV0dXJuIFtdO1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoKGspID0+IHtcbiAgICBjb25zdCB2ID0gb2JqW2tdO1xuICAgIGxldCB0eXBlOiBQYXJhbVR5cGUgPSAnc3RyaW5nJztcbiAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSB0eXBlID0gJ251bWJlcic7XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykgdHlwZSA9ICdib29sZWFuJztcbiAgICByZXR1cm4geyBuYW1lOiBrLCB0eXBlLCByZXF1aXJlZDogZmFsc2UsIHZhbHVlOiB2IH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJhbXNUb09iamVjdChwYXJhbXM6IE1ldGFkYXRhUGFyYW1bXSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBjb25zdCBvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIHBhcmFtcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwLnZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgb1twLm5hbWVdID0gcC52YWx1ZTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbztcbn1cblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q29uZmlnUGFuZWw6IFJlYWN0LkZDPEdlbkFnZW50Q29uZmlnUGFuZWxQcm9wcz4gPSAoe1xuICB0aGVtZTogdGhlbWVQcm9wLFxuICBvblRoZW1lQ2hhbmdlLFxuICBjaGF0U2V0dGluZ3M6IGNoYXRTZXR0aW5nc1Byb3AsXG4gIG9uQ2hhdFNldHRpbmdzQ2hhbmdlLFxuICBtZXRhZGF0YTogbWV0YWRhdGFQcm9wLFxuICBvbk1ldGFkYXRhQ2hhbmdlLFxuICBmZWF0dXJlRmxhZ3M6IGZlYXR1cmVGbGFnc1Byb3AsXG4gIG9uRmVhdHVyZUZsYWdzQ2hhbmdlLFxuICBkZWZhdWx0T3BlbixcbiAgb25TYXZlLFxuICBvbkNhbmNlbCxcbiAgc3R5bGUsXG59KSA9PiB7XG4gIC8vIENvbnRyb2xsZWQgb3IgaW50ZXJuYWwgc3RhdGUgZmFsbGJhY2tzXG4gIGNvbnN0IFt0aGVtZSwgc2V0VGhlbWVdID0gdXNlU3RhdGU8Q2hhdFRoZW1lPih0aGVtZVByb3AgfHwgZGVmYXVsdFRoZW1lKTtcbiAgY29uc3QgW2NoYXRTZXR0aW5ncywgc2V0Q2hhdFNldHRpbmdzXSA9IHVzZVN0YXRlPENoYXRTZXR0aW5nc0NvbmZpZz4oY2hhdFNldHRpbmdzUHJvcCB8fCBkZWZhdWx0U2V0dGluZ3MpO1xuICBjb25zdCBbcGFyYW1zLCBzZXRQYXJhbXNdID0gdXNlU3RhdGU8TWV0YWRhdGFQYXJhbVtdPihvYmplY3RUb1BhcmFtcyhtZXRhZGF0YVByb3ApKTtcbiAgY29uc3QgW2ZlYXR1cmVGbGFncywgc2V0RmVhdHVyZUZsYWdzXSA9IHVzZVN0YXRlPEZlYXR1cmVGbGFncz4oZmVhdHVyZUZsYWdzUHJvcCB8fCBkZWZhdWx0RmVhdHVyZUZsYWdzKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aGVtZVByb3ApIHNldFRoZW1lKHRoZW1lUHJvcCk7XG4gIH0sIFt0aGVtZVByb3BdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0U2V0dGluZ3NQcm9wKSBzZXRDaGF0U2V0dGluZ3MoY2hhdFNldHRpbmdzUHJvcCk7XG4gIH0sIFtjaGF0U2V0dGluZ3NQcm9wXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWV0YWRhdGFQcm9wKSBzZXRQYXJhbXMob2JqZWN0VG9QYXJhbXMobWV0YWRhdGFQcm9wKSk7XG4gIH0sIFttZXRhZGF0YVByb3BdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChmZWF0dXJlRmxhZ3NQcm9wKSBzZXRGZWF0dXJlRmxhZ3MoZmVhdHVyZUZsYWdzUHJvcCk7XG4gIH0sIFtmZWF0dXJlRmxhZ3NQcm9wXSk7XG5cbiAgY29uc3QgW3Nob3dBcHBlYXJhbmNlLCBzZXRTaG93QXBwZWFyYW5jZV0gPSB1c2VTdGF0ZShcbiAgICB0eXBlb2YgZGVmYXVsdE9wZW4/LmFwcGVhcmFuY2UgPT09ICdib29sZWFuJyA/ICEhZGVmYXVsdE9wZW4/LmFwcGVhcmFuY2UgOiB0cnVlXG4gICk7XG4gIGNvbnN0IFtzaG93U2V0dGluZ3MsIHNldFNob3dTZXR0aW5nc10gPSB1c2VTdGF0ZShcbiAgICB0eXBlb2YgZGVmYXVsdE9wZW4/LnNldHRpbmdzID09PSAnYm9vbGVhbicgPyAhIWRlZmF1bHRPcGVuPy5zZXR0aW5ncyA6IGZhbHNlXG4gICk7XG4gIGNvbnN0IFtzaG93TWV0YWRhdGEsIHNldFNob3dNZXRhZGF0YV0gPSB1c2VTdGF0ZShcbiAgICB0eXBlb2YgZGVmYXVsdE9wZW4/Lm1ldGFkYXRhID09PSAnYm9vbGVhbicgPyAhIWRlZmF1bHRPcGVuPy5tZXRhZGF0YSA6IGZhbHNlXG4gICk7XG5cbiAgY29uc3QgW3Nob3dBZGRQYXJhbSwgc2V0U2hvd0FkZFBhcmFtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2RyYWZ0UGFyYW0sIHNldERyYWZ0UGFyYW1dID0gdXNlU3RhdGU8TWV0YWRhdGFQYXJhbT4oe1xuICAgIG5hbWU6ICdwYXJhbV8xJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgdmFsdWU6ICcnLFxuICB9KTtcblxuICBjb25zdCBbc2hvd0VkaXRQYXJhbSwgc2V0U2hvd0VkaXRQYXJhbV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlZGl0SW5kZXgsIHNldEVkaXRJbmRleF0gPSB1c2VTdGF0ZTxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW2VkaXREcmFmdCwgc2V0RWRpdERyYWZ0XSA9IHVzZVN0YXRlPE1ldGFkYXRhUGFyYW0+KHsgbmFtZTogJycsIHR5cGU6ICdzdHJpbmcnLCByZXF1aXJlZDogZmFsc2UsIHZhbHVlOiAnJyB9KTtcblxuICBjb25zdCBtZXRhZGF0YSA9IHVzZU1lbW8oKCkgPT4gcGFyYW1zVG9PYmplY3QocGFyYW1zKSwgW3BhcmFtc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRoZW1lQ2hhbmdlID0gKGtleToga2V5b2YgQ2hhdFRoZW1lLCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbmV4dCA9IHsgLi4udGhlbWUsIFtrZXldOiB2YWx1ZSB9IGFzIENoYXRUaGVtZTtcbiAgICBpZiAoIXRoZW1lUHJvcCkgc2V0VGhlbWUobmV4dCk7XG4gICAgb25UaGVtZUNoYW5nZT8uKG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNldHRpbmdDaGFuZ2UgPSAoa2V5OiBrZXlvZiBDaGF0U2V0dGluZ3NDb25maWcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBuZXh0ID0geyAuLi5jaGF0U2V0dGluZ3MsIFtrZXldOiB2YWx1ZSB9IGFzIENoYXRTZXR0aW5nc0NvbmZpZztcbiAgICBpZiAoIWNoYXRTZXR0aW5nc1Byb3ApIHNldENoYXRTZXR0aW5ncyhuZXh0KTtcbiAgICBvbkNoYXRTZXR0aW5nc0NoYW5nZT8uKG5leHQpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUZlYXR1cmVGbGFnQ2hhbmdlID0gKGtleToga2V5b2YgRmVhdHVyZUZsYWdzLCB2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IG5leHQgPSB7IC4uLmZlYXR1cmVGbGFncywgW2tleV06IHZhbHVlIH0gYXMgRmVhdHVyZUZsYWdzO1xuICAgIGlmICghZmVhdHVyZUZsYWdzUHJvcCkgc2V0RmVhdHVyZUZsYWdzKG5leHQpO1xuICAgIG9uRmVhdHVyZUZsYWdzQ2hhbmdlPy4obmV4dCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQWRkUGFyYW0gPSAoKSA9PiB7XG4gICAgY29uc3QgbmFtZSA9IGRyYWZ0UGFyYW0ubmFtZS50cmltKCk7XG4gICAgaWYgKCFuYW1lKSByZXR1cm47XG4gICAgaWYgKHBhcmFtcy5zb21lKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpKSByZXR1cm47XG4gICAgY29uc3Qgbm9ybWFsaXplZDogTWV0YWRhdGFQYXJhbSA9IHtcbiAgICAgIC4uLmRyYWZ0UGFyYW0sXG4gICAgICBuYW1lLFxuICAgICAgdmFsdWU6XG4gICAgICAgIHR5cGVvZiBkcmFmdFBhcmFtLnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgID8gZHJhZnRQYXJhbS52YWx1ZVxuICAgICAgICAgIDogZHJhZnRQYXJhbS50eXBlID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gMFxuICAgICAgICAgIDogZHJhZnRQYXJhbS50eXBlID09PSAnYm9vbGVhbidcbiAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgOiAnJyxcbiAgICB9O1xuICAgIGNvbnN0IG5leHQgPSBbLi4ucGFyYW1zLCBub3JtYWxpemVkXTtcbiAgICBzZXRQYXJhbXMobmV4dCk7XG4gICAgb25NZXRhZGF0YUNoYW5nZT8uKHBhcmFtc1RvT2JqZWN0KG5leHQpKTtcbiAgICBzZXREcmFmdFBhcmFtKHsgbmFtZTogJ3BhcmFtXzEnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlLCB2YWx1ZTogJycgfSk7XG4gICAgc2V0U2hvd0FkZFBhcmFtKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBjb2VyY2VGb3JUeXBlID0gKHZhbDogYW55LCB0eXBlOiBQYXJhbVR5cGUpID0+IHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IG4gPSBOdW1iZXIodmFsKTtcbiAgICAgIHJldHVybiBpc05hTihuKSA/IDAgOiBuO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsO1xuICAgICAgY29uc3QgcyA9IFN0cmluZyh2YWwpLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gcyA9PT0gJ3RydWUnIHx8IHMgPT09ICcxJyB8fCBzID09PSAneWVzJztcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWwgPz8gJycpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUVkaXRTYXZlID0gKCkgPT4ge1xuICAgIGlmIChlZGl0SW5kZXggPT09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBuZXdOYW1lID0gZWRpdERyYWZ0Lm5hbWUudHJpbSgpO1xuICAgIGlmICghbmV3TmFtZSkgcmV0dXJuO1xuICAgIGlmIChwYXJhbXMuc29tZSgocCwgaSkgPT4gaSAhPT0gZWRpdEluZGV4ICYmIHAubmFtZSA9PT0gbmV3TmFtZSkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gWy4uLnBhcmFtc107XG4gICAgY29uc3Qgb2xkID0gbmV4dFtlZGl0SW5kZXhdO1xuICAgIGNvbnN0IHVwZGF0ZWQ6IE1ldGFkYXRhUGFyYW0gPSB7IC4uLm9sZCwgLi4uZWRpdERyYWZ0IH07XG4gICAgdXBkYXRlZC52YWx1ZSA9IGNvZXJjZUZvclR5cGUob2xkLnZhbHVlLCBlZGl0RHJhZnQudHlwZSk7XG4gICAgbmV4dFtlZGl0SW5kZXhdID0gdXBkYXRlZDtcbiAgICBzZXRQYXJhbXMobmV4dCk7XG4gICAgb25NZXRhZGF0YUNoYW5nZT8uKHBhcmFtc1RvT2JqZWN0KG5leHQpKTtcbiAgICBzZXRTaG93RWRpdFBhcmFtKGZhbHNlKTtcbiAgICBzZXRFZGl0SW5kZXgobnVsbCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlUGFyYW0gPSAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG5leHQgPSBwYXJhbXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCk7XG4gICAgc2V0UGFyYW1zKG5leHQpO1xuICAgIG9uTWV0YWRhdGFDaGFuZ2U/LihwYXJhbXNUb09iamVjdChuZXh0KSk7XG4gIH07XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogJzEnLFxuICAgIG1heFdpZHRoOiAzMDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgIGJveFNoYWRvdzogJzAgMnB4IDEwcHggcmdiYSgwLDAsMCwwLjEpJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIC4uLnN0eWxlLFxuICB9O1xuXG4gIGNvbnN0IHNlY3Rpb25IZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAxNixcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y5ZjlmOScsXG4gIH07XG5cbiAgY29uc3Qgc2VjdGlvblRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRTaXplOiAxMixcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgY29sb3I6ICcjNjY2JyxcbiAgICBsZXR0ZXJTcGFjaW5nOiAxLFxuICB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXM7XG5cbiAgY29uc3QgZm9ybUdyb3VwU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzE2cHggMTZweCAxMnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBib3JkZXJCb3R0b206ICdub25lJyxcbiAgfTtcblxuICBjb25zdCBsYWJlbFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0geyBmb250U2l6ZTogMTQsIGNvbG9yOiAnIzMzMycgfTtcbiAgY29uc3QgY29sb3JQaWNrZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBhcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgd2lkdGg6IDEyMCxcbiAgICBoZWlnaHQ6IDMyLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogNCxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgfSBhcyBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuXG4gIGNvbnN0IHNlbGVjdFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHdpZHRoOiAxNDAsXG4gICAgaGVpZ2h0OiAzMixcbiAgICBwYWRkaW5nOiAnMCA4cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgZm9udFNpemU6IDE0LFxuICB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXM7XG5cbiAgY29uc3QgaW5wdXRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGhlaWdodDogMzIsXG4gICAgcGFkZGluZzogJzAgOHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgIGZvbnRTaXplOiAxNCxcbiAgfTtcblxuICBjb25zdCBhY3Rpb25CYXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAxMixcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LWVuZCcsXG4gICAgZ2FwOiA4LFxuICAgIGJvcmRlclRvcDogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmFmYWZhJyxcbiAgfTtcblxuICBjb25zdCBjYW5jZWxCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDYsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH07XG4gIGNvbnN0IHNhdmVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnOHB4IDEycHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyMxMTE4MjcnLFxuICAgIGNvbG9yOiAnI2ZmZicsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICMwYjEyMjAnLFxuICAgIGJvcmRlclJhZGl1czogNixcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgfTtcblxuICBjb25zdCBmdWxsV2lkdGhBY3Rpb25CdXR0b246IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogOCxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDEycHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udFNpemU6IDE0LFxuICAgIGNvbG9yOiAnIzExMScsXG4gIH07XG5cbiAgY29uc3Qgc21hbGxJY29uQnV0dG9uOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6IDgsXG4gICAgd2lkdGg6IDI4LFxuICAgIGhlaWdodDogMjgsXG4gICAgZGlzcGxheTogJ2lubGluZS1mbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gIH07XG5cbiAgY29uc3QgbWV0YVJvd1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdncmlkJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiAnMWZyIG1pbm1heCg5MHB4LCAxNTBweCkgMjhweCAyOHB4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6IDgsXG4gICAgcGFkZGluZzogJzZweCAwJyxcbiAgfTtcbiAgY29uc3QgbWV0YU5hbWVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogMTMsXG4gICAgY29sb3I6ICcjMjIyJyxcbiAgICBmb250V2VpZ2h0OiA1MDAsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIHRleHRPdmVyZmxvdzogJ2VsbGlwc2lzJyxcbiAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgfTtcbiAgY29uc3QgbWV0YVZhbHVlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgbWF4V2lkdGg6IDE1MCxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICAgIHdoaXRlU3BhY2U6ICdub3dyYXAnLFxuICAgIGZvbnRTaXplOiAxMyxcbiAgICBjb2xvcjogJyMxMTEnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTZlNmU2JyxcbiAgICBib3JkZXJSYWRpdXM6IDEyLFxuICAgIHBhZGRpbmc6ICc2cHggMTBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZhZmFmYScsXG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2F2ZSA9ICgpID0+IHtcbiAgICBvblNhdmU/Lih7IHRoZW1lLCBjaGF0U2V0dGluZ3MsIG1ldGFkYXRhLCBmZWF0dXJlRmxhZ3MgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXtjb250YWluZXJTdHlsZX0+XG4gICAgICB7LyogQXBwZWFyYW5jZSBTZWN0aW9uICovfVxuICAgICAgPGRpdiBzdHlsZT17eyBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2UwZTBlMCcgfX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e3NlY3Rpb25IZWFkZXJTdHlsZX0gb25DbGljaz17KCkgPT4gc2V0U2hvd0FwcGVhcmFuY2UoIXNob3dBcHBlYXJhbmNlKX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXtzZWN0aW9uVGl0bGVTdHlsZX0+QVBQRUFSQU5DRTwvaDM+XG4gICAgICAgICAge3Nob3dBcHBlYXJhbmNlID8gPENoZXZyb25VcCBzaXplPXsxNn0gLz4gOiA8Q2hldnJvbkRvd24gc2l6ZT17MTZ9IC8+fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3Nob3dBcHBlYXJhbmNlICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PlByaW1hcnkgQ29sb3I8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVtZS5wcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaGVtZUNoYW5nZSgncHJpbWFyeUNvbG9yJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtjb2xvclBpY2tlclN0eWxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+U2Vjb25kYXJ5IENvbG9yPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlbWUuc2Vjb25kYXJ5Q29sb3J9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaGVtZUNoYW5nZSgnc2Vjb25kYXJ5Q29sb3InLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgc3R5bGU9e2NvbG9yUGlja2VyU3R5bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5CYWNrZ3JvdW5kIENvbG9yPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlbWUuYmFja2dyb3VuZENvbG9yfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlVGhlbWVDaGFuZ2UoJ2JhY2tncm91bmRDb2xvcicsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICBzdHlsZT17Y29sb3JQaWNrZXJTdHlsZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PlRleHQgQ29sb3I8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVtZS50ZXh0Q29sb3J9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaGVtZUNoYW5nZSgndGV4dENvbG9yJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHN0eWxlPXtjb2xvclBpY2tlclN0eWxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+Rm9udCBTaXplPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgIHN0eWxlPXtzZWxlY3RTdHlsZX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17dGhlbWUuZm9udFNpemV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVUaGVtZUNoYW5nZSgnZm9udFNpemUnLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiMTJweFwiPlNtYWxsICgxMnB4KTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxNXB4XCI+TWVkaXVtICgxNXB4KTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxOHB4XCI+TGFyZ2UgKDE4cHgpPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+Rm9udCBGYW1pbHk8L2xhYmVsPlxuICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0aGVtZS5mb250RmFtaWx5LnNwbGl0KCcsJylbMF0udHJpbSgpfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZmYgPVxuICAgICAgICAgICAgICAgICAgICB2ID09PSAnSW50ZXInXG4gICAgICAgICAgICAgICAgICAgICAgPyAnSW50ZXIsIHNhbnMtc2VyaWYnXG4gICAgICAgICAgICAgICAgICAgICAgOiB2ID09PSAnQXJpYWwnXG4gICAgICAgICAgICAgICAgICAgICAgPyAnQXJpYWwsIHNhbnMtc2VyaWYnXG4gICAgICAgICAgICAgICAgICAgICAgOiB2ID09PSAnVGltZXMgTmV3IFJvbWFuJ1xuICAgICAgICAgICAgICAgICAgICAgID8gXCInVGltZXMgTmV3IFJvbWFuJywgc2VyaWZcIlxuICAgICAgICAgICAgICAgICAgICAgIDogJ21vbm9zcGFjZSc7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVUaGVtZUNoYW5nZSgnZm9udEZhbWlseScsIGZmKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkludGVyXCI+SW50ZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQXJpYWxcIj5BcmlhbDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJUaW1lcyBOZXcgUm9tYW5cIj5UaW1lcyBOZXcgUm9tYW48L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9ub3NwYWNlXCI+TW9ub3NwYWNlPC9vcHRpb24+XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIFNldHRpbmdzIFNlY3Rpb24gKi99XG4gICAgICA8ZGl2PlxuICAgICAgICA8ZGl2IHN0eWxlPXtzZWN0aW9uSGVhZGVyU3R5bGV9IG9uQ2xpY2s9eygpID0+IHNldFNob3dTZXR0aW5ncyghc2hvd1NldHRpbmdzKX0+XG4gICAgICAgICAgPGgzIHN0eWxlPXtzZWN0aW9uVGl0bGVTdHlsZX0+U0VUVElOR1M8L2gzPlxuICAgICAgICAgIHtzaG93U2V0dGluZ3MgPyA8Q2hldnJvblVwIHNpemU9ezE2fSAvPiA6IDxDaGV2cm9uRG93biBzaXplPXsxNn0gLz59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7c2hvd1NldHRpbmdzICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMTZweCAxNnB4IDEycHgnIH19PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgLi4ubGFiZWxTdHlsZSwgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luQm90dG9tOiA4IH19Pk5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uaW5wdXRTdHlsZSwgaGVpZ2h0OiA0MCwgcGFkZGluZzogJzAgMTJweCcsIGJveFNpemluZzogJ2JvcmRlci1ib3gnIH19XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NoYXRTZXR0aW5ncy5uYW1lfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlU2V0dGluZ0NoYW5nZSgnbmFtZScsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4IDEycHgnIH19PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgLi4ubGFiZWxTdHlsZSwgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luQm90dG9tOiA4IH19PkRlc2NyaXB0aW9uPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IC4uLmlucHV0U3R5bGUsIGhlaWdodDogNDAsIHBhZGRpbmc6ICcwIDEycHgnLCBib3hTaXppbmc6ICdib3JkZXItYm94JyB9fVxuICAgICAgICAgICAgICAgIHZhbHVlPXtjaGF0U2V0dGluZ3MuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVTZXR0aW5nQ2hhbmdlKCdkZXNjcmlwdGlvbicsIGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBwYWRkaW5nOiAnMCAxNnB4IDEycHgnIH19PlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgLi4ubGFiZWxTdHlsZSwgZGlzcGxheTogJ2Jsb2NrJywgbWFyZ2luQm90dG9tOiA4IH19PkFnZW50IE5hbWU8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgLi4uaW5wdXRTdHlsZSwgaGVpZ2h0OiA0MCwgcGFkZGluZzogJzAgMTJweCcsIGJveFNpemluZzogJ2JvcmRlci1ib3gnIH19XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NoYXRTZXR0aW5ncy5hZ2VudE5hbWV9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVTZXR0aW5nQ2hhbmdlKCdhZ2VudE5hbWUnLCBlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCAxNnB4JyB9fT5cbiAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IC4uLmxhYmVsU3R5bGUsIGRpc3BsYXk6ICdibG9jaycsIG1hcmdpbkJvdHRvbTogOCB9fT5Mb2dvIFVSTDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBzdHlsZT17eyAuLi5pbnB1dFN0eWxlLCBoZWlnaHQ6IDQwLCBwYWRkaW5nOiAnMCAxMnB4JywgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcgfX1cbiAgICAgICAgICAgICAgICB2YWx1ZT17Y2hhdFNldHRpbmdzLmxvZ29VcmwgfHwgJyd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVTZXR0aW5nQ2hhbmdlKCdsb2dvVXJsJywgZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9sb2dvLnBuZ1wiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzE2cHgnLCBib3JkZXJUb3A6ICcxcHggc29saWQgI2UwZTBlMCcsIG1hcmdpblRvcDogOCB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTMsIGNvbG9yOiAnIzU1NScsIG1hcmdpbkJvdHRvbTogMTIsIGZvbnRXZWlnaHQ6IDUwMCB9fT5cbiAgICAgICAgICAgICAgICBGZWF0dXJlc1xuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17Zm9ybUdyb3VwU3R5bGV9PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17bGFiZWxTdHlsZX0+VXNlIEF1ZGlvPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXshIWZlYXR1cmVGbGFncy51c2VBdWRpb31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlRmVhdHVyZUZsYWdDaGFuZ2UoJ3VzZUF1ZGlvJywgZS50YXJnZXQuY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogMjAsIGhlaWdodDogMjAsIGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e2Zvcm1Hcm91cFN0eWxlfT5cbiAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e2xhYmVsU3R5bGV9PlVzZSBGaWxlPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXshIWZlYXR1cmVGbGFncy51c2VGaWxlfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBoYW5kbGVGZWF0dXJlRmxhZ0NoYW5nZSgndXNlRmlsZScsIGUudGFyZ2V0LmNoZWNrZWQpfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgd2lkdGg6IDIwLCBoZWlnaHQ6IDIwLCBjdXJzb3I6ICdwb2ludGVyJyB9fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXtmb3JtR3JvdXBTdHlsZX0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXtsYWJlbFN0eWxlfT5Vc2UgV2ViU29ja2V0PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXshIWZlYXR1cmVGbGFncy51c2VXc31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gaGFuZGxlRmVhdHVyZUZsYWdDaGFuZ2UoJ3VzZVdzJywgZS50YXJnZXQuY2hlY2tlZCl9XG4gICAgICAgICAgICAgICAgICBzdHlsZT17eyB3aWR0aDogMjAsIGhlaWdodDogMjAsIGN1cnNvcjogJ3BvaW50ZXInIH19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogTWV0YWRhdGEgU2VjdGlvbiAqL31cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgc3R5bGU9e3NlY3Rpb25IZWFkZXJTdHlsZX0gb25DbGljaz17KCkgPT4gc2V0U2hvd01ldGFkYXRhKCFzaG93TWV0YWRhdGEpfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3NlY3Rpb25UaXRsZVN0eWxlfT5NRVRBREFUQTwvaDM+XG4gICAgICAgICAge3Nob3dNZXRhZGF0YSA/IDxDaGV2cm9uVXAgc2l6ZT17MTZ9IC8+IDogPENoZXZyb25Eb3duIHNpemU9ezE2fSAvPn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtzaG93TWV0YWRhdGEgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcxMnB4IDE2cHgnIH19PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGZvbnRTaXplOiAxMywgY29sb3I6ICcjNTU1JywgbWFyZ2luQm90dG9tOiAxMCB9fT5cbiAgICAgICAgICAgICAgICBEZWZpbmUga2V5L3ZhbHVlIHBhcmFtZXRlcnMgc2VudCBhcyBjaGF0IG1ldGFkYXRhLlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17ZnVsbFdpZHRoQWN0aW9uQnV0dG9ufSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWRkUGFyYW0odHJ1ZSl9PlxuICAgICAgICAgICAgICAgIDxQbHVzIHNpemU9ezE4fSAvPlxuICAgICAgICAgICAgICAgIDxzcGFuPkFkZCBQYXJhbWV0ZXI8L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7cGFyYW1zLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHBhZGRpbmc6ICcycHggMTZweCAxMnB4JywgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2IH19PlxuICAgICAgICAgICAgICAgIHtwYXJhbXMubWFwKChwLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlWYWwgPSBwLnR5cGUgPT09ICdib29sZWFuJyA/IChwLnZhbHVlID8gJ1RydWUnIDogJ0ZhbHNlJykgOiBTdHJpbmcocC52YWx1ZSA/PyAnJyk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17cC5uYW1lfSBzdHlsZT17bWV0YVJvd1N0eWxlfT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXttZXRhTmFtZVN0eWxlfT57cC5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e21ldGFWYWx1ZVN0eWxlfSB0aXRsZT17ZGlzcGxheVZhbH0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7ZGlzcGxheVZhbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NtYWxsSWNvbkJ1dHRvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdEluZGV4KGlkeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXREcmFmdCh7IC4uLnAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNob3dFZGl0UGFyYW0odHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YEVkaXQgJHtwLm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGVuY2lsIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzbWFsbEljb25CdXR0b259XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVSZW1vdmVQYXJhbShpZHgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YFJlbW92ZSAke3AubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaDIgc2l6ZT17MTZ9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBBY3Rpb24gQnV0dG9ucyAqL31cbiAgICAgIDxkaXYgc3R5bGU9e2FjdGlvbkJhclN0eWxlfT5cbiAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y2FuY2VsQnV0dG9uU3R5bGV9IG9uQ2xpY2s9eygpID0+IG9uQ2FuY2VsPy4oKX0+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gc3R5bGU9e3NhdmVCdXR0b25TdHlsZX0gb25DbGljaz17aGFuZGxlU2F2ZX0+U2F2ZSBDaGFuZ2VzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIFNpbXBsZSBQYXJhbWV0ZXIgTW9kYWxzICovfVxuICAgICAge3Nob3dBZGRQYXJhbSAmJiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e21vZGFsT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXttb2RhbFN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsSGVhZGVyU3R5bGV9PkFkZCBQYXJhbWV0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsQm9keVN0eWxlfT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYgfX0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5QYXJhbWV0ZXIgTmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17aW5wdXRTdHlsZX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtkcmFmdFBhcmFtLm5hbWV9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldERyYWZ0UGFyYW0oKGQpID0+ICh7IC4uLmQsIG5hbWU6IGUudGFyZ2V0LnZhbHVlIH0pKX1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwicGFyYW1fMVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTIgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYsIGZsZXg6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBjb2xvcjogJyM3NzcnIH19PlR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkcmFmdFBhcmFtLnR5cGV9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICBzZXREcmFmdFBhcmFtKChkKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGUudGFyZ2V0LnZhbHVlIGFzIFBhcmFtVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLnRhcmdldC52YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gZmFsc2UgOiBlLnRhcmdldC52YWx1ZSA9PT0gJ251bWJlcicgPyAwIDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInN0cmluZ1wiPlN0cmluZzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibnVtYmVyXCI+TnVtYmVyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIGdhcDogNiwgZmxleDogMSB9fT5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBzdHlsZT17eyBmb250U2l6ZTogMTIsIGNvbG9yOiAnIzc3NycgfX0+UmVxdWlyZWQ8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtkcmFmdFBhcmFtLnJlcXVpcmVkID8gJ3llcycgOiAnbm8nfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldERyYWZ0UGFyYW0oKGQpID0+ICh7IC4uLmQsIHJlcXVpcmVkOiBlLnRhcmdldC52YWx1ZSA9PT0gJ3llcycgfSkpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9cIj5Obzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwieWVzXCI+WWVzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYgfX0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5EZWZhdWx0IC8gVmFsdWU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIHtkcmFmdFBhcmFtLnR5cGUgPT09ICdib29sZWFuJyA/IChcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3NlbGVjdFN0eWxlfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT17ZHJhZnRQYXJhbS52YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RHJhZnRQYXJhbSgoZCkgPT4gKHsgLi4uZCwgdmFsdWU6IGUudGFyZ2V0LnZhbHVlID09PSAndHJ1ZScgfSkpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZmFsc2VcIj5GYWxzZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidHJ1ZVwiPlRydWU8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT17ZHJhZnRQYXJhbS50eXBlID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogJ3RleHQnfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17aW5wdXRTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e1N0cmluZyhkcmFmdFBhcmFtLnZhbHVlID8/ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldERyYWZ0UGFyYW0oKGQpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRyYWZ0UGFyYW0udHlwZSA9PT0gJ251bWJlcicgPyBOdW1iZXIoZS50YXJnZXQudmFsdWUpIDogZS50YXJnZXQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxGb290ZXJTdHlsZX0+XG4gICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e2NhbmNlbEJ1dHRvblN0eWxlfSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93QWRkUGFyYW0oZmFsc2UpfT5cbiAgICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3NhdmVCdXR0b25TdHlsZX0gb25DbGljaz17aGFuZGxlQWRkUGFyYW19PlxuICAgICAgICAgICAgICAgIEFkZFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93RWRpdFBhcmFtICYmIChcbiAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxPdmVybGF5U3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17bW9kYWxIZWFkZXJTdHlsZX0+RWRpdCBQYXJhbWV0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsQm9keVN0eWxlfT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYgfX0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5QYXJhbWV0ZXIgTmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT17aW5wdXRTdHlsZX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtlZGl0RHJhZnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RWRpdERyYWZ0KChkKSA9PiAoeyAuLi5kLCBuYW1lOiBlLnRhcmdldC52YWx1ZSB9KSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogMTIgfX0+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYsIGZsZXg6IDEgfX0+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9e3sgZm9udFNpemU6IDEyLCBjb2xvcjogJyM3NzcnIH19PlR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17c2VsZWN0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtlZGl0RHJhZnQudHlwZX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXREcmFmdCgoZCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBlLnRhcmdldC52YWx1ZSBhcyBQYXJhbVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZS50YXJnZXQudmFsdWUgPT09ICdib29sZWFuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGUudGFyZ2V0LnZhbHVlID09PSAnbnVtYmVyJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIGQudmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwic3RyaW5nXCI+U3RyaW5nPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJudW1iZXJcIj5OdW1iZXI8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJvb2xlYW5cIj5Cb29sZWFuPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiA2LCBmbGV4OiAxIH19PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5SZXF1aXJlZDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZWxlY3RTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VkaXREcmFmdC5yZXF1aXJlZCA/ICd5ZXMnIDogJ25vJ31cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRFZGl0RHJhZnQoKGQpID0+ICh7IC4uLmQsIHJlcXVpcmVkOiBlLnRhcmdldC52YWx1ZSA9PT0gJ3llcycgfSkpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9cIj5Obzwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwieWVzXCI+WWVzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBnYXA6IDYgfX0+XG4gICAgICAgICAgICAgICAgPGxhYmVsIHN0eWxlPXt7IGZvbnRTaXplOiAxMiwgY29sb3I6ICcjNzc3JyB9fT5WYWx1ZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAge2VkaXREcmFmdC50eXBlID09PSAnYm9vbGVhbicgPyAoXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZWxlY3RTdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2VkaXREcmFmdC52YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0RWRpdERyYWZ0KChkKSA9PiAoeyAuLi5kLCB2YWx1ZTogZS50YXJnZXQudmFsdWUgPT09ICd0cnVlJyB9KSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJmYWxzZVwiPkZhbHNlPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ0cnVlXCI+VHJ1ZTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPXtlZGl0RHJhZnQudHlwZSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6ICd0ZXh0J31cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e2lucHV0U3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXtTdHJpbmcoZWRpdERyYWZ0LnZhbHVlID8/ICcnKX1cbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PlxuICAgICAgICAgICAgICAgICAgICAgIHNldEVkaXREcmFmdCgoZCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmQsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWRpdERyYWZ0LnR5cGUgPT09ICdudW1iZXInID8gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e21vZGFsRm9vdGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIHN0eWxlPXtjYW5jZWxCdXR0b25TdHlsZX0gb25DbGljaz17KCkgPT4gc2V0U2hvd0VkaXRQYXJhbShmYWxzZSl9PlxuICAgICAgICAgICAgICAgIENhbmNlbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17c2F2ZUJ1dHRvblN0eWxlfSBvbkNsaWNrPXtoYW5kbGVFZGl0U2F2ZX0+XG4gICAgICAgICAgICAgICAgU2F2ZVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG4vLyBNb2RhbCBzdHlsZXMgKHNoYXJlZClcbmNvbnN0IG1vZGFsT3ZlcmxheVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgaW5zZXQ6IDAsXG4gIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC4yNSknLFxuICBkaXNwbGF5OiAnZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIHpJbmRleDogOTk5OSxcbn07XG5cbmNvbnN0IG1vZGFsU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gIHdpZHRoOiA0MjAsXG4gIG1heFdpZHRoOiAnOTJ2dycsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmZmYnLFxuICBib3JkZXJSYWRpdXM6IDEyLFxuICBib3hTaGFkb3c6ICcwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC4xOCknLFxuICBvdmVyZmxvdzogJ2hpZGRlbicsXG59O1xuXG5jb25zdCBtb2RhbEhlYWRlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgZm9udFdlaWdodDogNjAwLFxuICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2VlZScsXG59O1xuXG5jb25zdCBtb2RhbEJvZHlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgcGFkZGluZzogMTYsXG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIGdhcDogMTIsXG59O1xuXG5jb25zdCBtb2RhbEZvb3RlclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICBwYWRkaW5nOiAxMixcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgZ2FwOiA4LFxuICBib3JkZXJUb3A6ICcxcHggc29saWQgI2VlZScsXG4gIGJhY2tncm91bmRDb2xvcjogJyNmYWZhZmEnLFxufTsiXX0=
|
package/dist/hooks/useChat.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export declare const useChat: ({ baseUrl, apiKey, tenant, metadata, useWs, langu
|
|
|
18
18
|
isLoading: boolean;
|
|
19
19
|
sendMessage: (text: string, files?: File[], extraMetadata?: Record<string, any>, reCaptchaToken?: string) => Promise<void>;
|
|
20
20
|
uploadFile: (file: File) => Promise<Attachment | null>;
|
|
21
|
-
resetConversation: (reCaptchaToken
|
|
22
|
-
startConversation: (reCaptchaToken
|
|
21
|
+
resetConversation: (reCaptchaToken?: string | undefined) => Promise<void>;
|
|
22
|
+
startConversation: (reCaptchaToken?: string | undefined) => Promise<void>;
|
|
23
23
|
connectionState: "connecting" | "connected" | "disconnected";
|
|
24
24
|
conversationId: string | null;
|
|
25
25
|
possibleQueries: string[];
|
package/dist/hooks/useChat.js
CHANGED
|
@@ -341,7 +341,7 @@ export var useChat = function (_a) {
|
|
|
341
341
|
case 1:
|
|
342
342
|
_a.trys.push([1, 3, 4, 5]);
|
|
343
343
|
// Reset the conversation in the chat service
|
|
344
|
-
chatServiceRef.current.
|
|
344
|
+
chatServiceRef.current.resetChatConversation();
|
|
345
345
|
return [4 /*yield*/, chatServiceRef.current.startConversation(reCaptchaToken)];
|
|
346
346
|
case 2:
|
|
347
347
|
convId = _a.sent();
|
|
@@ -511,7 +511,7 @@ export var useChat = function (_a) {
|
|
|
511
511
|
setIsFinalized(false);
|
|
512
512
|
setIsTakenOver(false);
|
|
513
513
|
setIsAgentTyping(false);
|
|
514
|
-
chatServiceRef.current.
|
|
514
|
+
chatServiceRef.current.resetChatConversation();
|
|
515
515
|
return [4 /*yield*/, chatServiceRef.current.startConversation(reCaptchaToken)];
|
|
516
516
|
case 2:
|
|
517
517
|
convId = _a.sent();
|
|
@@ -618,4 +618,4 @@ export var useChat = function (_a) {
|
|
|
618
618
|
thinkingDelayMs: thinkingDelayMs,
|
|
619
619
|
};
|
|
620
620
|
};
|
|
621
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBbUJ0RCxJQUFNLGtDQUFrQyxHQUFHLGlFQUFpRSxDQUFDO0FBQzdHLElBQU0sd0NBQXdDLEdBQUcsaUJBQWlCLENBQUM7QUFFbkUsU0FBUyxzQkFBc0IsQ0FBQyxLQUFVOztJQUN4Qyw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixJQUFNLElBQUksR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsSUFBSSxDQUFDO1FBQ3pCLElBQUksSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLEtBQUssY0FBYyxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLHdCQUF3QjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hJLE9BQU8sSUFBSSxDQUFDLENBQUMsd0VBQXdFO0lBQ3ZGLENBQUM7SUFDRCxJQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU0sQ0FBQztJQUN0QyxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLENBQUMsSUFBTSxPQUFPLEdBQUcsVUFBQyxFQUFrTTtRQUFoTSxPQUFPLGFBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxhQUFZLEVBQVos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T0FBYyxDQUFDLENBQUM7b0JBQ3JDLENBQUM7Ozs7O1NBRUosRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRLFVBQUE7UUFDUixTQUFTLFdBQUE7UUFDVCxXQUFXLGFBQUE7UUFDWCxVQUFVLFlBQUE7UUFDVixpQkFBaUIsbUJBQUE7UUFDakIsaUJBQWlCLG1CQUFBO1FBQ2pCLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLFdBQVcsYUFBQTtRQUNYLFdBQVcsYUFBQTtRQUNYLGFBQWEsZUFBQTtRQUNiLFdBQVcsYUFBQTtRQUNYLFlBQVksY0FBQTtRQUNaLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLGVBQWUsaUJBQUE7S0FDaEIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NoYXRTZXJ2aWNlJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBBdHRhY2htZW50LCBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ2hhdFByb3BzIHtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgdGVuYW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8vICBJZiBmYWxzZSwgdGhlIGNoYXQgd2lsbCBydW4gaW4gSFRUUC1vbmx5IG1vZGUgKG5vIFdlYlNvY2tldCBjb25uZWN0aW9uKS5cbiAgdXNlV3M/OiBib29sZWFuO1xuICBsYW5ndWFnZT86IHN0cmluZztcbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVGFrZW92ZXI/OiAoKSA9PiB2b2lkO1xuICBvbkZpbmFsaXplPzogKCkgPT4gdm9pZDtcbiAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlPzogc3RyaW5nOyAvLyBDdXN0b20gbWVzc2FnZSB3aGVuIHNlcnZlciBpcyBkb3duXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybD86IHN0cmluZzsgLy8gT3B0aW9uYWwgVVJMIGZvciBjb250YWN0L3N1cHBvcnRcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWw/OiBzdHJpbmc7IC8vIExhYmVsIGZvciB0aGUgY29udGFjdCBsaW5rXG59XG5cbmNvbnN0IERFRkFVTFRfU0VSVkVSX1VOQVZBSUxBQkxFX01FU1NBR0UgPSAnVGhlIHNlcnZpY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbmNvbnN0IERFRkFVTFRfU0VSVkVSX1VOQVZBSUxBQkxFX0NPTlRBQ1RfTEFCRUwgPSAnQ29udGFjdCBzdXBwb3J0JztcblxuZnVuY3Rpb24gaXNOZXR3b3JrT3JTZXJ2ZXJFcnJvcihlcnJvcjogYW55KTogYm9vbGVhbiB7XG4gIC8vIE5vIHJlc3BvbnNlID0gbmV0d29yayBlcnJvclxuICBpZiAoIWVycm9yLnJlc3BvbnNlKSB7XG4gICAgY29uc3QgY29kZSA9IGVycm9yPy5jb2RlO1xuICAgIGlmIChjb2RlID09PSAnRVJSX05FVFdPUksnIHx8IGNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGNvZGUgPT09ICdFVElNRURPVVQnIHx8IGNvZGUgPT09ICdFUlJfQ09OTkVDVElPTl9SRUZVU0VEJykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRydWU7IC8vIGFueSByZXF1ZXN0IGVycm9yIHdpdGhvdXQgcmVzcG9uc2UgaXMgdHJlYXRlZCBhcyBzZXJ2ZXIvbmV0d29yayBpc3N1ZVxuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGVycm9yLnJlc3BvbnNlPy5zdGF0dXM7XG4gIHJldHVybiB0eXBlb2Ygc3RhdHVzID09PSAnbnVtYmVyJyAmJiBzdGF0dXMgPj0gNTAwO1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdCA9ICh7IGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YSwgdXNlV3MgPSB0cnVlLCBsYW5ndWFnZSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZSwgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLCBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsIH06IFVzZUNoYXRQcm9wcykgPT4ge1xuICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlPENoYXRNZXNzYWdlW10+KFtdKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3ByZWxvYWRlZEF0dGFjaG1lbnRzLCBzZXRQcmVsb2FkZWRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50W10+KFtdKTtcbiAgY29uc3QgW2Nvbm5lY3Rpb25TdGF0ZSwgc2V0Q29ubmVjdGlvblN0YXRlXSA9IHVzZVN0YXRlPCdjb25uZWN0aW5nJyB8ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCc+KCdkaXNjb25uZWN0ZWQnKTtcbiAgY29uc3QgW2lzQWdlbnRUeXBpbmcsIHNldElzQWdlbnRUeXBpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBjaGF0U2VydmljZVJlZiA9IHVzZVJlZjxDaGF0U2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY29udmVyc2F0aW9uSWQsIHNldENvbnZlcnNhdGlvbklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9zc2libGVRdWVyaWVzLCBzZXRQb3NzaWJsZVF1ZXJpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW3dlbGNvbWVUaXRsZSwgc2V0V2VsY29tZVRpdGxlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbd2VsY29tZUltYWdlVXJsLCBzZXRXZWxjb21lSW1hZ2VVcmxdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt3ZWxjb21lTWVzc2FnZSwgc2V0V2VsY29tZU1lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt0aGlua2luZ1BocmFzZXMsIHNldFRoaW5raW5nUGhyYXNlc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbdGhpbmtpbmdEZWxheU1zLCBzZXRUaGlua2luZ0RlbGF5TXNdID0gdXNlU3RhdGU8bnVtYmVyPigxMDAwKTtcbiAgY29uc3QgW2lzVGFrZW5PdmVyLCBzZXRJc1Rha2VuT3Zlcl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtpc0ZpbmFsaXplZCwgc2V0SXNGaW5hbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIFNjb3BlZCBtZXNzYWdlcyBrZXkgZm9yIGFwaUtleSwgY29udmVyc2F0aW9JZFxuICBjb25zdCBidWlsZE1lc3NhZ2VzS2V5ID0gdXNlQ2FsbGJhY2soKGFwaUtleVZhbDogc3RyaW5nLCBjb252SWQ6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBpZiAoIWNvbnZJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGBnZW5hc3Npc3RfY29udmVyc2F0aW9uX21lc3NhZ2VzOiR7YXBpS2V5VmFsfToke2NvbnZJZH1gO1xuICB9LCBbXSk7XG5cbiAgLy8gQ2hlY2sgaWYgYW4gZXJyb3IgaXMgYSB0b2tlbiBleHBpcmF0aW9uIGVycm9yICg0MDEgKyBcIlRva2VuIGhhcyBleHBpcmVkLlwiKVxuICBjb25zdCBpc1Rva2VuRXhwaXJlZEVycm9yID0gdXNlQ2FsbGJhY2soKGVycm9yOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gISEoXG4gICAgICBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxICYmXG4gICAgICBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgJiZcbiAgICAgIChlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yID09PSBcIlRva2VuIGhhcyBleHBpcmVkLlwiIHx8XG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICAodHlwZW9mIGVycm9yLnJlc3BvbnNlLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5pbmNsdWRlcyhcIlRva2VuIGhhcyBleHBpcmVkXCIpKSlcbiAgICApO1xuICB9LCBbXSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uIHN0YXRlIHRvIGluaXRpYWwgKGUuZy4gYWZ0ZXIgdG9rZW4gZXhwaXJhdGlvbilcbiAgY29uc3QgcmVzZXRUb0luaXRpYWxTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRDb252ZXJzYXRpb25JZChudWxsKTtcbiAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgc2V0V2VsY29tZVRpdGxlKG51bGwpO1xuICAgIHNldFdlbGNvbWVJbWFnZVVybChudWxsKTtcbiAgICBzZXRXZWxjb21lTWVzc2FnZShudWxsKTtcbiAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgIHNldFRoaW5raW5nUGhyYXNlcyhbXSk7XG4gICAgc2V0VGhpbmtpbmdEZWxheU1zKDEwMDApO1xuICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2FwaUtleSwgY29udmVyc2F0aW9uSWQsIGJ1aWxkTWVzc2FnZXNLZXldKTtcblxuICAvLyBEZWVwIGNvbXBhcmUgbWV0YWRhdGEgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1pbml0aWFsaXphdGlvbnNcbiAgLy8gT25seSByZS1pbml0aWFsaXplIGlmIG1ldGFkYXRhIGFjdHVhbGx5IGNoYW5nZXMgKGJ5IHZhbHVlLCBub3QgcmVmZXJlbmNlKVxuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHVzZU1lbW8oKCkgPT4gSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEgfHwge30pLCBbbWV0YWRhdGFdKTtcbiAgY29uc3QgbWV0YWRhdGFSZWYgPSB1c2VSZWY8c3RyaW5nPihtZXRhZGF0YVN0cmluZyk7XG4gIGNvbnN0IHByZXZCYXNlVXJsUmVmID0gdXNlUmVmPHN0cmluZz4oYmFzZVVybCk7XG4gIGNvbnN0IHByZXZBcGlLZXlSZWYgPSB1c2VSZWY8c3RyaW5nPihhcGlLZXkpO1xuICBjb25zdCBwcmV2VGVuYW50UmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odGVuYW50KTtcbiAgY29uc3QgcHJldlVzZVdzUmVmID0gdXNlUmVmPGJvb2xlYW4+KHVzZVdzKTtcblxuICAvLyBTdG9yZSBjYWxsYmFja3MgaW4gcmVmcyBzbyB0aGV5IGRvbid0IHRyaWdnZXIgcmUtaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKTtcbiAgY29uc3Qgb25UYWtlb3ZlclJlZiA9IHVzZVJlZihvblRha2VvdmVyKTtcbiAgY29uc3Qgb25GaW5hbGl6ZVJlZiA9IHVzZVJlZihvbkZpbmFsaXplKTtcblxuICAvLyBVcGRhdGUgY2FsbGJhY2sgcmVmcyB3aGVuIHRoZXkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvcjtcbiAgfSwgW29uRXJyb3JdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCA9IG9uVGFrZW92ZXI7XG4gIH0sIFtvblRha2VvdmVyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvbkZpbmFsaXplUmVmLmN1cnJlbnQgPSBvbkZpbmFsaXplO1xuICB9LCBbb25GaW5hbGl6ZV0pO1xuXG4gIC8vIEluaXRpYWxpemUgY2hhdCBzZXJ2aWNlIC0gb25seSB3aGVuIGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCB1c2VXcywgb3IgbWV0YWRhdGEgYWN0dWFsbHkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGFDaGFuZ2VkID0gbWV0YWRhdGFSZWYuY3VycmVudCAhPT0gbWV0YWRhdGFTdHJpbmc7XG4gICAgY29uc3QgYmFzZVVybENoYW5nZWQgPSBwcmV2QmFzZVVybFJlZi5jdXJyZW50ICE9PSBiYXNlVXJsO1xuICAgIGNvbnN0IGFwaUtleUNoYW5nZWQgPSBwcmV2QXBpS2V5UmVmLmN1cnJlbnQgIT09IGFwaUtleTtcbiAgICBjb25zdCB0ZW5hbnRDaGFuZ2VkID0gcHJldlRlbmFudFJlZi5jdXJyZW50ICE9PSB0ZW5hbnQ7XG4gICAgY29uc3QgdXNlV3NDaGFuZ2VkID0gcHJldlVzZVdzUmVmLmN1cnJlbnQgIT09IHVzZVdzO1xuICAgIFxuICAgIC8vIE9ubHkgcmUtaW5pdGlhbGl6ZSBmb3IgY29ubmVjdGlvbi1yZWxhdGVkIGNoYW5nZXMsIE5PVCBmb3IgbWV0YWRhdGEgY2hhbmdlc1xuICAgIGNvbnN0IG5lZWRzUmVpbml0ID0gIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgfHwgYmFzZVVybENoYW5nZWQgfHwgYXBpS2V5Q2hhbmdlZCB8fCB0ZW5hbnRDaGFuZ2VkIHx8IHVzZVdzQ2hhbmdlZDtcblxuICAgIGlmIChuZWVkc1JlaW5pdCkge1xuICAgICAgLy8gVXBkYXRlIHJlZnNcbiAgICAgIGlmIChiYXNlVXJsQ2hhbmdlZCkgcHJldkJhc2VVcmxSZWYuY3VycmVudCA9IGJhc2VVcmw7XG4gICAgICBpZiAoYXBpS2V5Q2hhbmdlZCkgcHJldkFwaUtleVJlZi5jdXJyZW50ID0gYXBpS2V5O1xuICAgICAgaWYgKHRlbmFudENoYW5nZWQpIHByZXZUZW5hbnRSZWYuY3VycmVudCA9IHRlbmFudDtcbiAgICAgIGlmICh1c2VXc0NoYW5nZWQpIHByZXZVc2VXc1JlZi5jdXJyZW50ID0gdXNlV3M7XG4gICAgICBpZiAobWV0YWRhdGFDaGFuZ2VkKSBtZXRhZGF0YVJlZi5jdXJyZW50ID0gbWV0YWRhdGFTdHJpbmc7XG5cbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIHNlcnZpY2UgaWYgaXQgZXhpc3RzXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoKCkgPT4ge30pO1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRXZWxjb21lRGF0YUhhbmRsZXIobnVsbCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgPSBuZXcgQ2hhdFNlcnZpY2UoYmFzZVVybCwgYXBpS2V5LCBtZXRhZGF0YSwgdGVuYW50LCBsYW5ndWFnZSwgdXNlV3MpO1xuICAgICAgXG4gICAgICAvLyBTZXQgdXAgaGFuZGxlcnNcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWVzc2FnZUhhbmRsZXIoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgIGNyZWF0ZV90aW1lOiAoIW1lc3NhZ2UuY3JlYXRlX3RpbWUgfHwgaXNOYU4obWVzc2FnZS5jcmVhdGVfdGltZSkpXG4gICAgICAgICAgICA/IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApXG4gICAgICAgICAgICA6IG1lc3NhZ2UuY3JlYXRlX3RpbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzID0+IFsuLi5wcmV2TWVzc2FnZXMsIG5vcm1hbGl6ZWRNZXNzYWdlXSk7XG4gICAgICAgIC8vIFN0b3AgdHlwaW5nIGFuaW1hdGlvbiB3aGVuIGFnZW50IG9yIHN5c3RlbSBtZXNzYWdlIGFycml2ZXNcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgfHwgbm9ybWFsaXplZE1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnKSB7XG4gICAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFRha2VvdmVySGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzVGFrZW5PdmVyKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uVGFrZW92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRGaW5hbGl6ZWRIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICBpZiAob25GaW5hbGl6ZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25GaW5hbGl6ZVJlZi5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoKHN0YXRlKSA9PiB7XG4gICAgICAgIHNldENvbm5lY3Rpb25TdGF0ZShzdGF0ZSk7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0V2VsY29tZURhdGFIYW5kbGVyKChkYXRhKSA9PiB7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZShkYXRhLnRpdGxlID8/IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwoZGF0YS5pbWFnZVVybCA/PyBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2UoZGF0YS5tZXNzYWdlID8/IG51bGwpO1xuICAgICAgICBpZiAoZGF0YS5wb3NzaWJsZVF1ZXJpZXMgJiYgZGF0YS5wb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhkYXRhLnBvc3NpYmxlUXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFNlcnZlclVuYXZhaWxhYmxlQ29uZmlnKFxuICAgICAgICBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsXG4gICAgICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICAgICAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWxcbiAgICAgICk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBhIHNhdmVkIGNvbnZlcnNhdGlvbiBhbmQgY29ubmVjdCB0byBpdFxuICAgICAgY29uc3QgY29udklkID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpO1xuICAgICAgaWYgKGNvbnZJZCkge1xuICAgICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5pc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpKSB7XG4gICAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICAgICAgaWYgKCF1c2VXcykge1xuICAgICAgICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFB1bGwgaW5pdGlhbCBzdGF0aWMgZGF0YVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzPy4oKSB8fCBbXTtcbiAgICAgICAgaWYgKHF1ZXJpZXMubGVuZ3RoKSBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhPy4oKTtcbiAgICAgICAgaWYgKHdlbGNvbWUpIHtcbiAgICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnPy4oKTtcbiAgICAgICAgaWYgKHRoaW5raW5nKSB7XG4gICAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICAgIHNldFRoaW5raW5nRGVsYXlNcyh0aGlua2luZy5kZWxheU1zIHx8IDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBKdXN0IHVwZGF0ZSBtZXRhZGF0YSB3aXRob3V0IHJlLWluaXRpYWxpemluZ1xuICAgICAgaWYgKG1ldGFkYXRhQ2hhbmdlZCkge1xuICAgICAgICBtZXRhZGF0YVJlZi5jdXJyZW50ID0gbWV0YWRhdGFTdHJpbmc7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsd2F5cyB1cGRhdGUgaGFuZGxlcnMgd2hlbiBjYWxsYmFja3MgY2hhbmdlICh3aXRob3V0IHJlLWluaXRpYWxpemluZylcbiAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRUYWtlb3ZlckhhbmRsZXIoKCkgPT4ge1xuICAgICAgICBzZXRJc1Rha2VuT3Zlcih0cnVlKTtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChvblRha2VvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvblRha2VvdmVyUmVmLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0RmluYWxpemVkSGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uRmluYWxpemVSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRmluYWxpemVSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRTZXJ2ZXJVbmF2YWlsYWJsZUNvbmZpZyhcbiAgICAgICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgICAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENsZWFudXAgb25seSBvbiB1bm1vdW50XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIE9ubHkgY2xlYW51cCBvbiB1bm1vdW50LCBub3Qgb24gZXZlcnkgZGVwZW5kZW5jeSBjaGFuZ2VcbiAgICB9O1xuICB9LCBbYmFzZVVybCwgYXBpS2V5LCB0ZW5hbnQsIG1ldGFkYXRhU3RyaW5nLCBsYW5ndWFnZSwgdXNlV3MsIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSwgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLCBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbF0pO1xuXG4gIC8vIFVwZGF0ZSBsYW5ndWFnZSB3aGVuIGl0IGNoYW5nZXMgKHdpdGhvdXQgcmUtaW5pdGlhbGl6aW5nIHRoZSBzZXJ2aWNlKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldExhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICB9XG4gIH0sIFtsYW5ndWFnZV0pO1xuXG4gIC8vIExvYWQgbWVzc2FnZXMgZm9yIGN1cnJlbnQgcGFpciB3aGVuIGF2YWlsYWJsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBzZXRNZXNzYWdlcyhzdG9yZWQgPyBKU09OLnBhcnNlKHN0b3JlZCkgOiBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICB9XG4gIH0sIFthcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUGVyc2lzdCBtZXNzYWdlcyBmb3IgY3VycmVudCBwYWlyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBhcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uXG4gIGNvbnN0IHJlc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJlQ2FwdGNoYVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgIHNldFdlbGNvbWVUaXRsZShudWxsKTtcbiAgICBzZXRXZWxjb21lSW1hZ2VVcmwobnVsbCk7XG4gICAgc2V0V2VsY29tZU1lc3NhZ2UobnVsbCk7XG4gICAgc2V0VGhpbmtpbmdQaHJhc2VzKFtdKTtcbiAgICBzZXRUaGlua2luZ0RlbGF5TXMoMTAwMCk7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICAgIH1cbiAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICAvLyBSZXNldCB0aGUgY29udmVyc2F0aW9uIGluIHRoZSBjaGF0IHNlcnZpY2VcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQucmVzZXRDb252ZXJzYXRpb24oKTtcbiAgICAgIFxuICAgICAgLy8gU3RhcnQgYSBuZXcgY29udmVyc2F0aW9uXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICAvLyBHZXQgcG9zc2libGUgcXVlcmllcyBmcm9tIEFQSSByZXNwb25zZVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHdlbGNvbWUgYW5kIHRoaW5raW5nIGRhdGFcbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKSB7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKCk7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2Uod2VsY29tZS5tZXNzYWdlIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgY29uc3QgdXBsb2FkRmlsZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChmaWxlOiBGaWxlKTogUHJvbWlzZTxBdHRhY2htZW50IHwgbnVsbD4gPT4ge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudD8uZ2V0Q29udmVyc2F0aW9uSWQoKTsgXG4gICAgaWYgKCFjb252ZXJzYXRpb25JZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQ/LnVwbG9hZEZpbGUoY29udmVyc2F0aW9uSWQsIGZpbGUpO1xuXG4gICAgICAvLyBjb25zdHJ1Y3QgdGhlIGZpbGUgdXJsIHdpdGggdGhlIGJhc2UgdXJsXG4gICAgICBjb25zdCBmaWxlX3VybCA9IG5ldyBVUkwodXBsb2FkUmVzdWx0IS5maWxlX3VybCEsIGJhc2VVcmwpLmhyZWY7XG4gICAgICBcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSB7XG4gICAgICAgIG5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgdHlwZTogZmlsZS50eXBlLFxuICAgICAgICBzaXplOiBmaWxlLnNpemUsXG4gICAgICAgIHVybDogZmlsZV91cmwsXG4gICAgICAgIGZpbGVfaWQ6IHVwbG9hZFJlc3VsdD8uZmlsZV9pZCxcbiAgICAgIH07XG5cbiAgICAgIHNldFByZWxvYWRlZEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIGF0dGFjaG1lbnRdKTtcbiAgICAgIHJldHVybiBhdHRhY2htZW50O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChpc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICByZXNldFRvSW5pdGlhbFN0YXRlKCk7XG4gICAgICB9XG4gICAgICBpZiAob25FcnJvclJlZi5jdXJyZW50KSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIFthcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5LCBpc1Rva2VuRXhwaXJlZEVycm9yLCByZXNldFRvSW5pdGlhbFN0YXRlXSk7XG5cbiAgLy8gU2VuZCBtZXNzYWdlXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHRleHQ6IHN0cmluZywgZmlsZXM6IEZpbGVbXSA9IFtdLCBleHRyYU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiwgcmVDYXB0Y2hhVG9rZW4/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhdCBzZXJ2aWNlIG5vdCBpbml0aWFsaXplZCcpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG5cbiAgICAgIGNvbnN0IG5ld0F0dGFjaG1lbnRzOiBBdHRhY2htZW50W10gPSBbXTtcbiAgICAgIFxuICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdXBsb2FkZWRGaWxlcyA9IGZpbGVzLm1hcChmID0+IHByZWxvYWRlZEF0dGFjaG1lbnRzLmZpbmQocGEgPT4gcGEubmFtZSA9PT0gZi5uYW1lICYmIHBhLnNpemUgPT09IGYuc2l6ZSkpLmZpbHRlcihCb29sZWFuKSBhcyBBdHRhY2htZW50W107XG4gICAgICAgIG5ld0F0dGFjaG1lbnRzLnB1c2goLi4udXBsb2FkZWRGaWxlcyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXJ0IHR5cGluZyBpbW1lZGlhdGVseSB3aGVuIHVzZXIgc2VuZHMsIHVubGVzcyBjb252ZXJzYXRpb24gaXMgdGFrZW4gb3ZlciBieSBhIGh1bWFuXG4gICAgICBpZiAoIWlzVGFrZW5PdmVyKSB7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcodHJ1ZSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2VuZE1lc3NhZ2UodGV4dCwgbmV3QXR0YWNobWVudHMsIGV4dHJhTWV0YWRhdGEsIHJlQ2FwdGNoYVRva2VuKTtcblxuICAgICAgc2V0UHJlbG9hZGVkQXR0YWNobWVudHMoW10pO1xuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICBpZiAoaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgcmVzZXRUb0luaXRpYWxTdGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc05ldHdvcmtPclNlcnZlckVycm9yKGVycm9yKSkge1xuICAgICAgICAvLyBTaG93IGN1c3RvbSBzZXJ2ZXItdW5hdmFpbGFibGUgbWVzc2FnZVxuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgICAgY29uc3QgY3JlYXRlVGltZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQ/LmdldENvbnZlcnNhdGlvbkNyZWF0ZVRpbWUoKTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gY3JlYXRlVGltZSAhPSBudWxsID8gbm93IC0gY3JlYXRlVGltZSA6IDA7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBzdGFydFRpbWUgKyAwLjAxO1xuICAgICAgICBjb25zdCBzcGVjaWFsTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICBzdGFydF90aW1lOiBzdGFydFRpbWUsXG4gICAgICAgICAgZW5kX3RpbWU6IGVuZFRpbWUsXG4gICAgICAgICAgc3BlYWtlcjogJ3NwZWNpYWwnLFxuICAgICAgICAgIHRleHQ6IHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSA/PyBERUZBVUxUX1NFUlZFUl9VTkFWQUlMQUJMRV9NRVNTQUdFLFxuICAgICAgICAgIC4uLihzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwgJiYge1xuICAgICAgICAgICAgbGlua1VybDogc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLFxuICAgICAgICAgICAgbGlua0xhYmVsOiBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCA/PyBERUZBVUxUX1NFUlZFUl9VTkFWQUlMQUJMRV9DT05UQUNUX0xBQkVMLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IFsuLi5wcmV2LCBzcGVjaWFsTWVzc2FnZV0pO1xuICAgICAgICAvLyBEb24ndCBjYWxsIG9uRXJyb3Igc28gdGhlIHVzZXIgb25seSBzZWVzIG91ciBjdXN0b20gbWVzc2FnZVxuICAgICAgfSBlbHNlIGlmIChvbkVycm9yUmVmLmN1cnJlbnQgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3ByZWxvYWRlZEF0dGFjaG1lbnRzLCBpc1Rha2VuT3ZlciwgaXNUb2tlbkV4cGlyZWRFcnJvciwgcmVzZXRUb0luaXRpYWxTdGF0ZSwgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLCBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsXSk7XG5cbiAgY29uc3Qgc3RhcnRDb252ZXJzYXRpb24gPSB1c2VDYWxsYmFjayhhc3luYyAocmVDYXB0Y2hhVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IHN0YXRlIGZvciBuZXcgY29udmVyc2F0aW9uXG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIH1cbiAgICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICAgIHNldElzVGFrZW5PdmVyKGZhbHNlKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENvbnZlcnNhdGlvbigpO1xuXG4gICAgICBjb25zdCBjb252SWQgPSBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LnN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuKTtcbiAgICAgIHNldENvbnZlcnNhdGlvbklkKGNvbnZJZCk7XG4gICAgICBzZXRDb25uZWN0aW9uU3RhdGUoJ2Nvbm5lY3RlZCcpO1xuXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKCk7XG4gICAgICAgIGlmIChxdWVyaWVzICYmIHF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEpIHtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEoKTtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZykge1xuICAgICAgICBjb25zdCB0aGlua2luZyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcoKTtcbiAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICAvLyBBZGQgZmVlZGJhY2sgdG8gYW4gYWdlbnQgbWVzc2FnZVxuICBjb25zdCBhZGRGZWVkYmFjayA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlSWQ6IHN0cmluZywgdmFsdWU6ICdnb29kJyB8ICdiYWQnLCBmZWVkYmFja01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3Qgc2VuZCBmZWVkYmFjazogQ2hhdFNlcnZpY2Ugbm90IGluaXRpYWxpemVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Nhbm5vdCBzZW5kIGZlZWRiYWNrOiBtZXNzYWdlSWQgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGF0U2VydmljZVJlZi5jdXJyZW50LmFkZEZlZWRiYWNrKG1lc3NhZ2VJZCwgdmFsdWUsIGZlZWRiYWNrTWVzc2FnZSk7XG5cbiAgICAgICAgY29uc3QgbmV3RmVlZGJhY2s6IE1lc3NhZ2VGZWVkYmFjayA9IHtcbiAgICAgICAgICBmZWVkYmFjazogdmFsdWUsXG4gICAgICAgICAgZmVlZGJhY2tfbWVzc2FnZTogZmVlZGJhY2tNZXNzYWdlLFxuICAgICAgICAgIGZlZWRiYWNrX3RpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNldE1lc3NhZ2VzKHByZXYgPT5cbiAgICAgICAgICBwcmV2Lm1hcChtID0+IHtcbiAgICAgICAgICAgIC8vIE1hdGNoIGJ5IG1lc3NhZ2VfaWQgb3IgaWQgZmllbGRcbiAgICAgICAgICAgIGNvbnN0IG1zZ0lkID0gbS5tZXNzYWdlX2lkIHx8IChtIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICByZXR1cm4gbXNnSWQgPT09IG1lc3NhZ2VJZFxuICAgICAgICAgICAgICA/IHsgLi4ubSwgZmVlZGJhY2s6IFsuLi4obS5mZWVkYmFjayB8fCBbXSksIG5ld0ZlZWRiYWNrXSB9XG4gICAgICAgICAgICAgIDogbTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvciBhcyBFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBpc0xvYWRpbmcsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgdXBsb2FkRmlsZSxcbiAgICByZXNldENvbnZlcnNhdGlvbixcbiAgICBzdGFydENvbnZlcnNhdGlvbixcbiAgICBjb25uZWN0aW9uU3RhdGUsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgcG9zc2libGVRdWVyaWVzLFxuICAgIGlzVGFrZW5PdmVyLFxuICAgIGlzRmluYWxpemVkLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgYWRkRmVlZGJhY2ssXG4gICAgd2VsY29tZVRpdGxlLFxuICAgIHdlbGNvbWVJbWFnZVVybCxcbiAgICB3ZWxjb21lTWVzc2FnZSxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICB9O1xufTtcbiJdfQ==
|
|
621
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlQ2hhdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBbUJ0RCxJQUFNLGtDQUFrQyxHQUFHLGlFQUFpRSxDQUFDO0FBQzdHLElBQU0sd0NBQXdDLEdBQUcsaUJBQWlCLENBQUM7QUFFbkUsU0FBUyxzQkFBc0IsQ0FBQyxLQUFVOztJQUN4Qyw4QkFBOEI7SUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixJQUFNLElBQUksR0FBRyxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsSUFBSSxDQUFDO1FBQ3pCLElBQUksSUFBSSxLQUFLLGFBQWEsSUFBSSxJQUFJLEtBQUssY0FBYyxJQUFJLElBQUksS0FBSyxXQUFXLElBQUksSUFBSSxLQUFLLHdCQUF3QjtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2hJLE9BQU8sSUFBSSxDQUFDLENBQUMsd0VBQXdFO0lBQ3ZGLENBQUM7SUFDRCxJQUFNLE1BQU0sR0FBRyxNQUFBLEtBQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU0sQ0FBQztJQUN0QyxPQUFPLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO0FBQ3JELENBQUM7QUFFRCxNQUFNLENBQUMsSUFBTSxPQUFPLEdBQUcsVUFBQyxFQUFrTTtRQUFoTSxPQUFPLGFBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxNQUFNLFlBQUEsRUFBRSxRQUFRLGNBQUEsRUFBRSxhQUFZLEVBQVos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T0FBYyxDQUFDLENBQUM7b0JBQ3JDLENBQUM7Ozs7O1NBRUosRUFDRCxFQUFFLENBQ0gsQ0FBQztJQUVGLE9BQU87UUFDTCxRQUFRLFVBQUE7UUFDUixTQUFTLFdBQUE7UUFDVCxXQUFXLGFBQUE7UUFDWCxVQUFVLFlBQUE7UUFDVixpQkFBaUIsbUJBQUE7UUFDakIsaUJBQWlCLG1CQUFBO1FBQ2pCLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLFdBQVcsYUFBQTtRQUNYLFdBQVcsYUFBQTtRQUNYLGFBQWEsZUFBQTtRQUNiLFdBQVcsYUFBQTtRQUNYLFlBQVksY0FBQTtRQUNaLGVBQWUsaUJBQUE7UUFDZixjQUFjLGdCQUFBO1FBQ2QsZUFBZSxpQkFBQTtRQUNmLGVBQWUsaUJBQUE7S0FDaEIsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NoYXRTZXJ2aWNlJztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBBdHRhY2htZW50LCBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQ2hhdFByb3BzIHtcbiAgYmFzZVVybDogc3RyaW5nO1xuICBhcGlLZXk6IHN0cmluZztcbiAgdGVuYW50Pzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIC8vICBJZiBmYWxzZSwgdGhlIGNoYXQgd2lsbCBydW4gaW4gSFRUUC1vbmx5IG1vZGUgKG5vIFdlYlNvY2tldCBjb25uZWN0aW9uKS5cbiAgdXNlV3M/OiBib29sZWFuO1xuICBsYW5ndWFnZT86IHN0cmluZztcbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVGFrZW92ZXI/OiAoKSA9PiB2b2lkO1xuICBvbkZpbmFsaXplPzogKCkgPT4gdm9pZDtcbiAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlPzogc3RyaW5nOyAvLyBDdXN0b20gbWVzc2FnZSB3aGVuIHNlcnZlciBpcyBkb3duXG4gIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybD86IHN0cmluZzsgLy8gT3B0aW9uYWwgVVJMIGZvciBjb250YWN0L3N1cHBvcnRcbiAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWw/OiBzdHJpbmc7IC8vIExhYmVsIGZvciB0aGUgY29udGFjdCBsaW5rXG59XG5cbmNvbnN0IERFRkFVTFRfU0VSVkVSX1VOQVZBSUxBQkxFX01FU1NBR0UgPSAnVGhlIHNlcnZpY2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJztcbmNvbnN0IERFRkFVTFRfU0VSVkVSX1VOQVZBSUxBQkxFX0NPTlRBQ1RfTEFCRUwgPSAnQ29udGFjdCBzdXBwb3J0JztcblxuZnVuY3Rpb24gaXNOZXR3b3JrT3JTZXJ2ZXJFcnJvcihlcnJvcjogYW55KTogYm9vbGVhbiB7XG4gIC8vIE5vIHJlc3BvbnNlID0gbmV0d29yayBlcnJvclxuICBpZiAoIWVycm9yLnJlc3BvbnNlKSB7XG4gICAgY29uc3QgY29kZSA9IGVycm9yPy5jb2RlO1xuICAgIGlmIChjb2RlID09PSAnRVJSX05FVFdPUksnIHx8IGNvZGUgPT09ICdFQ09OTlJFRlVTRUQnIHx8IGNvZGUgPT09ICdFVElNRURPVVQnIHx8IGNvZGUgPT09ICdFUlJfQ09OTkVDVElPTl9SRUZVU0VEJykgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHRydWU7IC8vIGFueSByZXF1ZXN0IGVycm9yIHdpdGhvdXQgcmVzcG9uc2UgaXMgdHJlYXRlZCBhcyBzZXJ2ZXIvbmV0d29yayBpc3N1ZVxuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGVycm9yLnJlc3BvbnNlPy5zdGF0dXM7XG4gIHJldHVybiB0eXBlb2Ygc3RhdHVzID09PSAnbnVtYmVyJyAmJiBzdGF0dXMgPj0gNTAwO1xufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdCA9ICh7IGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCBtZXRhZGF0YSwgdXNlV3MgPSB0cnVlLCBsYW5ndWFnZSwgb25FcnJvciwgb25UYWtlb3Zlciwgb25GaW5hbGl6ZSwgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLCBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsIH06IFVzZUNoYXRQcm9wcykgPT4ge1xuICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlPENoYXRNZXNzYWdlW10+KFtdKTtcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW3ByZWxvYWRlZEF0dGFjaG1lbnRzLCBzZXRQcmVsb2FkZWRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxBdHRhY2htZW50W10+KFtdKTtcbiAgY29uc3QgW2Nvbm5lY3Rpb25TdGF0ZSwgc2V0Q29ubmVjdGlvblN0YXRlXSA9IHVzZVN0YXRlPCdjb25uZWN0aW5nJyB8ICdjb25uZWN0ZWQnIHwgJ2Rpc2Nvbm5lY3RlZCc+KCdkaXNjb25uZWN0ZWQnKTtcbiAgY29uc3QgW2lzQWdlbnRUeXBpbmcsIHNldElzQWdlbnRUeXBpbmddID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBjaGF0U2VydmljZVJlZiA9IHVzZVJlZjxDaGF0U2VydmljZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY29udmVyc2F0aW9uSWQsIHNldENvbnZlcnNhdGlvbklkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9zc2libGVRdWVyaWVzLCBzZXRQb3NzaWJsZVF1ZXJpZXNdID0gdXNlU3RhdGU8c3RyaW5nW10+KFtdKTtcbiAgY29uc3QgW3dlbGNvbWVUaXRsZSwgc2V0V2VsY29tZVRpdGxlXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbd2VsY29tZUltYWdlVXJsLCBzZXRXZWxjb21lSW1hZ2VVcmxdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt3ZWxjb21lTWVzc2FnZSwgc2V0V2VsY29tZU1lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFt0aGlua2luZ1BocmFzZXMsIHNldFRoaW5raW5nUGhyYXNlc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbdGhpbmtpbmdEZWxheU1zLCBzZXRUaGlua2luZ0RlbGF5TXNdID0gdXNlU3RhdGU8bnVtYmVyPigxMDAwKTtcbiAgY29uc3QgW2lzVGFrZW5PdmVyLCBzZXRJc1Rha2VuT3Zlcl0gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtpc0ZpbmFsaXplZCwgc2V0SXNGaW5hbGl6ZWRdID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIFNjb3BlZCBtZXNzYWdlcyBrZXkgZm9yIGFwaUtleSwgY29udmVyc2F0aW9JZFxuICBjb25zdCBidWlsZE1lc3NhZ2VzS2V5ID0gdXNlQ2FsbGJhY2soKGFwaUtleVZhbDogc3RyaW5nLCBjb252SWQ6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBpZiAoIWNvbnZJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGBnZW5hc3Npc3RfY29udmVyc2F0aW9uX21lc3NhZ2VzOiR7YXBpS2V5VmFsfToke2NvbnZJZH1gO1xuICB9LCBbXSk7XG5cbiAgLy8gQ2hlY2sgaWYgYW4gZXJyb3IgaXMgYSB0b2tlbiBleHBpcmF0aW9uIGVycm9yICg0MDEgKyBcIlRva2VuIGhhcyBleHBpcmVkLlwiKVxuICBjb25zdCBpc1Rva2VuRXhwaXJlZEVycm9yID0gdXNlQ2FsbGJhY2soKGVycm9yOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gISEoXG4gICAgICBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAxICYmXG4gICAgICBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgJiZcbiAgICAgIChlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yID09PSBcIlRva2VuIGhhcyBleHBpcmVkLlwiIHx8XG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICAodHlwZW9mIGVycm9yLnJlc3BvbnNlLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5pbmNsdWRlcyhcIlRva2VuIGhhcyBleHBpcmVkXCIpKSlcbiAgICApO1xuICB9LCBbXSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uIHN0YXRlIHRvIGluaXRpYWwgKGUuZy4gYWZ0ZXIgdG9rZW4gZXhwaXJhdGlvbilcbiAgY29uc3QgcmVzZXRUb0luaXRpYWxTdGF0ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRDb252ZXJzYXRpb25JZChudWxsKTtcbiAgICBzZXRJc0ZpbmFsaXplZChmYWxzZSk7XG4gICAgc2V0SXNUYWtlbk92ZXIoZmFsc2UpO1xuICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgc2V0V2VsY29tZVRpdGxlKG51bGwpO1xuICAgIHNldFdlbGNvbWVJbWFnZVVybChudWxsKTtcbiAgICBzZXRXZWxjb21lTWVzc2FnZShudWxsKTtcbiAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgIHNldFRoaW5raW5nUGhyYXNlcyhbXSk7XG4gICAgc2V0VGhpbmtpbmdEZWxheU1zKDEwMDApO1xuICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICBjb25zdCBrZXkgPSBidWlsZE1lc3NhZ2VzS2V5KGFwaUtleSwgY29udmVyc2F0aW9uSWQpO1xuICAgIGlmIChrZXkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlnbm9yZVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2FwaUtleSwgY29udmVyc2F0aW9uSWQsIGJ1aWxkTWVzc2FnZXNLZXldKTtcblxuICAvLyBEZWVwIGNvbXBhcmUgbWV0YWRhdGEgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSByZS1pbml0aWFsaXphdGlvbnNcbiAgLy8gT25seSByZS1pbml0aWFsaXplIGlmIG1ldGFkYXRhIGFjdHVhbGx5IGNoYW5nZXMgKGJ5IHZhbHVlLCBub3QgcmVmZXJlbmNlKVxuICBjb25zdCBtZXRhZGF0YVN0cmluZyA9IHVzZU1lbW8oKCkgPT4gSlNPTi5zdHJpbmdpZnkobWV0YWRhdGEgfHwge30pLCBbbWV0YWRhdGFdKTtcbiAgY29uc3QgbWV0YWRhdGFSZWYgPSB1c2VSZWY8c3RyaW5nPihtZXRhZGF0YVN0cmluZyk7XG4gIGNvbnN0IHByZXZCYXNlVXJsUmVmID0gdXNlUmVmPHN0cmluZz4oYmFzZVVybCk7XG4gIGNvbnN0IHByZXZBcGlLZXlSZWYgPSB1c2VSZWY8c3RyaW5nPihhcGlLZXkpO1xuICBjb25zdCBwcmV2VGVuYW50UmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odGVuYW50KTtcbiAgY29uc3QgcHJldlVzZVdzUmVmID0gdXNlUmVmPGJvb2xlYW4+KHVzZVdzKTtcblxuICAvLyBTdG9yZSBjYWxsYmFja3MgaW4gcmVmcyBzbyB0aGV5IGRvbid0IHRyaWdnZXIgcmUtaW5pdGlhbGl6YXRpb25cbiAgY29uc3Qgb25FcnJvclJlZiA9IHVzZVJlZihvbkVycm9yKTtcbiAgY29uc3Qgb25UYWtlb3ZlclJlZiA9IHVzZVJlZihvblRha2VvdmVyKTtcbiAgY29uc3Qgb25GaW5hbGl6ZVJlZiA9IHVzZVJlZihvbkZpbmFsaXplKTtcblxuICAvLyBVcGRhdGUgY2FsbGJhY2sgcmVmcyB3aGVuIHRoZXkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvcjtcbiAgfSwgW29uRXJyb3JdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCA9IG9uVGFrZW92ZXI7XG4gIH0sIFtvblRha2VvdmVyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBvbkZpbmFsaXplUmVmLmN1cnJlbnQgPSBvbkZpbmFsaXplO1xuICB9LCBbb25GaW5hbGl6ZV0pO1xuXG4gIC8vIEluaXRpYWxpemUgY2hhdCBzZXJ2aWNlIC0gb25seSB3aGVuIGJhc2VVcmwsIGFwaUtleSwgdGVuYW50LCB1c2VXcywgb3IgbWV0YWRhdGEgYWN0dWFsbHkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGFDaGFuZ2VkID0gbWV0YWRhdGFSZWYuY3VycmVudCAhPT0gbWV0YWRhdGFTdHJpbmc7XG4gICAgY29uc3QgYmFzZVVybENoYW5nZWQgPSBwcmV2QmFzZVVybFJlZi5jdXJyZW50ICE9PSBiYXNlVXJsO1xuICAgIGNvbnN0IGFwaUtleUNoYW5nZWQgPSBwcmV2QXBpS2V5UmVmLmN1cnJlbnQgIT09IGFwaUtleTtcbiAgICBjb25zdCB0ZW5hbnRDaGFuZ2VkID0gcHJldlRlbmFudFJlZi5jdXJyZW50ICE9PSB0ZW5hbnQ7XG4gICAgY29uc3QgdXNlV3NDaGFuZ2VkID0gcHJldlVzZVdzUmVmLmN1cnJlbnQgIT09IHVzZVdzO1xuICAgIFxuICAgIC8vIE9ubHkgcmUtaW5pdGlhbGl6ZSBmb3IgY29ubmVjdGlvbi1yZWxhdGVkIGNoYW5nZXMsIE5PVCBmb3IgbWV0YWRhdGEgY2hhbmdlc1xuICAgIGNvbnN0IG5lZWRzUmVpbml0ID0gIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgfHwgYmFzZVVybENoYW5nZWQgfHwgYXBpS2V5Q2hhbmdlZCB8fCB0ZW5hbnRDaGFuZ2VkIHx8IHVzZVdzQ2hhbmdlZDtcblxuICAgIGlmIChuZWVkc1JlaW5pdCkge1xuICAgICAgLy8gVXBkYXRlIHJlZnNcbiAgICAgIGlmIChiYXNlVXJsQ2hhbmdlZCkgcHJldkJhc2VVcmxSZWYuY3VycmVudCA9IGJhc2VVcmw7XG4gICAgICBpZiAoYXBpS2V5Q2hhbmdlZCkgcHJldkFwaUtleVJlZi5jdXJyZW50ID0gYXBpS2V5O1xuICAgICAgaWYgKHRlbmFudENoYW5nZWQpIHByZXZUZW5hbnRSZWYuY3VycmVudCA9IHRlbmFudDtcbiAgICAgIGlmICh1c2VXc0NoYW5nZWQpIHByZXZVc2VXc1JlZi5jdXJyZW50ID0gdXNlV3M7XG4gICAgICBpZiAobWV0YWRhdGFDaGFuZ2VkKSBtZXRhZGF0YVJlZi5jdXJyZW50ID0gbWV0YWRhdGFTdHJpbmc7XG5cbiAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIHNlcnZpY2UgaWYgaXQgZXhpc3RzXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoKCkgPT4ge30pO1xuICAgICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRXZWxjb21lRGF0YUhhbmRsZXIobnVsbCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQgPSBuZXcgQ2hhdFNlcnZpY2UoYmFzZVVybCwgYXBpS2V5LCBtZXRhZGF0YSwgdGVuYW50LCBsYW5ndWFnZSwgdXNlV3MpO1xuICAgICAgXG4gICAgICAvLyBTZXQgdXAgaGFuZGxlcnNcbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWVzc2FnZUhhbmRsZXIoKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAuLi5tZXNzYWdlLFxuICAgICAgICAgIGNyZWF0ZV90aW1lOiAoIW1lc3NhZ2UuY3JlYXRlX3RpbWUgfHwgaXNOYU4obWVzc2FnZS5jcmVhdGVfdGltZSkpXG4gICAgICAgICAgICA/IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApXG4gICAgICAgICAgICA6IG1lc3NhZ2UuY3JlYXRlX3RpbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2V0TWVzc2FnZXMocHJldk1lc3NhZ2VzID0+IFsuLi5wcmV2TWVzc2FnZXMsIG5vcm1hbGl6ZWRNZXNzYWdlXSk7XG4gICAgICAgIC8vIFN0b3AgdHlwaW5nIGFuaW1hdGlvbiB3aGVuIGFnZW50IG9yIHN5c3RlbSBtZXNzYWdlIGFycml2ZXNcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRNZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgfHwgbm9ybWFsaXplZE1lc3NhZ2Uuc3BlYWtlciA9PT0gJ3NwZWNpYWwnKSB7XG4gICAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFRha2VvdmVySGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzVGFrZW5PdmVyKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uVGFrZW92ZXJSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uVGFrZW92ZXJSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRGaW5hbGl6ZWRIYW5kbGVyKCgpID0+IHtcbiAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgICBpZiAob25GaW5hbGl6ZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25GaW5hbGl6ZVJlZi5jdXJyZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoKHN0YXRlKSA9PiB7XG4gICAgICAgIHNldENvbm5lY3Rpb25TdGF0ZShzdGF0ZSk7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ2Nvbm5lY3RlZCcpIHtcbiAgICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0V2VsY29tZURhdGFIYW5kbGVyKChkYXRhKSA9PiB7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZShkYXRhLnRpdGxlID8/IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwoZGF0YS5pbWFnZVVybCA/PyBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2UoZGF0YS5tZXNzYWdlID8/IG51bGwpO1xuICAgICAgICBpZiAoZGF0YS5wb3NzaWJsZVF1ZXJpZXMgJiYgZGF0YS5wb3NzaWJsZVF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhkYXRhLnBvc3NpYmxlUXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldFNlcnZlclVuYXZhaWxhYmxlQ29uZmlnKFxuICAgICAgICBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsXG4gICAgICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICAgICAgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWxcbiAgICAgICk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBhIHNhdmVkIGNvbnZlcnNhdGlvbiBhbmQgY29ubmVjdCB0byBpdFxuICAgICAgY29uc3QgY29udklkID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRDb252ZXJzYXRpb25JZCgpO1xuICAgICAgaWYgKGNvbnZJZCkge1xuICAgICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5pc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpKSB7XG4gICAgICAgICAgc2V0SXNGaW5hbGl6ZWQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICAgICAgaWYgKCF1c2VXcykge1xuICAgICAgICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0ZWQnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFB1bGwgaW5pdGlhbCBzdGF0aWMgZGF0YVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzPy4oKSB8fCBbXTtcbiAgICAgICAgaWYgKHF1ZXJpZXMubGVuZ3RoKSBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhPy4oKTtcbiAgICAgICAgaWYgKHdlbGNvbWUpIHtcbiAgICAgICAgICBzZXRXZWxjb21lVGl0bGUod2VsY29tZS50aXRsZSB8fCBudWxsKTtcbiAgICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnPy4oKTtcbiAgICAgICAgaWYgKHRoaW5raW5nKSB7XG4gICAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICAgIHNldFRoaW5raW5nRGVsYXlNcyh0aGlua2luZy5kZWxheU1zIHx8IDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICAvLyBKdXN0IHVwZGF0ZSBtZXRhZGF0YSB3aXRob3V0IHJlLWluaXRpYWxpemluZ1xuICAgICAgaWYgKG1ldGFkYXRhQ2hhbmdlZCkge1xuICAgICAgICBtZXRhZGF0YVJlZi5jdXJyZW50ID0gbWV0YWRhdGFTdHJpbmc7XG4gICAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFsd2F5cyB1cGRhdGUgaGFuZGxlcnMgd2hlbiBjYWxsYmFja3MgY2hhbmdlICh3aXRob3V0IHJlLWluaXRpYWxpemluZylcbiAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRUYWtlb3ZlckhhbmRsZXIoKCkgPT4ge1xuICAgICAgICBzZXRJc1Rha2VuT3Zlcih0cnVlKTtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyhmYWxzZSk7XG4gICAgICAgIGlmIChvblRha2VvdmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvblRha2VvdmVyUmVmLmN1cnJlbnQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc2V0RmluYWxpemVkSGFuZGxlcigoKSA9PiB7XG4gICAgICAgIHNldElzRmluYWxpemVkKHRydWUpO1xuICAgICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgICAgaWYgKG9uRmluYWxpemVSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRmluYWxpemVSZWYuY3VycmVudCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZXRTZXJ2ZXJVbmF2YWlsYWJsZUNvbmZpZyhcbiAgICAgICAgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlLFxuICAgICAgICBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgICAgIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENsZWFudXAgb25seSBvbiB1bm1vdW50XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIC8vIE9ubHkgY2xlYW51cCBvbiB1bm1vdW50LCBub3Qgb24gZXZlcnkgZGVwZW5kZW5jeSBjaGFuZ2VcbiAgICB9O1xuICB9LCBbYmFzZVVybCwgYXBpS2V5LCB0ZW5hbnQsIG1ldGFkYXRhU3RyaW5nLCBsYW5ndWFnZSwgdXNlV3MsIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSwgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsLCBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbF0pO1xuXG4gIC8vIFVwZGF0ZSBsYW5ndWFnZSB3aGVuIGl0IGNoYW5nZXMgKHdpdGhvdXQgcmUtaW5pdGlhbGl6aW5nIHRoZSBzZXJ2aWNlKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnNldExhbmd1YWdlKGxhbmd1YWdlKTtcbiAgICB9XG4gIH0sIFtsYW5ndWFnZV0pO1xuXG4gIC8vIExvYWQgbWVzc2FnZXMgZm9yIGN1cnJlbnQgcGFpciB3aGVuIGF2YWlsYWJsZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0b3JlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgICBzZXRNZXNzYWdlcyhzdG9yZWQgPyBKU09OLnBhcnNlKHN0b3JlZCkgOiBbXSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFtdKTtcbiAgICB9XG4gIH0sIFthcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUGVyc2lzdCBtZXNzYWdlcyBmb3IgY3VycmVudCBwYWlyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KG1lc3NhZ2VzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBhcGlLZXksIGNvbnZlcnNhdGlvbklkLCBidWlsZE1lc3NhZ2VzS2V5XSk7XG5cbiAgLy8gUmVzZXQgY29udmVyc2F0aW9uXG4gIGNvbnN0IHJlc2V0Q29udmVyc2F0aW9uID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJlQ2FwdGNoYVRva2VuPzogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgaWYgKCFjaGF0U2VydmljZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGluZycpO1xuICAgIHNldElzTG9hZGluZyh0cnVlKTtcbiAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgc2V0UG9zc2libGVRdWVyaWVzKFtdKTtcbiAgICBzZXRXZWxjb21lVGl0bGUobnVsbCk7XG4gICAgc2V0V2VsY29tZUltYWdlVXJsKG51bGwpO1xuICAgIHNldFdlbGNvbWVNZXNzYWdlKG51bGwpO1xuICAgIHNldFRoaW5raW5nUGhyYXNlcyhbXSk7XG4gICAgc2V0VGhpbmtpbmdEZWxheU1zKDEwMDApO1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkTWVzc2FnZXNLZXkoYXBpS2V5LCBjb252ZXJzYXRpb25JZCk7XG4gICAgaWYgKGtleSkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICB9XG4gICAgc2V0SXNGaW5hbGl6ZWQoZmFsc2UpO1xuICAgIHNldElzVGFrZW5PdmVyKGZhbHNlKTtcbiAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICBcbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgdGhlIGNvbnZlcnNhdGlvbiBpbiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAgICBjaGF0U2VydmljZVJlZi5jdXJyZW50LnJlc2V0Q2hhdENvbnZlcnNhdGlvbigpO1xuICAgICAgXG4gICAgICAvLyBTdGFydCBhIG5ldyBjb252ZXJzYXRpb25cbiAgICAgIGNvbnN0IGNvbnZJZCA9IGF3YWl0IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW4pO1xuICAgICAgc2V0Q29udmVyc2F0aW9uSWQoY29udklkKTtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnY29ubmVjdGVkJyk7XG5cbiAgICAgIC8vIEdldCBwb3NzaWJsZSBxdWVyaWVzIGZyb20gQVBJIHJlc3BvbnNlXG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRQb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgY29uc3QgcXVlcmllcyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKCk7XG4gICAgICAgIGlmIChxdWVyaWVzICYmIHF1ZXJpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNldFBvc3NpYmxlUXVlcmllcyhxdWVyaWVzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gd2VsY29tZSBhbmQgdGhpbmtpbmcgZGF0YVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEpIHtcbiAgICAgICAgY29uc3Qgd2VsY29tZSA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0V2VsY29tZURhdGEoKTtcbiAgICAgICAgc2V0V2VsY29tZVRpdGxlKHdlbGNvbWUudGl0bGUgfHwgbnVsbCk7XG4gICAgICAgIHNldFdlbGNvbWVJbWFnZVVybCh3ZWxjb21lLmltYWdlVXJsIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lTWVzc2FnZSh3ZWxjb21lLm1lc3NhZ2UgfHwgbnVsbCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hhdFNlcnZpY2VSZWYuY3VycmVudC5nZXRUaGlua2luZ0NvbmZpZykge1xuICAgICAgICBjb25zdCB0aGlua2luZyA9IGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcoKTtcbiAgICAgICAgc2V0VGhpbmtpbmdQaHJhc2VzKHRoaW5raW5nLnBocmFzZXMgfHwgW10pO1xuICAgICAgICBzZXRUaGlua2luZ0RlbGF5TXModGhpbmtpbmcuZGVsYXlNcyB8fCAxMDAwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdkaXNjb25uZWN0ZWQnKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgaWYgKG9uRXJyb3JSZWYuY3VycmVudCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtdKTtcblxuICBjb25zdCB1cGxvYWRGaWxlID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZpbGU6IEZpbGUpOiBQcm9taXNlPEF0dGFjaG1lbnQgfCBudWxsPiA9PiB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50Py5nZXRDb252ZXJzYXRpb25JZCgpOyBcbiAgICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXBsb2FkUmVzdWx0ID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudD8udXBsb2FkRmlsZShjb252ZXJzYXRpb25JZCwgZmlsZSk7XG5cbiAgICAgIC8vIGNvbnN0cnVjdCB0aGUgZmlsZSB1cmwgd2l0aCB0aGUgYmFzZSB1cmxcbiAgICAgIGNvbnN0IGZpbGVfdXJsID0gbmV3IFVSTCh1cGxvYWRSZXN1bHQhLmZpbGVfdXJsISwgYmFzZVVybCkuaHJlZjtcbiAgICAgIFxuICAgICAgY29uc3QgYXR0YWNobWVudDogQXR0YWNobWVudCA9IHtcbiAgICAgICAgbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICB0eXBlOiBmaWxlLnR5cGUsXG4gICAgICAgIHNpemU6IGZpbGUuc2l6ZSxcbiAgICAgICAgdXJsOiBmaWxlX3VybCxcbiAgICAgICAgZmlsZV9pZDogdXBsb2FkUmVzdWx0Py5maWxlX2lkLFxuICAgICAgfTtcblxuICAgICAgc2V0UHJlbG9hZGVkQXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgYXR0YWNobWVudF0pO1xuICAgICAgcmV0dXJuIGF0dGFjaG1lbnQ7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKGlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHJlc2V0VG9Jbml0aWFsU3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgb25FcnJvclJlZi5jdXJyZW50KGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSwgW2FwaUtleSwgY29udmVyc2F0aW9uSWQsIGJ1aWxkTWVzc2FnZXNLZXksIGlzVG9rZW5FeHBpcmVkRXJyb3IsIHJlc2V0VG9Jbml0aWFsU3RhdGVdKTtcblxuICAvLyBTZW5kIG1lc3NhZ2VcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhhc3luYyAodGV4dDogc3RyaW5nLCBmaWxlczogRmlsZVtdID0gW10sIGV4dHJhTWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCByZUNhcHRjaGFUb2tlbj86IHN0cmluZykgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGF0IHNlcnZpY2Ugbm90IGluaXRpYWxpemVkJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzTG9hZGluZyh0cnVlKTtcblxuICAgICAgY29uc3QgbmV3QXR0YWNobWVudHM6IEF0dGFjaG1lbnRbXSA9IFtdO1xuICAgICAgXG4gICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCB1cGxvYWRlZEZpbGVzID0gZmlsZXMubWFwKGYgPT4gcHJlbG9hZGVkQXR0YWNobWVudHMuZmluZChwYSA9PiBwYS5uYW1lID09PSBmLm5hbWUgJiYgcGEuc2l6ZSA9PT0gZi5zaXplKSkuZmlsdGVyKEJvb2xlYW4pIGFzIEF0dGFjaG1lbnRbXTtcbiAgICAgICAgbmV3QXR0YWNobWVudHMucHVzaCguLi51cGxvYWRlZEZpbGVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RhcnQgdHlwaW5nIGltbWVkaWF0ZWx5IHdoZW4gdXNlciBzZW5kcywgdW5sZXNzIGNvbnZlcnNhdGlvbiBpcyB0YWtlbiBvdmVyIGJ5IGEgaHVtYW5cbiAgICAgIGlmICghaXNUYWtlbk92ZXIpIHtcbiAgICAgICAgc2V0SXNBZ2VudFR5cGluZyh0cnVlKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zZW5kTWVzc2FnZSh0ZXh0LCBuZXdBdHRhY2htZW50cywgZXh0cmFNZXRhZGF0YSwgcmVDYXB0Y2hhVG9rZW4pO1xuXG4gICAgICBzZXRQcmVsb2FkZWRBdHRhY2htZW50cyhbXSk7XG5cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChpc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICByZXNldFRvSW5pdGlhbFN0YXRlKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzTmV0d29ya09yU2VydmVyRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIC8vIFNob3cgY3VzdG9tIHNlcnZlci11bmF2YWlsYWJsZSBtZXNzYWdlXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICBjb25zdCBjcmVhdGVUaW1lID0gY2hhdFNlcnZpY2VSZWYuY3VycmVudD8uZ2V0Q29udmVyc2F0aW9uQ3JlYXRlVGltZSgpO1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBjcmVhdGVUaW1lICE9IG51bGwgPyBub3cgLSBjcmVhdGVUaW1lIDogMDtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHN0YXJ0VGltZSArIDAuMDE7XG4gICAgICAgIGNvbnN0IHNwZWNpYWxNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgIHN0YXJ0X3RpbWU6IHN0YXJ0VGltZSxcbiAgICAgICAgICBlbmRfdGltZTogZW5kVGltZSxcbiAgICAgICAgICBzcGVha2VyOiAnc3BlY2lhbCcsXG4gICAgICAgICAgdGV4dDogc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlID8/IERFRkFVTFRfU0VSVkVSX1VOQVZBSUxBQkxFX01FU1NBR0UsXG4gICAgICAgICAgLi4uKHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCAmJiB7XG4gICAgICAgICAgICBsaW5rVXJsOiBzZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgICAgICAgICBsaW5rTGFiZWw6IHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsID8/IERFRkFVTFRfU0VSVkVSX1VOQVZBSUxBQkxFX0NPTlRBQ1RfTEFCRUwsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHNldE1lc3NhZ2VzKHByZXYgPT4gWy4uLnByZXYsIHNwZWNpYWxNZXNzYWdlXSk7XG4gICAgICAgIC8vIERvbid0IGNhbGwgb25FcnJvciBzbyB0aGUgdXNlciBvbmx5IHNlZXMgb3VyIGN1c3RvbSBtZXNzYWdlXG4gICAgICB9IGVsc2UgaWYgKG9uRXJyb3JSZWYuY3VycmVudCAmJiBlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIG9uRXJyb3JSZWYuY3VycmVudChlcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbcHJlbG9hZGVkQXR0YWNobWVudHMsIGlzVGFrZW5PdmVyLCBpc1Rva2VuRXhwaXJlZEVycm9yLCByZXNldFRvSW5pdGlhbFN0YXRlLCBzZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UsIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCwgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWxdKTtcblxuICBjb25zdCBzdGFydENvbnZlcnNhdGlvbiA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZUNhcHRjaGFUb2tlbj86IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghY2hhdFNlcnZpY2VSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0aW5nJyk7XG4gICAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgICBcbiAgICAgIC8vIFJlc2V0IHN0YXRlIGZvciBuZXcgY29udmVyc2F0aW9uXG4gICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMoW10pO1xuICAgICAgY29uc3Qga2V5ID0gYnVpbGRNZXNzYWdlc0tleShhcGlLZXksIGNvbnZlcnNhdGlvbklkKTtcbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgIH1cbiAgICAgIHNldElzRmluYWxpemVkKGZhbHNlKTtcbiAgICAgIHNldElzVGFrZW5PdmVyKGZhbHNlKTtcbiAgICAgIHNldElzQWdlbnRUeXBpbmcoZmFsc2UpO1xuICAgICAgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5yZXNldENoYXRDb252ZXJzYXRpb24oKTtcblxuICAgICAgY29uc3QgY29udklkID0gYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5zdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlbik7XG4gICAgICBzZXRDb252ZXJzYXRpb25JZChjb252SWQpO1xuICAgICAgc2V0Q29ubmVjdGlvblN0YXRlKCdjb25uZWN0ZWQnKTtcblxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0UG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJpZXMgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFBvc3NpYmxlUXVlcmllcygpO1xuICAgICAgICBpZiAocXVlcmllcyAmJiBxdWVyaWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzZXRQb3NzaWJsZVF1ZXJpZXMocXVlcmllcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKSB7XG4gICAgICAgIGNvbnN0IHdlbGNvbWUgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFdlbGNvbWVEYXRhKCk7XG4gICAgICAgIHNldFdlbGNvbWVUaXRsZSh3ZWxjb21lLnRpdGxlIHx8IG51bGwpO1xuICAgICAgICBzZXRXZWxjb21lSW1hZ2VVcmwod2VsY29tZS5pbWFnZVVybCB8fCBudWxsKTtcbiAgICAgICAgc2V0V2VsY29tZU1lc3NhZ2Uod2VsY29tZS5tZXNzYWdlIHx8IG51bGwpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQuZ2V0VGhpbmtpbmdDb25maWcpIHtcbiAgICAgICAgY29uc3QgdGhpbmtpbmcgPSBjaGF0U2VydmljZVJlZi5jdXJyZW50LmdldFRoaW5raW5nQ29uZmlnKCk7XG4gICAgICAgIHNldFRoaW5raW5nUGhyYXNlcyh0aGlua2luZy5waHJhc2VzIHx8IFtdKTtcbiAgICAgICAgc2V0VGhpbmtpbmdEZWxheU1zKHRoaW5raW5nLmRlbGF5TXMgfHwgMTAwMCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHNldENvbm5lY3Rpb25TdGF0ZSgnZGlzY29ubmVjdGVkJyk7XG4gICAgICBzZXRJc0FnZW50VHlwaW5nKGZhbHNlKTtcbiAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQgJiYgZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gQWRkIGZlZWRiYWNrIHRvIGFuIGFnZW50IG1lc3NhZ2VcbiAgY29uc3QgYWRkRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZUlkOiBzdHJpbmcsIHZhbHVlOiAnZ29vZCcgfCAnYmFkJywgZmVlZGJhY2tNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIWNoYXRTZXJ2aWNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ2Fubm90IHNlbmQgZmVlZGJhY2s6IENoYXRTZXJ2aWNlIG5vdCBpbml0aWFsaXplZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDYW5ub3Qgc2VuZCBmZWVkYmFjazogbWVzc2FnZUlkIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2hhdFNlcnZpY2VSZWYuY3VycmVudC5hZGRGZWVkYmFjayhtZXNzYWdlSWQsIHZhbHVlLCBmZWVkYmFja01lc3NhZ2UpO1xuXG4gICAgICAgIGNvbnN0IG5ld0ZlZWRiYWNrOiBNZXNzYWdlRmVlZGJhY2sgPSB7XG4gICAgICAgICAgZmVlZGJhY2s6IHZhbHVlLFxuICAgICAgICAgIGZlZWRiYWNrX21lc3NhZ2U6IGZlZWRiYWNrTWVzc2FnZSxcbiAgICAgICAgICBmZWVkYmFja190aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgfTtcblxuICAgICAgICBzZXRNZXNzYWdlcyhwcmV2ID0+XG4gICAgICAgICAgcHJldi5tYXAobSA9PiB7XG4gICAgICAgICAgICAvLyBNYXRjaCBieSBtZXNzYWdlX2lkIG9yIGlkIGZpZWxkXG4gICAgICAgICAgICBjb25zdCBtc2dJZCA9IG0ubWVzc2FnZV9pZCB8fCAobSBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgcmV0dXJuIG1zZ0lkID09PSBtZXNzYWdlSWRcbiAgICAgICAgICAgICAgPyB7IC4uLm0sIGZlZWRiYWNrOiBbLi4uKG0uZmVlZGJhY2sgfHwgW10pLCBuZXdGZWVkYmFja10gfVxuICAgICAgICAgICAgICA6IG07XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChvbkVycm9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIHVwbG9hZEZpbGUsXG4gICAgcmVzZXRDb252ZXJzYXRpb24sXG4gICAgc3RhcnRDb252ZXJzYXRpb24sXG4gICAgY29ubmVjdGlvblN0YXRlLFxuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHBvc3NpYmxlUXVlcmllcyxcbiAgICBpc1Rha2VuT3ZlcixcbiAgICBpc0ZpbmFsaXplZCxcbiAgICBpc0FnZW50VHlwaW5nLFxuICAgIGFkZEZlZWRiYWNrLFxuICAgIHdlbGNvbWVUaXRsZSxcbiAgICB3ZWxjb21lSW1hZ2VVcmwsXG4gICAgd2VsY29tZU1lc3NhZ2UsXG4gICAgdGhpbmtpbmdQaHJhc2VzLFxuICAgIHRoaW5raW5nRGVsYXlNcyxcbiAgfTtcbn07XG4iXX0=
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { GenAgentChat } from './components/GenAgentChat';
|
|
2
2
|
export type { GenAgentChatProps, ChatMessage } from './types';
|
|
3
3
|
export { GenAgentConfigPanel } from './components/GenAgentConfigPanel';
|
|
4
|
-
export type { GenAgentConfigPanelProps, ChatTheme, ChatSettingsConfig, } from './components/GenAgentConfigPanel';
|
|
4
|
+
export type { GenAgentConfigPanelProps, ChatTheme, ChatSettingsConfig, FeatureFlags, } from './components/GenAgentConfigPanel';
|
|
5
5
|
export { ChatBubble } from './components/ChatBubble';
|
|
6
6
|
export { ChatService } from './services/chatService';
|
|
7
7
|
export { useChat } from './hooks/useChat';
|
package/dist/index.js
CHANGED
|
@@ -5,4 +5,4 @@ export { ChatService } from './services/chatService';
|
|
|
5
5
|
export { useChat } from './hooks/useChat';
|
|
6
6
|
export { parseInteractiveContentBlocks, generateMessageContent, } from './utils/interactiveContent';
|
|
7
7
|
export { defaultTranslations, spanishTranslations, frenchTranslations, germanTranslations, italianTranslations, portugueseTranslations, translationsByLanguage, getBrowserLanguage, getTranslation, getTranslationString, getTranslationArray, resolveLanguage, mergeTranslations, getTranslationsForLanguage, } from './utils/i18n';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBT3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBVzFDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0Isc0JBQXNCLEdBQ3ZCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGlCQUFpQixFQUNqQiwwQkFBMEIsR0FDM0IsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBHZW5BZ2VudENoYXQgfSBmcm9tICcuL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0JztcbmV4cG9ydCB0eXBlIHsgR2VuQWdlbnRDaGF0UHJvcHMsIENoYXRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgeyBHZW5BZ2VudENvbmZpZ1BhbmVsIH0gZnJvbSAnLi9jb21wb25lbnRzL0dlbkFnZW50Q29uZmlnUGFuZWwnO1xuZXhwb3J0IHR5cGUge1xuICBHZW5BZ2VudENvbmZpZ1BhbmVsUHJvcHMsXG4gIENoYXRUaGVtZSxcbiAgQ2hhdFNldHRpbmdzQ29uZmlnLFxuICBGZWF0dXJlRmxhZ3MsXG59IGZyb20gJy4vY29tcG9uZW50cy9HZW5BZ2VudENvbmZpZ1BhbmVsJztcbmV4cG9ydCB7IENoYXRCdWJibGUgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEJ1YmJsZSc7XG5leHBvcnQgeyBDaGF0U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2hhdFNlcnZpY2UnO1xuZXhwb3J0IHsgdXNlQ2hhdCB9IGZyb20gJy4vaG9va3MvdXNlQ2hhdCc7XG5leHBvcnQgdHlwZSB7IFVzZUNoYXRQcm9wcyB9IGZyb20gJy4vaG9va3MvdXNlQ2hhdCc7XG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaG1lbnQsXG4gIEFnZW50V2VsY29tZURhdGEsXG4gIEFnZW50VGhpbmtpbmdDb25maWcsXG4gIENoYXRDb250ZW50QmxvY2ssXG4gIER5bmFtaWNDaGF0SXRlbSxcbiAgU2NoZWR1bGVJdGVtLFxuICBUcmFuc2xhdGlvbnMsXG59IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHtcbiAgcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MsXG4gIGdlbmVyYXRlTWVzc2FnZUNvbnRlbnQsXG59IGZyb20gJy4vdXRpbHMvaW50ZXJhY3RpdmVDb250ZW50JztcbmV4cG9ydCB7XG4gIGRlZmF1bHRUcmFuc2xhdGlvbnMsXG4gIHNwYW5pc2hUcmFuc2xhdGlvbnMsXG4gIGZyZW5jaFRyYW5zbGF0aW9ucyxcbiAgZ2VybWFuVHJhbnNsYXRpb25zLFxuICBpdGFsaWFuVHJhbnNsYXRpb25zLFxuICBwb3J0dWd1ZXNlVHJhbnNsYXRpb25zLFxuICB0cmFuc2xhdGlvbnNCeUxhbmd1YWdlLFxuICBnZXRCcm93c2VyTGFuZ3VhZ2UsXG4gIGdldFRyYW5zbGF0aW9uLFxuICBnZXRUcmFuc2xhdGlvblN0cmluZyxcbiAgZ2V0VHJhbnNsYXRpb25BcnJheSxcbiAgcmVzb2x2ZUxhbmd1YWdlLFxuICBtZXJnZVRyYW5zbGF0aW9ucyxcbiAgZ2V0VHJhbnNsYXRpb25zRm9yTGFuZ3VhZ2UsXG59IGZyb20gJy4vdXRpbHMvaTE4bic7XG4iXX0=
|
|
@@ -66,7 +66,7 @@ export declare class ChatService {
|
|
|
66
66
|
/**
|
|
67
67
|
* Reset the current conversation by clearing the ID and websocket
|
|
68
68
|
*/
|
|
69
|
-
|
|
69
|
+
resetChatConversation(): void;
|
|
70
70
|
/**
|
|
71
71
|
* Check if there's a current conversation
|
|
72
72
|
*/
|
|
@@ -77,7 +77,7 @@ export declare class ChatService {
|
|
|
77
77
|
getConversationId(): string | null;
|
|
78
78
|
getConversationCreateTime(): number | null;
|
|
79
79
|
isConversationFinalized(): boolean;
|
|
80
|
-
startConversation(reCaptchaToken
|
|
80
|
+
startConversation(reCaptchaToken?: string | undefined): Promise<string>;
|
|
81
81
|
sendMessage(message: string, attachments?: Attachment[], extraMetadata?: Record<string, any>, reCaptchaToken?: string): Promise<void>;
|
|
82
82
|
uploadFile(chatId: string, file: File): Promise<FileUploadResponse | null>;
|
|
83
83
|
connectWebSocket(): void;
|
|
@@ -264,7 +264,7 @@ var ChatService = /** @class */ (function () {
|
|
|
264
264
|
/**
|
|
265
265
|
* Reset the current conversation by clearing the ID and websocket
|
|
266
266
|
*/
|
|
267
|
-
ChatService.prototype.
|
|
267
|
+
ChatService.prototype.resetChatConversation = function () {
|
|
268
268
|
// Close the current websocket connection if it exists
|
|
269
269
|
if (this.webSocket) {
|
|
270
270
|
this.webSocket.close();
|
|
@@ -324,8 +324,10 @@ var ChatService = /** @class */ (function () {
|
|
|
324
324
|
messages: [],
|
|
325
325
|
recorded_at: new Date().toISOString(),
|
|
326
326
|
data_source_id: "00000000-0000-0000-0000-000000000000",
|
|
327
|
-
recaptcha_token: reCaptchaToken,
|
|
328
327
|
};
|
|
328
|
+
if (reCaptchaToken) {
|
|
329
|
+
requestBody.recaptcha_token = reCaptchaToken;
|
|
330
|
+
}
|
|
329
331
|
if (this.metadata) {
|
|
330
332
|
requestBody.metadata = this.metadata;
|
|
331
333
|
}
|
|
@@ -396,7 +398,7 @@ var ChatService = /** @class */ (function () {
|
|
|
396
398
|
case 4:
|
|
397
399
|
error_1 = _a.sent();
|
|
398
400
|
if (this.isTokenExpiredError(error_1)) {
|
|
399
|
-
this.
|
|
401
|
+
this.resetChatConversation();
|
|
400
402
|
}
|
|
401
403
|
throw error_1;
|
|
402
404
|
case 5: return [2 /*return*/];
|
|
@@ -487,7 +489,7 @@ var ChatService = /** @class */ (function () {
|
|
|
487
489
|
error_2 = _c.sent();
|
|
488
490
|
// Check if this is a token expiration error
|
|
489
491
|
if (this.isTokenExpiredError(error_2)) {
|
|
490
|
-
this.
|
|
492
|
+
this.resetChatConversation();
|
|
491
493
|
throw error_2;
|
|
492
494
|
}
|
|
493
495
|
// Check if this is the agent inactive error
|
|
@@ -535,7 +537,7 @@ var ChatService = /** @class */ (function () {
|
|
|
535
537
|
case 3:
|
|
536
538
|
error_3 = _a.sent();
|
|
537
539
|
if (this.isTokenExpiredError(error_3)) {
|
|
538
|
-
this.
|
|
540
|
+
this.resetChatConversation();
|
|
539
541
|
}
|
|
540
542
|
throw error_3;
|
|
541
543
|
case 4: return [2 /*return*/];
|
|
@@ -705,7 +707,7 @@ var ChatService = /** @class */ (function () {
|
|
|
705
707
|
case 2:
|
|
706
708
|
err_1 = _a.sent();
|
|
707
709
|
if (this.isTokenExpiredError(err_1)) {
|
|
708
|
-
this.
|
|
710
|
+
this.resetChatConversation();
|
|
709
711
|
}
|
|
710
712
|
return [3 /*break*/, 3];
|
|
711
713
|
case 3: return [2 /*return*/];
|
|
@@ -743,7 +745,7 @@ var ChatService = /** @class */ (function () {
|
|
|
743
745
|
case 3:
|
|
744
746
|
error_4 = _c.sent();
|
|
745
747
|
if (this.isTokenExpiredError(error_4)) {
|
|
746
|
-
this.
|
|
748
|
+
this.resetChatConversation();
|
|
747
749
|
}
|
|
748
750
|
console.error('Feedback API call failed:', {
|
|
749
751
|
message: error_4.message,
|
|
@@ -766,4 +768,4 @@ var ChatService = /** @class */ (function () {
|
|
|
766
768
|
return ChatService;
|
|
767
769
|
}());
|
|
768
770
|
export { ChatService };
|
|
769
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFTMUIsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QjtJQTZCRSxxQkFDRSxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQThCLEVBQzlCLE1BQWUsRUFDZixRQUFpQixFQUNqQixLQUFxQjtRQUFyQixzQkFBQSxFQUFBLFlBQXFCO1FBL0JmLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQywyQkFBc0IsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQzlFLGVBQVUsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQ2xFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQTRDLElBQUksQ0FBQztRQUMvRCxvQkFBZSxHQUF3QixJQUFJLENBQUM7UUFDNUMscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQUM3QywyQkFBc0IsR0FFbkIsSUFBSSxDQUFDO1FBQ1IsdUJBQWtCLEdBQThDLElBQUksQ0FBQztRQUNyRSxtQkFBYyxHQUFHLHdCQUF3QixDQUFDO1FBQzFDLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUF3QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JFLHFCQUFnQixHQUFrQixJQUFJLENBQUMsQ0FBQyxxQkFBcUI7UUFpQm5FLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRU8sbUNBQWEsR0FBckI7UUFDRSwyREFBMkQ7UUFDM0QsT0FBTyxVQUFHLElBQUksQ0FBQyxjQUFjLGNBQUksSUFBSSxDQUFDLE1BQU0sQ0FBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNILGlDQUFXLEdBQVgsVUFBWSxRQUE0QjtRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxpQ0FBVyxHQUFYLFVBQVksUUFBeUM7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSywwQ0FBb0IsR0FBNUIsVUFBNkIsUUFBZ0I7UUFDM0MsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV6Qiw2REFBNkQ7UUFDN0QsSUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRWpELHdEQUF3RDtRQUN4RCxJQUFNLFdBQVcsR0FBMkI7WUFDMUMsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsT0FBTztZQUNiLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsT0FBTztTQUNkLENBQUM7UUFFRixrRUFBa0U7UUFDbEUsSUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzQywwRUFBMEU7UUFDMUUsSUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBRXBGLHVFQUF1RTtRQUN2RSxJQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRTVELDZGQUE2RjtRQUM3Riw0Q0FBNEM7UUFDNUMsSUFBTSxLQUFLLEdBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyQyxXQUFXO1FBQ1gsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFHLFlBQVksV0FBUSxDQUFDLENBQUM7UUFFcEMsOERBQThEO1FBQzlELElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSyxnQ0FBVSxHQUFsQixVQUFtQixXQUF3QztRQUF4Qyw0QkFBQSxFQUFBLGdDQUF3QztRQUN6RCxJQUFNLE9BQU8sR0FBMkI7WUFDdEMsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ3hCLGNBQWMsRUFBRSxXQUFXO1NBQzVCLENBQUM7UUFFRixnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkMsQ0FBQztRQUVELHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsaUJBQVUsSUFBSSxDQUFDLFVBQVUsQ0FBRSxDQUFDO1FBQ3pELENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUNBQWlCLEdBQWpCLFVBQWtCLE9BQXVDO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx3Q0FBa0IsR0FBbEIsVUFBbUIsT0FBbUI7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7SUFDakMsQ0FBQztJQUVELHlDQUFtQixHQUFuQixVQUFvQixPQUFtQjtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwrQ0FBeUIsR0FBekIsVUFDRSxPQUFxRTtRQUVyRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDO0lBQ3hDLENBQUM7SUFFRCwyQ0FBcUIsR0FBckIsVUFBc0IsT0FBa0Q7UUFDdEUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0RBQTBCLEdBQTFCLFVBQ0UsT0FBZ0IsRUFDaEIsVUFBbUIsRUFDbkIsWUFBcUI7UUFFckIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQztRQUN4QyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsVUFBVSxDQUFDO1FBQzlDLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxZQUFZLENBQUM7SUFDcEQsQ0FBQztJQUVELHdDQUFrQixHQUFsQjtRQUNFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsb0NBQWMsR0FBZDtRQUNFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsdUNBQWlCLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNLLDJDQUFxQixHQUE3QjtRQUNFLElBQUksQ0FBQztZQUNILElBQUksaUJBQWlCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNuRSxnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZCLGlCQUFpQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ2hFLENBQUM7WUFDRCxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ2hCLElBQUEsS0FTRixJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBUi9CLGNBQWMsb0JBQUEsRUFDZCxVQUFVLGdCQUFBLEVBQ1YsV0FBVyxpQkFBQSxFQUNYLGVBQWUscUJBQUEsRUFDZixXQUFXLGlCQUFBLEVBQ1gsY0FBYyxvQkFBQSxFQUNkLE9BQU8sYUFBQSxFQUNQLFVBQVUsZ0JBQ3FCLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO2dCQUNyQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsVUFBVSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsSUFBSSxLQUFLLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLElBQUksQ0FBQztnQkFDckMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztvQkFDbkQsQ0FBQyxDQUFDLGVBQWU7b0JBQ2pCLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxJQUFJLENBQUMsY0FBYyxHQUFHO29CQUNwQixPQUFPLEVBQUUsQ0FBQyxjQUFjLElBQUksY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7b0JBQ3pELE9BQU8sRUFDTCxjQUFjLElBQUksT0FBTyxjQUFjLENBQUMsT0FBTyxLQUFLLFFBQVE7d0JBQzFELENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTzt3QkFDeEIsQ0FBQyxDQUFDLElBQUk7aUJBQ1gsQ0FBQztnQkFDRixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztnQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUM1QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsU0FBUztRQUNYLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQ0FBZ0IsR0FBeEI7UUFDRSxJQUFJLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3ZELElBQU0sZ0JBQWdCLEdBQUc7b0JBQ3ZCLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDbkMsVUFBVSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7b0JBQ3ZDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDN0IsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO29CQUNyQyxXQUFXLHdCQUNOLElBQUksQ0FBQyxXQUFXLEtBQ25CLFFBQVEsRUFDTixJQUFJLENBQUMsZ0JBQWdCOzRCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7NEJBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7NEJBQzNDLENBQUMsQ0FBQyxJQUFJOzRCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQ3hDO29CQUNELGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztvQkFDbkMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO29CQUNyQixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7aUJBQzVCLENBQUM7Z0JBQ0YsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsU0FBUztRQUNYLENBQUM7SUFDSCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ3hDLHlDQUFtQixHQUEzQixVQUE0QixLQUFVO1FBQ3BDLE9BQU8sQ0FDTCxLQUFLLENBQUMsUUFBUTtZQUNkLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUc7WUFDN0IsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJO1lBQ25CLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLG9CQUFvQjtnQkFDakQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLG9CQUFvQjtnQkFDcEQsQ0FBQyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQ2xHLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCx1Q0FBaUIsR0FBakI7UUFDRSxzREFBc0Q7UUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQztnQkFDSCxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzdDLENBQUM7WUFBQyxXQUFNLENBQUMsQ0FBQSxDQUFDO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFFekIsNEJBQTRCO1FBQzVCLElBQUksQ0FBQztZQUNILFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixTQUFTO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILDJDQUFxQixHQUFyQjtRQUNFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsdUNBQWlCLEdBQWpCO1FBQ0UsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCwrQ0FBeUIsR0FBekI7UUFDRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsNkNBQXVCLEdBQXZCO1FBQ0UsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFSyx1Q0FBaUIsR0FBdkIsVUFBd0IsY0FBa0M7Ozs7Ozs7d0JBRWhELFdBQVcsR0FBUTs0QkFDdkIsUUFBUSxFQUFFLEVBQUU7NEJBQ1osV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFOzRCQUNyQyxjQUFjLEVBQUUsc0NBQXNDOzRCQUN0RCxlQUFlLEVBQUUsY0FBYzt5QkFDaEMsQ0FBQzt3QkFFRixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs0QkFDbEIsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUN2QyxDQUFDO3dCQUVnQixxQkFBTSxLQUFLLENBQUMsSUFBSSxDQUMvQixVQUFHLElBQUksQ0FBQyxPQUFPLHlDQUFzQyxFQUNyRCxXQUFXLEVBQ1g7Z0NBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7NkJBQzNCLENBQ0YsRUFBQTs7d0JBTkssUUFBUSxHQUFHLFNBTWhCO3dCQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7d0JBQ3BELDBGQUEwRjt3QkFDMUYsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVzs0QkFDckQsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUk7NEJBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO3dCQUN0QixnQ0FBZ0M7d0JBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO3dCQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQzt3QkFFekIsc0NBQXNDO3dCQUN0QyxJQUNFLFFBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQXNCOzRCQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQy9DLENBQUM7NEJBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FDaEUsVUFBQyxLQUFLLElBQUssT0FBQSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQXBELENBQW9ELENBQ2hFLENBQUM7d0JBQ0osQ0FBQzt3QkFFSyxPQUFPLEdBQVEsUUFBUSxDQUFDLElBQVcsQ0FBQzt3QkFDcEMsT0FBTyxHQUF1QixPQUFPLENBQUMsUUFBUSxDQUFDO3dCQUNyRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzt3QkFDakIsWUFBWSxHQUF1QixPQUFPLENBQUMsbUJBQW1CLENBQUM7d0JBQy9ELGVBQWUsR0FDbkIsT0FBTyxDQUFDLHVCQUF1QixDQUFDO3dCQUM1QixlQUFlLEdBQ25CLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQzt3QkFDM0IsZ0JBQWdCLEdBQ3BCLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzt3QkFFdEMsSUFBSSxDQUFDLFdBQVcsR0FBRzs0QkFDakIsS0FBSyxFQUFFLFlBQVksSUFBSSxJQUFJOzRCQUMzQixPQUFPLEVBQUUsSUFBSTs0QkFDYixRQUFRLEVBQUUsZUFBZSxJQUFJLElBQUk7NEJBQ2pDLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTt5QkFDdEMsQ0FBQzt3QkFFRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDO3dCQUNoRCxDQUFDO3dCQUNELElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLElBQUksZ0JBQWdCLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3BDLEdBQUcsRUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxDQUNwQyxDQUFDO3dCQUNKLENBQUM7NkJBRUcsQ0FBQSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQSxFQUFyQyx3QkFBcUM7d0JBQ3ZDLHFCQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBQTs7d0JBQXJDLFNBQXFDLENBQUM7Ozt3QkFHeEMsNkNBQTZDO3dCQUM3QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN6RCxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQzs0QkFDeEIsY0FBYyxHQUFnQjtnQ0FDbEMsV0FBVyxFQUFFLEdBQUc7Z0NBQ2hCLFVBQVUsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGlDQUFpQztnQ0FDaEYsUUFBUSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxFQUFFLGlDQUFpQztnQ0FDckYsT0FBTyxFQUFFLE9BQU87Z0NBQ2hCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQjs2QkFDMUMsQ0FBQzs0QkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDOzRCQUMvRCxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3dCQUN0QyxDQUFDO3dCQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7NEJBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzVDLENBQUM7d0JBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7d0JBQ3hCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUNmLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUMxQixDQUFDO3dCQUNELHNCQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFDOzs7d0JBRXJDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQUssQ0FBQyxFQUFFLENBQUM7NEJBQ3BDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO3dCQUMzQixDQUFDO3dCQUNELE1BQU0sT0FBSyxDQUFDOzs7OztLQUVmO0lBRUssaUNBQVcsR0FBakIsVUFDRSxPQUFlLEVBQ2YsV0FBMEIsRUFDMUIsYUFBbUMsRUFDbkMsY0FBdUI7Ozs7Ozs7d0JBRXZCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7NEJBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQzt3QkFDOUMsQ0FBQzt3QkFFSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQzt3QkFDeEIsV0FBVyxHQUFnQjs0QkFDL0IsV0FBVyxFQUFFLEdBQUc7NEJBQ2hCLFVBQVUsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGlDQUFpQzs0QkFDaEYsUUFBUSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxFQUFFLGlDQUFpQzs0QkFDckYsT0FBTyxFQUFFLFVBQVU7NEJBQ25CLElBQUksRUFBRSxPQUFPOzRCQUNiLFdBQVcsRUFBRSxXQUFXO3lCQUN6QixDQUFDO3dCQUVGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDOzRCQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNuQyxDQUFDOzs7O3dCQUdPLFdBQVcsR0FBUTs0QkFDdkIsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDOzRCQUN2QixXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7eUJBQ3RDLENBQUM7d0JBRUYsSUFBSSxjQUFjLEVBQUUsQ0FBQzs0QkFDbkIsV0FBVyxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7d0JBQy9DLENBQUM7d0JBR0ssY0FBYyx5QkFDZixDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEdBQ3JCLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUN6QixDQUFDO3dCQUNGLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQzNDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO3dCQUN4QyxDQUFDO3dCQUVnQixxQkFBTSxLQUFLLENBQUMsS0FBSyxDQUNoQyxVQUFHLElBQUksQ0FBQyxPQUFPLG1EQUF5QyxJQUFJLENBQUMsY0FBYyxDQUFFLEVBQzdFLFdBQVcsRUFDWDtnQ0FDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTs2QkFDM0IsQ0FDRixFQUFBOzt3QkFOSyxRQUFRLEdBQUcsU0FNaEI7d0JBRUQscUdBQXFHO3dCQUNyRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7NEJBQ3ZDLElBQUksQ0FBQztnQ0FDRyxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQVcsQ0FBQztnQ0FFMUMsSUFBSSxZQUFZLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7b0NBQ2xFLG9EQUFvRDtvQ0FDcEQsS0FBUyxDQUFDLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQzt3Q0FDckQsV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBRTdDLElBQ0UsV0FBVyxDQUFDLE9BQU8sS0FBSyxPQUFPOzRDQUMvQixXQUFXLENBQUMsSUFBSTs0Q0FDaEIsV0FBVyxDQUFDLFdBQVcsS0FBSyxTQUFTOzRDQUNyQyxXQUFXLENBQUMsVUFBVSxLQUFLLFNBQVM7NENBQ3BDLFdBQVcsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUNsQyxDQUFDOzRDQUNLLFlBQVksR0FBZ0I7Z0RBQ2hDLFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztnREFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7b0RBQ3JDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0I7b0RBQ3RELENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVTtnREFDMUIsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0I7b0RBQ25DLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxzQkFBc0I7b0RBQ3BELENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUTtnREFDeEIsT0FBTyxFQUFFLE9BQU87Z0RBQ2hCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtnREFDdEIsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLElBQUksV0FBVyxDQUFDLEVBQUU7NkNBQ3JELENBQUM7NENBRUYsK0RBQStEOzRDQUMvRCx5RUFBeUU7NENBQ3pFLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7NENBQ2xDLE1BQU07d0NBQ1IsQ0FBQztvQ0FDSCxDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQzs0QkFBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO2dDQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLCtDQUErQyxFQUFFLFVBQVUsQ0FBQyxDQUFDOzRCQUM3RSxDQUFDO3dCQUNILENBQUM7Ozs7d0JBRUQsNENBQTRDO3dCQUM1QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFLLENBQUMsRUFBRSxDQUFDOzRCQUNwQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzs0QkFDekIsTUFBTSxPQUFLLENBQUM7d0JBQ2QsQ0FBQzt3QkFFRCw0Q0FBNEM7d0JBQzVDLElBQ0UsT0FBSyxDQUFDLFFBQVE7NEJBQ2QsT0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJOzRCQUNuQixPQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQ2xELENBQUM7NEJBQ0QsdURBQXVEOzRCQUN2RCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQ0FDbEIsWUFBWSxjQUNoQixXQUFXLEVBQUUsR0FBRyxFQUNoQixVQUFVLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFDN0MsUUFBUSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxFQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUNsQixJQUFJLEVBQUUsTUFBQSxJQUFJLENBQUMsd0JBQXdCLG1DQUFJLHFFQUFxRSxJQUN6RyxDQUFDLElBQUksQ0FBQywyQkFBMkIsSUFBSTtvQ0FDdEMsT0FBTyxFQUFFLElBQUksQ0FBQywyQkFBMkI7b0NBQ3pDLFNBQVMsRUFBRSxNQUFBLElBQUksQ0FBQyw2QkFBNkIsbUNBQUksaUJBQWlCO2lDQUNuRSxDQUFDLENBQ0gsQ0FBQztnQ0FDRixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDOzRCQUNwQyxDQUFDOzRCQUNELDJEQUEyRDs0QkFDM0Qsc0JBQU87d0JBQ1QsQ0FBQzt3QkFFRCxNQUFNLE9BQUssQ0FBQzs7Ozs7S0FFZjtJQUVLLGdDQUFVLEdBQWhCLFVBQWlCLE1BQWMsRUFBRSxJQUFVOzs7Ozs7d0JBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7NEJBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQzt3QkFDOUMsQ0FBQzt3QkFFSyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQzt3QkFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7d0JBQ25DLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDOzs7O3dCQUdYLHFCQUFNLEtBQUssQ0FBQyxJQUFJLENBQy9CLFVBQUcsSUFBSSxDQUFDLE9BQU8sNkNBQTBDLEVBQ3pELFFBQVEsRUFDUjtnQ0FDRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQzs2QkFDaEQsQ0FDRixFQUFBOzt3QkFOSyxRQUFRLEdBQUcsU0FNaEI7d0JBRUQsc0JBQU8sUUFBUSxDQUFDLElBQTBCLEVBQUM7Ozt3QkFFM0MsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQzNCLENBQUM7d0JBQ0QsTUFBTSxPQUFLLENBQUM7Ozs7O0tBRWY7SUFFRCxzQ0FBZ0IsR0FBaEI7UUFBQSxpQkFpSkM7UUFoSkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQzFFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxzQkFBc0I7WUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0UsaURBQWlEO1FBQ2pELElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkQsSUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLGlCQUFVLENBQUMsQ0FBRSxFQUFiLENBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvRCwrREFBK0Q7UUFDL0QsSUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVU7WUFDL0IsQ0FBQyxDQUFDLHVCQUFnQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUU7WUFDdkQsQ0FBQyxDQUFDLGtCQUFXLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUFDO1FBRWpELElBQUksS0FBSyxHQUFHLFVBQUcsTUFBTSxtQ0FBeUIsSUFBSSxDQUFDLGNBQWMsY0FBSSxTQUFTLHNCQUFZLFdBQVcsQ0FBRSxDQUFDO1FBRXhHLDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixLQUFLLElBQUksdUJBQWdCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBRSxDQUFDO1FBQzdELENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFHeEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUc7WUFDdEIsSUFBSSxLQUFJLENBQUMsc0JBQXNCO2dCQUFFLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFDLEtBQW1CO1lBQzdDLElBQUksQ0FBQztnQkFDSCxJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFjLENBQUMsQ0FBQztnQkFFOUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxLQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ25ELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsSUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQXdCLENBQUM7d0JBQy9DLHlEQUF5RDt3QkFDekQsb0ZBQW9GO3dCQUNwRixJQUFNLGdCQUFnQixHQUFHLFFBQVE7NkJBQzlCLEdBQUcsQ0FBQyxVQUFDLEdBQUc7NEJBQ1AsSUFBTSxRQUFRLEdBQUcsS0FBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUNuRCwyREFBMkQ7NEJBQzNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFLLEdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQ0FDNUMsUUFBUSxDQUFDLFVBQVUsR0FBSSxHQUFXLENBQUMsRUFBRSxDQUFDOzRCQUN4QyxDQUFDOzRCQUNELE9BQU8sUUFBUSxDQUFDO3dCQUNsQixDQUFDLENBQUM7NkJBQ0QsTUFBTSxDQUFDLFVBQUMsR0FBRyxJQUFLLE9BQUEsR0FBRyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQTFCLENBQTBCLENBQUMsQ0FBQzt3QkFDL0MsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEtBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDaEQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQU0sZUFBZSxHQUFHLEtBQUksQ0FBQyx1QkFBdUIsQ0FDbEQsSUFBSSxDQUFDLE9BQXNCLENBQzVCLENBQUM7d0JBQ0YsMkRBQTJEO3dCQUMzRCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsSUFBSyxJQUFJLENBQUMsT0FBZSxDQUFDLEVBQUUsRUFBRSxDQUFDOzRCQUM1RCxlQUFlLENBQUMsVUFBVSxHQUFJLElBQUksQ0FBQyxPQUFlLENBQUMsRUFBRSxDQUFDO3dCQUN4RCxDQUFDO3dCQUNELElBQUksZUFBZSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQzs0QkFDM0MsS0FBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDdkMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7cUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUNwQyx3QkFBd0I7b0JBQ3hCLG9EQUFvRDtvQkFDcEQsSUFBSSxLQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3hCLElBQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7d0JBQzlCLElBQU0sZUFBZSxHQUFnQjs0QkFDbkMsV0FBVyxFQUFFLEdBQUc7NEJBQ2hCLFVBQVUsRUFBRSxLQUFJLENBQUMsc0JBQXNCO2dDQUNyQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUksQ0FBQyxzQkFBc0I7Z0NBQ25DLENBQUMsQ0FBQyxDQUFDOzRCQUNMLFFBQVEsRUFBRSxLQUFJLENBQUMsc0JBQXNCO2dDQUNuQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJO2dDQUMxQyxDQUFDLENBQUMsSUFBSTs0QkFDUixPQUFPLEVBQUUsU0FBUzs0QkFDbEIsSUFBSSxFQUFFLHNCQUFzQjt5QkFDN0IsQ0FBQzt3QkFDRixLQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUN2QyxDQUFDO29CQUVELHdDQUF3QztvQkFDeEMsSUFBSSxLQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7d0JBQ3pCLEtBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDekIsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUUsQ0FBQztvQkFDcEMseUJBQXlCO29CQUN6QixxREFBcUQ7b0JBQ3JELElBQUksS0FBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN4QixJQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO3dCQUM5QixJQUFNLGdCQUFnQixHQUFnQjs0QkFDcEMsV0FBVyxFQUFFLEdBQUc7NEJBQ2hCLFVBQVUsRUFBRSxLQUFJLENBQUMsc0JBQXNCO2dDQUNyQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUksQ0FBQyxzQkFBc0I7Z0NBQ25DLENBQUMsQ0FBQyxDQUFDOzRCQUNMLFFBQVEsRUFBRSxLQUFJLENBQUMsc0JBQXNCO2dDQUNuQyxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJO2dDQUMxQyxDQUFDLENBQUMsSUFBSTs0QkFDUixPQUFPLEVBQUUsU0FBUzs0QkFDbEIsSUFBSSxFQUFFLHdCQUF3Qjt5QkFDL0IsQ0FBQzt3QkFDRixLQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUM7b0JBQ3hDLENBQUM7b0JBRUQseUNBQXlDO29CQUN6QyxJQUFJLEtBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUMxQixLQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxLQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDeEIsS0FBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQzFCLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixTQUFTO1lBQ1gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQUMsS0FBWTtZQUNwQyxJQUFJLEtBQUksQ0FBQyxzQkFBc0I7Z0JBQzdCLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU5QyxpQkFBaUI7WUFDakIsSUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQW9CLFVBQVUsQ0FBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBQyxLQUFpQjtZQUN6QyxJQUFJLEtBQUksQ0FBQyxzQkFBc0I7Z0JBQzdCLEtBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUU5QyxpQkFBaUI7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEIsSUFBTSxVQUFVLEdBQUcseUJBQXlCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzRCxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUFvQixVQUFVLENBQUUsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsZ0NBQVUsR0FBVjtRQUNFLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFYSx1Q0FBaUIsR0FBL0IsVUFBZ0MsT0FBZTs7Ozs7Ozt3QkFFckIscUJBQU0sS0FBSyxDQUFDLEdBQUcsQ0FDbkMsVUFBRyxJQUFJLENBQUMsT0FBTywwQ0FBZ0MsT0FBTyxtQkFBZ0IsRUFDdEU7Z0NBQ0UsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0NBQzFCLFlBQVksRUFBRSxNQUFNOzZCQUNyQixDQUNGLEVBQUE7O3dCQU5LLGFBQWEsR0FBRyxTQU1yQjt3QkFDSyxPQUFPLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3hELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7d0JBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQzt3QkFDcEMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzs0QkFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDNUMsQ0FBQzs7Ozt3QkFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFHLENBQUMsRUFBRSxDQUFDOzRCQUNsQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzt3QkFDM0IsQ0FBQzs7Ozs7O0tBR0o7SUFFRCwrREFBK0Q7SUFDekQsaUNBQVcsR0FBakIsVUFDRSxTQUFpQixFQUNqQixRQUF3QixFQUN4QixnQkFBeUI7Ozs7Ozs7d0JBRXpCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDZixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7d0JBQ3pELENBQUM7Ozs7d0JBSU8sR0FBRyxHQUFHLFVBQUcsSUFBSSxDQUFDLE9BQU8scURBQTJDLFNBQVMsQ0FBRSxDQUFDO3dCQUU1RSxPQUFPLEdBR1Q7NEJBQ0YsUUFBUSxVQUFBO3lCQUNULENBQUM7d0JBRUYsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDOzRCQUNyQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7d0JBQzlDLENBQUM7d0JBRUQscUJBQU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFO2dDQUM5QixPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTs2QkFDM0IsQ0FBQyxFQUFBOzt3QkFGRixTQUVFLENBQUM7Ozs7d0JBR0gsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDcEMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7d0JBQzNCLENBQUM7d0JBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsRUFBRTs0QkFDekMsT0FBTyxFQUFFLE9BQUssQ0FBQyxPQUFPOzRCQUN0QixRQUFRLEVBQUUsTUFBQSxPQUFLLENBQUMsUUFBUSwwQ0FBRSxJQUFJOzRCQUM5QixNQUFNLEVBQUUsTUFBQSxPQUFLLENBQUMsUUFBUSwwQ0FBRSxNQUFNO3lCQUMvQixDQUFDLENBQUM7d0JBQ0gsTUFBTSxPQUFLLENBQUM7Ozs7O0tBRWY7SUFFRCw0RUFBNEU7SUFDcEUsNkNBQXVCLEdBQS9CLFVBQWdDLE9BQW9CO1FBQ2xELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNqQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBRUQsNkJBQ0ssT0FBTyxLQUNWLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFDNUQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixJQUN4RDtJQUNKLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUE3ekJELElBNnpCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIENoYXRNZXNzYWdlLFxuICBTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlLFxuICBBdHRhY2htZW50LFxuICBBZ2VudFRoaW5raW5nQ29uZmlnLFxuICBBZ2VudFdlbGNvbWVEYXRhLFxuICBGaWxlVXBsb2FkUmVzcG9uc2UsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlV2ViU29ja2V0LFxuICBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljLFxufSBmcm9tIFwiLi4vdXRpbHMvd2Vic29ja2V0XCI7XG5cbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICBwcml2YXRlIGFwaUtleTogc3RyaW5nO1xuICBwcml2YXRlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25DcmVhdGVUaW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgY29udmVyc2F0aW9uIHN0YXJ0IHRpbWVcbiAgcHJpdmF0ZSBndWVzdFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gR3Vlc3QgdG9rZW4gZm9yIGF1dGhvcml6YXRpb25cbiAgcHJpdmF0ZSBpc0ZpbmFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHdlYlNvY2tldDogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVzc2FnZUhhbmRsZXI6ICgobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFrZW92ZXJIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaW5hbGl6ZWRIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uU3RhdGVIYW5kbGVyOlxuICAgIHwgKChzdGF0ZTogXCJjb25uZWN0aW5nXCIgfCBcImNvbm5lY3RlZFwiIHwgXCJkaXNjb25uZWN0ZWRcIikgPT4gdm9pZClcbiAgICB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhSGFuZGxlcjogKChkYXRhOiBBZ2VudFdlbGNvbWVEYXRhKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0b3JhZ2VLZXlCYXNlID0gXCJnZW5hc3Npc3RfY29udmVyc2F0aW9uXCI7XG4gIHByaXZhdGUgcG9zc2libGVRdWVyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhOiBBZ2VudFdlbGNvbWVEYXRhID0ge307XG4gIHByaXZhdGUgdGhpbmtpbmdDb25maWc6IEFnZW50VGhpbmtpbmdDb25maWcgPSB7IHBocmFzZXM6IFtdLCBkZWxheU1zOiAxMDAwIH07XG4gIHByaXZhdGUgd2VsY29tZU9iamVjdFVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIHRvIHJldm9rZSBvbiByZXNldFxuICBwcml2YXRlIHRlbmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZVdzOiBib29sZWFuO1xuICBwcml2YXRlIHNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFzZVVybDogc3RyaW5nLFxuICAgIGFwaUtleTogc3RyaW5nLFxuICAgIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICB0ZW5hbnQ/OiBzdHJpbmcsXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmcsXG4gICAgdXNlV3M6IGJvb2xlYW4gPSB0cnVlXG4gICkge1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsO1xuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLnRlbmFudCA9IHRlbmFudDtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gICAgdGhpcy51c2VXcyA9IHVzZVdzO1xuICAgIC8vIFRyeSB0byBsb2FkIGEgc2F2ZWQgY29udmVyc2F0aW9uIGZvciB0aGlzIGFwaUtleSBmcm9tIGxvY2FsU3RvcmFnZVxuICAgIHRoaXMubG9hZFNhdmVkQ29udmVyc2F0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFN0b3JhZ2VLZXkoKTogc3RyaW5nIHtcbiAgICAvLyBQb2ludGVyIHRvIGN1cnJlbnQgY29udmVyc2F0aW9uIG1ldGFkYXRhIGZvciB0aGlzIGFwaUtleVxuICAgIHJldHVybiBgJHt0aGlzLnN0b3JhZ2VLZXlCYXNlfToke3RoaXMuYXBpS2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBsYW5ndWFnZSBmb3IgQWNjZXB0LUxhbmd1YWdlIGhlYWRlclxuICAgKi9cbiAgc2V0TGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWV0YWRhdGEgKHVzZWZ1bCBmb3IgdXBkYXRpbmcgbGFuZ3VhZ2Ugb3Igb3RoZXIgZHluYW1pYyBtZXRhZGF0YSlcbiAgICovXG4gIHNldE1ldGFkYXRhKG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBsYW5ndWFnZSBjb2RlIGZvciBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyXG4gICAqIENvbnZlcnRzIHNpbXBsZSBsYW5ndWFnZSBjb2RlcyAoZS5nLiwgXCJlblwiLCBcImVzXCIpIHRvIHByb3BlciBmb3JtYXQgKGUuZy4sIFwiZW4tVVMsZW47cT0wLjlcIilcbiAgICogRm9sbG93cyBIVFRQIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgc3RhbmRhcmRzXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEFjY2VwdExhbmd1YWdlKGxhbmdDb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbGFuZ0NvZGUpIHJldHVybiAnJztcbiAgICBcbiAgICAvLyBOb3JtYWxpemUgbGFuZ3VhZ2UgY29kZSAobG93ZXJjYXNlLCBoYW5kbGUgY29tbW9uIGZvcm1hdHMpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmdDb2RlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIFxuICAgIC8vIE1hcCBjb21tb24gbGFuZ3VhZ2UgY29kZXMgdG8gdGhlaXIgZnVsbCBsb2NhbGUgZm9ybWF0XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAnZW4nOiAnZW4tVVMnLFxuICAgICAgJ2VzJzogJ2VzLUVTJyxcbiAgICAgICdmcic6ICdmci1GUicsXG4gICAgICAnZGUnOiAnZGUtREUnLFxuICAgICAgJ2l0JzogJ2l0LUlUJyxcbiAgICAgICdwdCc6ICdwdC1QVCcsXG4gICAgICAnYXInOiAnYXItU0EnLFxuICAgICAgJ3NxJzogJ3NxLUFMJyxcbiAgICB9O1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHRoZSBjb2RlIGFscmVhZHkgaGFzIGEgcmVnaW9uIChlLmcuLCBcImVuLVVTXCIsIFwiZXMtRVNcIilcbiAgICBjb25zdCBoYXNSZWdpb24gPSBub3JtYWxpemVkLmluY2x1ZGVzKCctJyk7XG4gICAgXG4gICAgLy8gR2V0IHRoZSBmdWxsIGxvY2FsZSBvciB1c2UgdGhlIHByb3ZpZGVkIGNvZGUgaWYgaXQgYWxyZWFkeSBoYXMgYSByZWdpb25cbiAgICBjb25zdCBmdWxsTG9jYWxlID0gaGFzUmVnaW9uID8gbm9ybWFsaXplZCA6IChsYW5ndWFnZU1hcFtub3JtYWxpemVkXSB8fCBub3JtYWxpemVkKTtcbiAgICBcbiAgICAvLyBFeHRyYWN0IGJhc2UgbGFuZ3VhZ2UgZnJvbSB0aGUgZnVsbCBsb2NhbGUgKGUuZy4sIFwiZW5cIiBmcm9tIFwiZW4tVVNcIilcbiAgICBjb25zdCBmdWxsQmFzZUxhbmcgPSBmdWxsTG9jYWxlLnNwbGl0KCctJylbMF0udG9Mb3dlckNhc2UoKTtcbiAgICBcbiAgICAvLyBCdWlsZCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyOiBwcmltYXJ5IGxvY2FsZSwgYmFzZSBsYW5ndWFnZSB3aXRoIHF1YWxpdHksIEVuZ2xpc2ggZmFsbGJhY2tcbiAgICAvLyBGb3JtYXQ6IFwibG9jYWxlLGJhc2UtbGFuZztxPTAuOSxlbjtxPTAuOFwiXG4gICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW2Z1bGxMb2NhbGVdO1xuICAgIFxuICAgIC8vIGZhbGxiYWNrXG4gICAgcGFydHMucHVzaChgJHtmdWxsQmFzZUxhbmd9O3E9MC45YCk7XG4gICAgXG4gICAgLy8gQWRkIEVuZ2xpc2ggYXMgZmFsbGJhY2sgaWYgbm90IGFscmVhZHkgdGhlIHByaW1hcnkgbGFuZ3VhZ2VcbiAgICBpZiAoZnVsbEJhc2VMYW5nICE9PSAnZW4nKSB7XG4gICAgICBwYXJ0cy5wdXNoKCdlbjtxPTAuOCcpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcGFydHMuam9pbignLCAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaGVhZGVycyBmb3IgQVBJIHJlcXVlc3RzLCBpbmNsdWRpbmcgYXV0aG9yaXphdGlvbiBpZiBndWVzdCB0b2tlbiBpcyBhdmFpbGFibGVcbiAgICovXG4gIHByaXZhdGUgZ2V0SGVhZGVycyhjb250ZW50VHlwZTogc3RyaW5nID0gXCJhcHBsaWNhdGlvbi9qc29uXCIpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgXCJ4LWFwaS1rZXlcIjogdGhpcy5hcGlLZXksXG4gICAgICBcIkNvbnRlbnQtVHlwZVwiOiBjb250ZW50VHlwZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIHRlbmFudCBoZWFkZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIGhlYWRlcnNbXCJ4LXRlbmFudC1pZFwiXSA9IHRoaXMudGVuYW50O1xuICAgIH1cblxuICAgIC8vIEFkZCBhdXRob3JpemF0aW9uIGhlYWRlciBpZiBndWVzdCB0b2tlbiBpcyBhdmFpbGFibGVcbiAgICBpZiAodGhpcy5ndWVzdFRva2VuKSB7XG4gICAgICBoZWFkZXJzW1wiQXV0aG9yaXphdGlvblwiXSA9IGBCZWFyZXIgJHt0aGlzLmd1ZXN0VG9rZW59YDtcbiAgICB9XG5cbiAgICAvLyBBZGQgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciBpZiBsYW5ndWFnZSBpcyBzZXRcbiAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgY29uc3QgYWNjZXB0TGFuZ3VhZ2UgPSB0aGlzLmZvcm1hdEFjY2VwdExhbmd1YWdlKHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgaWYgKGFjY2VwdExhbmd1YWdlKSB7XG4gICAgICAgIGhlYWRlcnNbXCJBY2NlcHQtTGFuZ3VhZ2VcIl0gPSBhY2NlcHRMYW5ndWFnZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHNldE1lc3NhZ2VIYW5kbGVyKGhhbmRsZXI6IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZCkge1xuICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0VGFrZW92ZXJIYW5kbGVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnRha2VvdmVySGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRGaW5hbGl6ZWRIYW5kbGVyKGhhbmRsZXI6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLmZpbmFsaXplZEhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0Q29ubmVjdGlvblN0YXRlSGFuZGxlcihcbiAgICBoYW5kbGVyOiAoc3RhdGU6IFwiY29ubmVjdGluZ1wiIHwgXCJjb25uZWN0ZWRcIiB8IFwiZGlzY29ubmVjdGVkXCIpID0+IHZvaWRcbiAgKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFdlbGNvbWVEYXRhSGFuZGxlcihoYW5kbGVyOiAoKGRhdGE6IEFnZW50V2VsY29tZURhdGEpID0+IHZvaWQpIHwgbnVsbCkge1xuICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFNlcnZlclVuYXZhaWxhYmxlQ29uZmlnKFxuICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgY29udGFjdFVybD86IHN0cmluZyxcbiAgICBjb250YWN0TGFiZWw/OiBzdHJpbmdcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsID0gY29udGFjdFVybDtcbiAgICB0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsID0gY29udGFjdExhYmVsO1xuICB9XG5cbiAgZ2V0UG9zc2libGVRdWVyaWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wb3NzaWJsZVF1ZXJpZXM7XG4gIH1cblxuICBnZXRXZWxjb21lRGF0YSgpOiBBZ2VudFdlbGNvbWVEYXRhIHtcbiAgICByZXR1cm4gdGhpcy53ZWxjb21lRGF0YTtcbiAgfVxuXG4gIGdldFRoaW5raW5nQ29uZmlnKCk6IEFnZW50VGhpbmtpbmdDb25maWcge1xuICAgIHJldHVybiB0aGlzLnRoaW5raW5nQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gSUQgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgbG9hZFNhdmVkQ29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2F2ZWRDb252ZXJzYXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgICAvLyBCYWNrd2FyZC1jb21wYXQ6IGNoZWNrIG9sZCB1bnNjb3BlZCBrZXkgaWYgc2NvcGVkIG9uZSBtaXNzaW5nXG4gICAgICBpZiAoIXNhdmVkQ29udmVyc2F0aW9uKSB7XG4gICAgICAgIHNhdmVkQ29udmVyc2F0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5QmFzZSk7XG4gICAgICB9XG4gICAgICBpZiAoc2F2ZWRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWUsXG4gICAgICAgICAgaXNGaW5hbGl6ZWQsXG4gICAgICAgICAgcG9zc2libGVRdWVyaWVzLFxuICAgICAgICAgIHdlbGNvbWVEYXRhLFxuICAgICAgICAgIHRoaW5raW5nQ29uZmlnLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgZ3Vlc3RUb2tlbixcbiAgICAgICAgfSA9IEpTT04ucGFyc2Uoc2F2ZWRDb252ZXJzYXRpb24pO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IGNyZWF0ZVRpbWU7XG4gICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBpc0ZpbmFsaXplZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5ndWVzdFRva2VuID0gZ3Vlc3RUb2tlbiB8fCBudWxsO1xuICAgICAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IEFycmF5LmlzQXJyYXkocG9zc2libGVRdWVyaWVzKVxuICAgICAgICAgID8gcG9zc2libGVRdWVyaWVzXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YSA9IHdlbGNvbWVEYXRhIHx8IHt9O1xuICAgICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEucG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5wb3NzaWJsZVF1ZXJpZXMgPSB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0ge1xuICAgICAgICAgIHBocmFzZXM6ICh0aGlua2luZ0NvbmZpZyAmJiB0aGlua2luZ0NvbmZpZy5waHJhc2VzKSB8fCBbXSxcbiAgICAgICAgICBkZWxheU1zOlxuICAgICAgICAgICAgdGhpbmtpbmdDb25maWcgJiYgdHlwZW9mIHRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgPyB0aGlua2luZ0NvbmZpZy5kZWxheU1zXG4gICAgICAgICAgICAgIDogMTAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZ2VudElkID0gYWdlbnRJZDtcbiAgICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIHRoaXMuYWdlbnRJZCkge1xuICAgICAgICAgIHRoaXMuZmV0Y2hXZWxjb21lSW1hZ2UodGhpcy5hZ2VudElkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlcih0aGlzLndlbGNvbWVEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSUQgdG8gbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIHNhdmVDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbklkICYmIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb25EYXRhID0ge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZDogdGhpcy5pc0ZpbmFsaXplZCxcbiAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM6IHRoaXMucG9zc2libGVRdWVyaWVzLFxuICAgICAgICAgIHdlbGNvbWVEYXRhOiB7XG4gICAgICAgICAgICAuLi50aGlzLndlbGNvbWVEYXRhLFxuICAgICAgICAgICAgaW1hZ2VVcmw6XG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCAmJlxuICAgICAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmXG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwuc3RhcnRzV2l0aChcImJsb2I6XCIpXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsIHx8IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlua2luZ0NvbmZpZzogdGhpcy50aGlua2luZ0NvbmZpZyxcbiAgICAgICAgICBhZ2VudElkOiB0aGlzLmFnZW50SWQsXG4gICAgICAgICAgZ3Vlc3RUb2tlbjogdGhpcy5ndWVzdFRva2VuLFxuICAgICAgICB9O1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSwgSlNPTi5zdHJpbmdpZnkoY29udmVyc2F0aW9uRGF0YSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvLyBDaGVjayBpZiBhbiBlcnJvciBpcyBhIHRva2VuIGV4cGlyYXRpb24gZXJyb3JcbiAgcHJpdmF0ZSBpc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3IucmVzcG9uc2UgJiZcbiAgICAgIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmXG4gICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAoZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvciA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhLm1lc3NhZ2UgPT09IFwiVG9rZW4gaGFzIGV4cGlyZWQuXCIgfHxcbiAgICAgICAgKHR5cGVvZiBlcnJvci5yZXNwb25zZS5kYXRhID09PSBcInN0cmluZ1wiICYmIGVycm9yLnJlc3BvbnNlLmRhdGEuaW5jbHVkZXMoXCJUb2tlbiBoYXMgZXhwaXJlZFwiKSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gYnkgY2xlYXJpbmcgdGhlIElEIGFuZCB3ZWJzb2NrZXRcbiAgICovXG4gIHJlc2V0Q29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IHdlYnNvY2tldCBjb25uZWN0aW9uIGlmIGl0IGV4aXN0c1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhciB0aGUgY29udmVyc2F0aW9uIElEXG4gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG51bGw7XG4gICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gbnVsbDtcbiAgICB0aGlzLmd1ZXN0VG9rZW4gPSBudWxsO1xuICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIENsZWFyIHBvc3NpYmxlIHF1ZXJpZXNcbiAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IFtdO1xuICAgIHRoaXMud2VsY29tZURhdGEgPSB7fTtcbiAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0geyBwaHJhc2VzOiBbXSwgZGVsYXlNczogMTAwMCB9O1xuICAgIGlmICh0aGlzLndlbGNvbWVPYmplY3RVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy53ZWxjb21lT2JqZWN0VXJsKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuYWdlbnRJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlcmUncyBhIGN1cnJlbnQgY29udmVyc2F0aW9uXG4gICAqL1xuICBoYXNBY3RpdmVDb252ZXJzYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb252ZXJzYXRpb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIElEXG4gICAqL1xuICBnZXRDb252ZXJzYXRpb25JZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb25JZDtcbiAgfVxuXG4gIGdldENvbnZlcnNhdGlvbkNyZWF0ZVRpbWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZTtcbiAgfVxuXG4gIGlzQ29udmVyc2F0aW9uRmluYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRmluYWxpemVkO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIG1lc3NhZ2VzOiBbXSxcbiAgICAgICAgcmVjb3JkZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZGF0YV9zb3VyY2VfaWQ6IFwiMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwXCIsXG4gICAgICAgIHJlY2FwdGNoYV90b2tlbjogcmVDYXB0Y2hhVG9rZW4sXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRhZGF0YSkge1xuICAgICAgICByZXF1ZXN0Qm9keS5tZXRhZGF0YSA9IHRoaXMubWV0YWRhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlPihcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy9zdGFydGAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSByZXNwb25zZS5kYXRhLmNvbnZlcnNhdGlvbl9pZDtcbiAgICAgIC8vIFN0b3JlIGNvbnZlcnNhdGlvbiBjcmVhdGUgdGltZSAodXNlIGZyb20gcmVzcG9uc2UgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY3VycmVudCB0aW1lKVxuICAgICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gcmVzcG9uc2UuZGF0YS5jcmVhdGVfdGltZVxuICAgICAgICA/IHJlc3BvbnNlLmRhdGEuY3JlYXRlX3RpbWUgLyAxMDAwXG4gICAgICAgIDogRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAvLyBTdG9yZSBndWVzdCB0b2tlbiBpZiBwcm92aWRlZFxuICAgICAgdGhpcy5ndWVzdFRva2VuID0gcmVzcG9uc2UuZGF0YS5ndWVzdF90b2tlbiB8fCBudWxsO1xuICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyBTdG9yZSBwb3NzaWJsZSBxdWVyaWVzIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXMgJiZcbiAgICAgICAgcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcy5maWx0ZXIoXG4gICAgICAgICAgKHF1ZXJ5KSA9PiB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgcXVlcnkudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYW55RGF0YTogYW55ID0gcmVzcG9uc2UuZGF0YSBhcyBhbnk7XG4gICAgICBjb25zdCBhZ2VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhbnlEYXRhLmFnZW50X2lkO1xuICAgICAgdGhpcy5hZ2VudElkID0gYWdlbnRJZDtcbiAgICAgIGNvbnN0IHdlbGNvbWVUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF93ZWxjb21lX3RpdGxlO1xuICAgICAgY29uc3Qgd2VsY29tZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3dlbGNvbWVfaW1hZ2VfdXJsO1xuICAgICAgY29uc3QgdGhpbmtpbmdQaHJhc2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlcztcbiAgICAgIGNvbnN0IHRoaW5raW5nRGVsYXlTZWM6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlX2RlbGF5O1xuXG4gICAgICB0aGlzLndlbGNvbWVEYXRhID0ge1xuICAgICAgICB0aXRsZTogd2VsY29tZVRpdGxlIHx8IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgIGltYWdlVXJsOiB3ZWxjb21lSW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgcG9zc2libGVRdWVyaWVzOiB0aGlzLnBvc3NpYmxlUXVlcmllcyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaW5raW5nUGhyYXNlcykgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50aGlua2luZ0NvbmZpZy5waHJhc2VzID0gdGhpbmtpbmdQaHJhc2VzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlua2luZ0RlbGF5U2VjID09PSBcIm51bWJlclwiICYmIHRoaW5raW5nRGVsYXlTZWMgPj0gMCkge1xuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPSBNYXRoLm1heChcbiAgICAgICAgICAyNTAsXG4gICAgICAgICAgTWF0aC5yb3VuZCh0aGlua2luZ0RlbGF5U2VjICogMTAwMClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIGFnZW50SWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFdlbGNvbWVJbWFnZShhZ2VudElkKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyBhZ2VudCB3ZWxjb21lIG1lc3NhZ2UgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgICAgY29uc3Qgd2VsY29tZU1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgc3RhcnRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgc3BlYWtlcjogXCJhZ2VudFwiLFxuICAgICAgICAgIHRleHQ6IHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhLm1lc3NhZ2UgPSByZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcih3ZWxjb21lTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLndlbGNvbWVEYXRhSGFuZGxlcikge1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlcih0aGlzLndlbGNvbWVEYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy51c2VXcykge1xuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNvbnZlcnNhdGlvbl9pZDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZW5kTWVzc2FnZShcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50W10sXG4gICAgZXh0cmFNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcmVDYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkIHx8ICF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICBjb25zdCBjaGF0TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgc3RhcnRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgIHNwZWFrZXI6IFwiY3VzdG9tZXJcIixcbiAgICAgIHRleHQ6IG1lc3NhZ2UsXG4gICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGNoYXRNZXNzYWdlKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgICAgbWVzc2FnZXM6IFtjaGF0TWVzc2FnZV0sXG4gICAgICAgIHJlY29yZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9O1xuXG4gICAgICBpZiAocmVDYXB0Y2hhVG9rZW4pIHtcbiAgICAgICAgcmVxdWVzdEJvZHkucmVjYXB0Y2hhX3Rva2VuID0gcmVDYXB0Y2hhVG9rZW47XG4gICAgICB9XG5cbiAgICAgIC8vIEluY2x1ZGUgbWV0YWRhdGFcbiAgICAgIGNvbnN0IG1lcmdlZE1ldGFkYXRhID0ge1xuICAgICAgICAuLi4odGhpcy5tZXRhZGF0YSB8fCB7fSksXG4gICAgICAgIC4uLihleHRyYU1ldGFkYXRhIHx8IHt9KSxcbiAgICAgIH07XG4gICAgICBpZiAoT2JqZWN0LmtleXMobWVyZ2VkTWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSBtZXJnZWRNZXRhZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wYXRjaChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy91cGRhdGUvJHt0aGlzLmNvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIC8vIElmIG5vdCB1c2luZyBXZWJTb2NrZXQsIHRyeSB0byByZXRyaWV2ZSB0aGUgcmVzcG9uc2UgbWVzc2FnZSBmcm9tIHRoZSB1cGRhdGUgY29udmVyc2F0aW9uIHJlc3BvbnNlXG4gICAgICBpZiAoIXRoaXMudXNlV3MgJiYgdGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlLmRhdGEgYXMgYW55O1xuICAgICAgICAgIFxuICAgICAgICAgIGlmIChyZXNwb25zZURhdGEubWVzc2FnZXMgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZURhdGEubWVzc2FnZXMpKSB7XG4gICAgICAgICAgICAvLyBMb29rIGZvciB0aGUgbGF0ZXN0IGFnZW50IG1lc3NhZ2UgaW4gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcmVzcG9uc2VEYXRhLm1lc3NhZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VEYXRhID0gcmVzcG9uc2VEYXRhLm1lc3NhZ2VzW2ldO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLnNwZWFrZXIgPT09IFwiYWdlbnRcIiAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLnRleHQgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5jcmVhdGVfdGltZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEuc3RhcnRfdGltZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEuZW5kX3RpbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZ2VudE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG1lc3NhZ2VEYXRhLmNyZWF0ZV90aW1lLFxuICAgICAgICAgICAgICAgICAgc3RhcnRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgICAgID8gbWVzc2FnZURhdGEuc3RhcnRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA6IG1lc3NhZ2VEYXRhLnN0YXJ0X3RpbWUsXG4gICAgICAgICAgICAgICAgICBlbmRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgICAgID8gbWVzc2FnZURhdGEuZW5kX3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBtZXNzYWdlRGF0YS5lbmRfdGltZSxcbiAgICAgICAgICAgICAgICAgIHNwZWFrZXI6IFwiYWdlbnRcIixcbiAgICAgICAgICAgICAgICAgIHRleHQ6IG1lc3NhZ2VEYXRhLnRleHQsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlX2lkOiBtZXNzYWdlRGF0YS5tZXNzYWdlX2lkIHx8IG1lc3NhZ2VEYXRhLmlkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gT25seSBwcm9jZXNzIGlmIHRoaXMgaXMgYSBuZXcgbWVzc2FnZSB3ZSBoYXZlbid0IHNlZW4gYmVmb3JlXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZWFzaWx5IGNoZWNrIGhlcmUsIHNvIHdlJ2xsIGxldCB0aGUgaGFuZGxlciBtYW5hZ2UgZHVwbGljYXRlc1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoYWdlbnRNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgdXBkYXRlIGNvbnZlcnNhdGlvbiByZXNwb25zZTpcIiwgcGFyc2VFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgdG9rZW4gZXhwaXJhdGlvbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENvbnZlcnNhdGlvbigpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgYWdlbnQgaW5hY3RpdmUgZXJyb3JcbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3IucmVzcG9uc2UgJiZcbiAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yX2tleSA9PT0gXCJBR0VOVF9JTkFDVElWRVwiXG4gICAgICApIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIG1lc3NhZ2UgZm9yIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgc3RhcnRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsXG4gICAgICAgICAgICBzcGVha2VyOiBcInNwZWNpYWxcIixcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlID8/IFwiVGhlIGFnZW50IGlzIGN1cnJlbnRseSBvZmZsaW5lLCBwbGVhc2UgY2hlY2sgYmFjayBsYXRlci4gVGhhbmsgeW91IVwiLFxuICAgICAgICAgICAgLi4uKHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsICYmIHtcbiAgICAgICAgICAgICAgbGlua1VybDogdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwsXG4gICAgICAgICAgICAgIGxpbmtMYWJlbDogdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RMYWJlbCA/PyBcIkNvbnRhY3Qgc3VwcG9ydFwiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgdGhlIGVycm9yIHNpbmNlIHdlIGhhbmRsZWQgaXQgd2l0aCBhIG1lc3NhZ2VcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKGNoYXRJZDogc3RyaW5nLCBmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlVXBsb2FkUmVzcG9uc2UgfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJjaGF0X2lkXCIsIGNoYXRJZCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8RmlsZVVwbG9hZFJlc3BvbnNlPihcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZ2VuYWdlbnQva25vd2xlZGdlL3VwbG9hZC1jaGF0LWZpbGVgLFxuICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyhcIm11bHRpcGFydC9mb3JtLWRhdGFcIiksXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhIGFzIEZpbGVVcGxvYWRSZXNwb25zZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0V2ViU29ja2V0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VXcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBJRCBpcyByZXF1aXJlZCBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGluZ1wiKTtcbiAgICBcbiAgICAvLyBCdWlsZCBXZWJTb2NrZXQgVVJMIHdpdGggcHJvcGVyIGF1dGhlbnRpY2F0aW9uXG4gICAgY29uc3Qgd3NCYXNlID0gdGhpcy5iYXNlVXJsLnJlcGxhY2UoXCJodHRwXCIsIFwid3NcIik7XG4gICAgY29uc3QgdG9waWNzID0gW1wibWVzc2FnZVwiLCBcInRha2VvdmVyXCIsIFwiZmluYWxpemVcIl07XG4gICAgY29uc3QgdG9waWNzUXVlcnkgPSB0b3BpY3MubWFwKCh0KSA9PiBgdG9waWNzPSR7dH1gKS5qb2luKFwiJlwiKTtcbiAgICBcbiAgICAvLyBVc2UgZ3Vlc3RfdG9rZW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFwaV9rZXlcbiAgICBjb25zdCBhdXRoUGFyYW0gPSB0aGlzLmd1ZXN0VG9rZW4gXG4gICAgICA/IGBhY2Nlc3NfdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ndWVzdFRva2VuKX1gXG4gICAgICA6IGBhcGlfa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYXBpS2V5KX1gO1xuICAgIFxuICAgIGxldCB3c1VybCA9IGAke3dzQmFzZX0vYXBpL2NvbnZlcnNhdGlvbnMvd3MvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT8ke2F1dGhQYXJhbX0mbGFuZz1lbiYke3RvcGljc1F1ZXJ5fWA7XG4gICAgXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmeC10ZW5hbnQtaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBuYXRpdmUgYnJvd3NlciBXZWJTb2NrZXQgZmFjdG9yeVxuICAgIHRoaXMud2ViU29ja2V0ID0gY3JlYXRlV2ViU29ja2V0KHdzVXJsKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnBheWxvYWQpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGEucGF5bG9hZCBhcyBDaGF0TWVzc2FnZVtdO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRpbWVzdGFtcHMgdG8gYmUgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBtZXNzYWdlX2lkIGZpZWxkIChiYWNrZW5kIG1pZ2h0IHNlbmQgJ2lkJyBpbnN0ZWFkIG9mICdtZXNzYWdlX2lkJylcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlc1xuICAgICAgICAgICAgICAubWFwKChtc2cpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RlZCA9IHRoaXMuYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemU6IGlmIGJhY2tlbmQgc2VuZHMgJ2lkJywgdXNlIGl0IGFzICdtZXNzYWdlX2lkJ1xuICAgICAgICAgICAgICAgIGlmICghYWRqdXN0ZWQubWVzc2FnZV9pZCAmJiAobXNnIGFzIGFueSkuaWQpIHtcbiAgICAgICAgICAgICAgICAgIGFkanVzdGVkLm1lc3NhZ2VfaWQgPSAobXNnIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcigobXNnKSA9PiBtc2cuc3BlYWtlciAhPT0gXCJjdXN0b21lclwiKTtcbiAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZXMuZm9yRWFjaCh0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlID0gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhcbiAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkIGFzIENoYXRNZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXplOiBpZiBiYWNrZW5kIHNlbmRzICdpZCcsIHVzZSBpdCBhcyAnbWVzc2FnZV9pZCdcbiAgICAgICAgICAgIGlmICghYWRqdXN0ZWRNZXNzYWdlLm1lc3NhZ2VfaWQgJiYgKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkKSB7XG4gICAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZS5tZXNzYWdlX2lkID0gKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkanVzdGVkTWVzc2FnZS5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihhZGp1c3RlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IFwidGFrZW92ZXJcIikge1xuICAgICAgICAgIC8vIEhhbmRsZSB0YWtlb3ZlciBldmVudFxuICAgICAgICAgIC8vIENyZWF0ZSBzcGVjaWFsIG1lc3NhZ2UgZm9yIHRoZSB0YWtlb3ZlciBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCB0YWtlb3Zlck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHRha2VvdmVyTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdGFrZW92ZXIgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcImZpbmFsaXplXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZmluYWxpemVkIGV2ZW50XG4gICAgICAgICAgLy8gQ3JlYXRlIHNwZWNpYWwgbWVzc2FnZSBmb3IgdGhlIGZpbmFsaXplZCBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCBmaW5hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgPyBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDFcbiAgICAgICAgICAgICAgICA6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIkNvbnZlcnNhdGlvbiBGaW5hbGl6ZWRcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGZpbmFsaXplZE1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGwgdGhlIGZpbmFsaXplZCBoYW5kbGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZWRIYW5kbGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2F2ZUNvbnZlcnNhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy53ZWJTb2NrZXQub25lcnJvciA9IChlcnJvcjogRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIpXG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcihcImRpc2Nvbm5lY3RlZFwiKTtcbiAgICAgIFxuICAgICAgLy8gTG9nIGRpYWdub3N0aWNcbiAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljKGVycm9yLCB3c1VybCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbR2VuQXNzaXN0IENoYXRdICR7ZGlhZ25vc3RpY31gKTtcbiAgICB9O1xuXG4gICAgdGhpcy53ZWJTb2NrZXQub25jbG9zZSA9IChldmVudDogQ2xvc2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcilcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiZGlzY29ubmVjdGVkXCIpO1xuICAgICAgXG4gICAgICAvLyBMb2cgZGlhZ25vc3RpY1xuICAgICAgaWYgKCFldmVudC53YXNDbGVhbikge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljID0gY3JlYXRlV2ViU29ja2V0RGlhZ25vc3RpYyhldmVudCwgd3NVcmwpO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtHZW5Bc3Npc3QgQ2hhdF0gJHtkaWFnbm9zdGljfWApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoV2VsY29tZUltYWdlKGFnZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZVJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9nZW5hZ2VudC9hZ2VudHMvY29uZmlncy8ke2FnZW50SWR9L3dlbGNvbWUtaW1hZ2VgLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlUmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBibG9iVXJsO1xuICAgICAgdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybCA9IGJsb2JVcmw7XG4gICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIodGhpcy53ZWxjb21lRGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgZmVlZGJhY2sgdG8gYSBzcGVjaWZpYyBhZ2VudCBtZXNzYWdlIGluIHRoZSBjb252ZXJzYXRpb25cbiAgYXN5bmMgYWRkRmVlZGJhY2soXG4gICAgbWVzc2FnZUlkOiBzdHJpbmcsXG4gICAgZmVlZGJhY2s6IFwiZ29vZFwiIHwgXCJiYWRcIixcbiAgICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIElEIGlzIHJlcXVpcmVkIGZvciBmZWVkYmFja1wiKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlIG1lc3NhZ2UgSUQgaW4gdGhlIFVSTCBwYXRoLCBub3QgY29udmVyc2F0aW9uIElEXG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL21lc3NhZ2UvYWRkLWZlZWRiYWNrLyR7bWVzc2FnZUlkfWA7XG4gICAgICAvLyBCb2R5IHNob3VsZCBvbmx5IGNvbnRhaW4gZmVlZGJhY2sgYW5kIGZlZWRiYWNrX21lc3NhZ2UgKG5vIG1lc3NhZ2VfaWQpXG4gICAgICBjb25zdCBwYXlsb2FkOiB7XG4gICAgICAgIGZlZWRiYWNrOiBcImdvb2RcIiB8IFwiYmFkXCI7XG4gICAgICAgIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9ID0ge1xuICAgICAgICBmZWVkYmFjayxcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGlmIChmZWVkYmFja19tZXNzYWdlKSB7XG4gICAgICAgIHBheWxvYWQuZmVlZGJhY2tfbWVzc2FnZSA9IGZlZWRiYWNrX21lc3NhZ2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGF3YWl0IGF4aW9zLnBhdGNoKHVybCwgcGF5bG9hZCwge1xuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENvbnZlcnNhdGlvbigpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcignRmVlZGJhY2sgQVBJIGNhbGwgZmFpbGVkOicsIHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2U6IGVycm9yLnJlc3BvbnNlPy5kYXRhLFxuICAgICAgICBzdGF0dXM6IGVycm9yLnJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gYWRqdXN0IG1lc3NhZ2UgdGltZXN0YW1wcyByZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgcHJpdmF0ZSBhZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IENoYXRNZXNzYWdlIHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICBzdGFydF90aW1lOiBtZXNzYWdlLnN0YXJ0X3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICBlbmRfdGltZTogbWVzc2FnZS5lbmRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
771
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFTMUIsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QjtJQTZCRSxxQkFDRSxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQThCLEVBQzlCLE1BQWUsRUFDZixRQUFpQixFQUNqQixLQUFxQjtRQUFyQixzQkFBQSxFQUFBLFlBQXFCO1FBL0JmLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQywyQkFBc0IsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQzlFLGVBQVUsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQ2xFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQTRDLElBQUksQ0FBQztRQUMvRCxvQkFBZSxHQUF3QixJQUFJLENBQUM7UUFDNUMscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQUM3QywyQkFBc0IsR0FFbkIsSUFBSSxDQUFDO1FBQ1IsdUJBQWtCLEdBQThDLElBQUksQ0FBQztRQUNyRSxtQkFBYyxHQUFHLHdCQUF3QixDQUFDO1FBQzFDLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUF3QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JFLHFCQUFnQixHQUFrQixJQUFJLENBQUMsQ0FBQyxxQkFBcUI7UUFpQm5FLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FB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RCxPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFOzRCQUN6QyxPQUFPLEVBQUUsT0FBSyxDQUFDLE9BQU87NEJBQ3RCLFFBQVEsRUFBRSxNQUFBLE9BQUssQ0FBQyxRQUFRLDBDQUFFLElBQUk7NEJBQzlCLE1BQU0sRUFBRSxNQUFBLE9BQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU07eUJBQy9CLENBQUMsQ0FBQzt3QkFDSCxNQUFNLE9BQUssQ0FBQzs7Ozs7S0FFZjtJQUVELDRFQUE0RTtJQUNwRSw2Q0FBdUIsR0FBL0IsVUFBZ0MsT0FBb0I7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCw2QkFDSyxPQUFPLEtBQ1YsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUM1RCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLElBQ3hEO0lBQ0osQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FBQyxBQWgwQkQsSUFnMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgQ2hhdE1lc3NhZ2UsXG4gIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2UsXG4gIEF0dGFjaG1lbnQsXG4gIEFnZW50VGhpbmtpbmdDb25maWcsXG4gIEFnZW50V2VsY29tZURhdGEsXG4gIEZpbGVVcGxvYWRSZXNwb25zZSxcbn0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBjcmVhdGVXZWJTb2NrZXQsXG4gIGNyZWF0ZVdlYlNvY2tldERpYWdub3N0aWMsXG59IGZyb20gXCIuLi91dGlscy93ZWJzb2NrZXRcIjtcblxuZXhwb3J0IGNsYXNzIENoYXRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBiYXNlVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpS2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY29udmVyc2F0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbnZlcnNhdGlvbkNyZWF0ZVRpbWU6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBUcmFjayBjb252ZXJzYXRpb24gc3RhcnQgdGltZVxuICBwcml2YXRlIGd1ZXN0VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBHdWVzdCB0b2tlbiBmb3IgYXV0aG9yaXphdGlvblxuICBwcml2YXRlIGlzRmluYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgd2ViU29ja2V0OiBXZWJTb2NrZXQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZXNzYWdlSGFuZGxlcjogKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0YWtlb3ZlckhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZpbmFsaXplZEhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbm5lY3Rpb25TdGF0ZUhhbmRsZXI6XG4gICAgfCAoKHN0YXRlOiBcImNvbm5lY3RpbmdcIiB8IFwiY29ubmVjdGVkXCIgfCBcImRpc2Nvbm5lY3RlZFwiKSA9PiB2b2lkKVxuICAgIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgd2VsY29tZURhdGFIYW5kbGVyOiAoKGRhdGE6IEFnZW50V2VsY29tZURhdGEpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RvcmFnZUtleUJhc2UgPSBcImdlbmFzc2lzdF9jb252ZXJzYXRpb25cIjtcbiAgcHJpdmF0ZSBwb3NzaWJsZVF1ZXJpZXM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgd2VsY29tZURhdGE6IEFnZW50V2VsY29tZURhdGEgPSB7fTtcbiAgcHJpdmF0ZSB0aGlua2luZ0NvbmZpZzogQWdlbnRUaGlua2luZ0NvbmZpZyA9IHsgcGhyYXNlczogW10sIGRlbGF5TXM6IDEwMDAgfTtcbiAgcHJpdmF0ZSB3ZWxjb21lT2JqZWN0VXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gdG8gcmV2b2tlIG9uIHJlc2V0XG4gIHByaXZhdGUgdGVuYW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgYWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlV3M6IGJvb2xlYW47XG4gIHByaXZhdGUgc2VydmVyVW5hdmFpbGFibGVNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VydmVyVW5hdmFpbGFibGVDb250YWN0VXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgYXBpS2V5OiBzdHJpbmcsXG4gICAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHRlbmFudD86IHN0cmluZyxcbiAgICBsYW5ndWFnZT86IHN0cmluZyxcbiAgICB1c2VXczogYm9vbGVhbiA9IHRydWVcbiAgKSB7XG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybC5lbmRzV2l0aChcIi9cIikgPyBiYXNlVXJsLnNsaWNlKDAsIC0xKSA6IGJhc2VVcmw7XG4gICAgdGhpcy5hcGlLZXkgPSBhcGlLZXk7XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgIHRoaXMudGVuYW50ID0gdGVuYW50O1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZTtcbiAgICB0aGlzLnVzZVdzID0gdXNlV3M7XG4gICAgLy8gVHJ5IHRvIGxvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gZm9yIHRoaXMgYXBpS2V5IGZyb20gbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkU2F2ZWRDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIC8vIFBvaW50ZXIgdG8gY3VycmVudCBjb252ZXJzYXRpb24gbWV0YWRhdGEgZm9yIHRoaXMgYXBpS2V5XG4gICAgcmV0dXJuIGAke3RoaXMuc3RvcmFnZUtleUJhc2V9OiR7dGhpcy5hcGlLZXl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxhbmd1YWdlIGZvciBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyXG4gICAqL1xuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZXRhZGF0YSAodXNlZnVsIGZvciB1cGRhdGluZyBsYW5ndWFnZSBvciBvdGhlciBkeW5hbWljIG1ldGFkYXRhKVxuICAgKi9cbiAgc2V0TWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGxhbmd1YWdlIGNvZGUgZm9yIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXJcbiAgICogQ29udmVydHMgc2ltcGxlIGxhbmd1YWdlIGNvZGVzIChlLmcuLCBcImVuXCIsIFwiZXNcIikgdG8gcHJvcGVyIGZvcm1hdCAoZS5nLiwgXCJlbi1VUyxlbjtxPTAuOVwiKVxuICAgKiBGb2xsb3dzIEhUVFAgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciBzdGFuZGFyZHNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QWNjZXB0TGFuZ3VhZ2UobGFuZ0NvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFsYW5nQ29kZSkgcmV0dXJuICcnO1xuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSBsYW5ndWFnZSBjb2RlIChsb3dlcmNhc2UsIGhhbmRsZSBjb21tb24gZm9ybWF0cylcbiAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ0NvZGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgXG4gICAgLy8gTWFwIGNvbW1vbiBsYW5ndWFnZSBjb2RlcyB0byB0aGVpciBmdWxsIGxvY2FsZSBmb3JtYXRcbiAgICBjb25zdCBsYW5ndWFnZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdlbic6ICdlbi1VUycsXG4gICAgICAnZXMnOiAnZXMtRVMnLFxuICAgICAgJ2ZyJzogJ2ZyLUZSJyxcbiAgICAgICdkZSc6ICdkZS1ERScsXG4gICAgICAnaXQnOiAnaXQtSVQnLFxuICAgICAgJ3B0JzogJ3B0LVBUJyxcbiAgICAgICdhcic6ICdhci1TQScsXG4gICAgICAnc3EnOiAnc3EtQUwnLFxuICAgIH07XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNvZGUgYWxyZWFkeSBoYXMgYSByZWdpb24gKGUuZy4sIFwiZW4tVVNcIiwgXCJlcy1FU1wiKVxuICAgIGNvbnN0IGhhc1JlZ2lvbiA9IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJy0nKTtcbiAgICBcbiAgICAvLyBHZXQgdGhlIGZ1bGwgbG9jYWxlIG9yIHVzZSB0aGUgcHJvdmlkZWQgY29kZSBpZiBpdCBhbHJlYWR5IGhhcyBhIHJlZ2lvblxuICAgIGNvbnN0IGZ1bGxMb2NhbGUgPSBoYXNSZWdpb24gPyBub3JtYWxpemVkIDogKGxhbmd1YWdlTWFwW25vcm1hbGl6ZWRdIHx8IG5vcm1hbGl6ZWQpO1xuICAgIFxuICAgIC8vIEV4dHJhY3QgYmFzZSBsYW5ndWFnZSBmcm9tIHRoZSBmdWxsIGxvY2FsZSAoZS5nLiwgXCJlblwiIGZyb20gXCJlbi1VU1wiKVxuICAgIGNvbnN0IGZ1bGxCYXNlTGFuZyA9IGZ1bGxMb2NhbGUuc3BsaXQoJy0nKVswXS50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIC8vIEJ1aWxkIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXI6IHByaW1hcnkgbG9jYWxlLCBiYXNlIGxhbmd1YWdlIHdpdGggcXVhbGl0eSwgRW5nbGlzaCBmYWxsYmFja1xuICAgIC8vIEZvcm1hdDogXCJsb2NhbGUsYmFzZS1sYW5nO3E9MC45LGVuO3E9MC44XCJcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbZnVsbExvY2FsZV07XG4gICAgXG4gICAgLy8gZmFsbGJhY2tcbiAgICBwYXJ0cy5wdXNoKGAke2Z1bGxCYXNlTGFuZ307cT0wLjlgKTtcbiAgICBcbiAgICAvLyBBZGQgRW5nbGlzaCBhcyBmYWxsYmFjayBpZiBub3QgYWxyZWFkeSB0aGUgcHJpbWFyeSBsYW5ndWFnZVxuICAgIGlmIChmdWxsQmFzZUxhbmcgIT09ICdlbicpIHtcbiAgICAgIHBhcnRzLnB1c2goJ2VuO3E9MC44Jyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoZWFkZXJzIGZvciBBUEkgcmVxdWVzdHMsIGluY2x1ZGluZyBhdXRob3JpemF0aW9uIGlmIGd1ZXN0IHRva2VuIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBcImFwcGxpY2F0aW9uL2pzb25cIik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLFxuICAgIH07XG5cbiAgICAvLyBBZGQgdGVuYW50IGhlYWRlciBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnRlbmFudCkge1xuICAgICAgaGVhZGVyc1tcIngtdGVuYW50LWlkXCJdID0gdGhpcy50ZW5hbnQ7XG4gICAgfVxuXG4gICAgLy8gQWRkIGF1dGhvcml6YXRpb24gaGVhZGVyIGlmIGd1ZXN0IHRva2VuIGlzIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmd1ZXN0VG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3RoaXMuZ3Vlc3RUb2tlbn1gO1xuICAgIH1cblxuICAgIC8vIEFkZCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIGlmIGxhbmd1YWdlIGlzIHNldFxuICAgIGlmICh0aGlzLmxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBhY2NlcHRMYW5ndWFnZSA9IHRoaXMuZm9ybWF0QWNjZXB0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSk7XG4gICAgICBpZiAoYWNjZXB0TGFuZ3VhZ2UpIHtcbiAgICAgICAgaGVhZGVyc1tcIkFjY2VwdC1MYW5ndWFnZVwiXSA9IGFjY2VwdExhbmd1YWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgc2V0TWVzc2FnZUhhbmRsZXIoaGFuZGxlcjogKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRUYWtlb3ZlckhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMudGFrZW92ZXJIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldEZpbmFsaXplZEhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuZmluYWxpemVkSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRDb25uZWN0aW9uU3RhdGVIYW5kbGVyKFxuICAgIGhhbmRsZXI6IChzdGF0ZTogXCJjb25uZWN0aW5nXCIgfCBcImNvbm5lY3RlZFwiIHwgXCJkaXNjb25uZWN0ZWRcIikgPT4gdm9pZFxuICApIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0V2VsY29tZURhdGFIYW5kbGVyKGhhbmRsZXI6ICgoZGF0YTogQWdlbnRXZWxjb21lRGF0YSkgPT4gdm9pZCkgfCBudWxsKSB7XG4gICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0U2VydmVyVW5hdmFpbGFibGVDb25maWcoXG4gICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICBjb250YWN0VXJsPzogc3RyaW5nLFxuICAgIGNvbnRhY3RMYWJlbD86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICB0aGlzLnNlcnZlclVuYXZhaWxhYmxlTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwgPSBjb250YWN0VXJsO1xuICAgIHRoaXMuc2VydmVyVW5hdmFpbGFibGVDb250YWN0TGFiZWwgPSBjb250YWN0TGFiZWw7XG4gIH1cblxuICBnZXRQb3NzaWJsZVF1ZXJpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgfVxuXG4gIGdldFdlbGNvbWVEYXRhKCk6IEFnZW50V2VsY29tZURhdGEge1xuICAgIHJldHVybiB0aGlzLndlbGNvbWVEYXRhO1xuICB9XG5cbiAgZ2V0VGhpbmtpbmdDb25maWcoKTogQWdlbnRUaGlua2luZ0NvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMudGhpbmtpbmdDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIHNhdmVkIGNvbnZlcnNhdGlvbiBJRCBmcm9tIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkU2F2ZWRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzYXZlZENvbnZlcnNhdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICAgIC8vIEJhY2t3YXJkLWNvbXBhdDogY2hlY2sgb2xkIHVuc2NvcGVkIGtleSBpZiBzY29wZWQgb25lIG1pc3NpbmdcbiAgICAgIGlmICghc2F2ZWRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgc2F2ZWRDb252ZXJzYXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlCYXNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYXZlZENvbnZlcnNhdGlvbikge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgY3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZCxcbiAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgICAgICAgd2VsY29tZURhdGEsXG4gICAgICAgICAgdGhpbmtpbmdDb25maWcsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBndWVzdFRva2VuLFxuICAgICAgICB9ID0gSlNPTi5wYXJzZShzYXZlZENvbnZlcnNhdGlvbik7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25JZDtcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gY3JlYXRlVGltZTtcbiAgICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGlzRmluYWxpemVkIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmd1ZXN0VG9rZW4gPSBndWVzdFRva2VuIHx8IG51bGw7XG4gICAgICAgIHRoaXMucG9zc2libGVRdWVyaWVzID0gQXJyYXkuaXNBcnJheShwb3NzaWJsZVF1ZXJpZXMpXG4gICAgICAgICAgPyBwb3NzaWJsZVF1ZXJpZXNcbiAgICAgICAgICA6IFtdO1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhID0gd2VsY29tZURhdGEgfHwge307XG4gICAgICAgIGlmICghdGhpcy53ZWxjb21lRGF0YS5wb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhLnBvc3NpYmxlUXVlcmllcyA9IHRoaXMucG9zc2libGVRdWVyaWVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcgPSB7XG4gICAgICAgICAgcGhyYXNlczogKHRoaW5raW5nQ29uZmlnICYmIHRoaW5raW5nQ29uZmlnLnBocmFzZXMpIHx8IFtdLFxuICAgICAgICAgIGRlbGF5TXM6XG4gICAgICAgICAgICB0aGlua2luZ0NvbmZpZyAmJiB0eXBlb2YgdGhpbmtpbmdDb25maWcuZGVsYXlNcyA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICA/IHRoaW5raW5nQ29uZmlnLmRlbGF5TXNcbiAgICAgICAgICAgICAgOiAxMDAwLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFnZW50SWQgPSBhZ2VudElkO1xuICAgICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiYgdGhpcy5hZ2VudElkKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaFdlbGNvbWVJbWFnZSh0aGlzLmFnZW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndlbGNvbWVEYXRhSGFuZGxlcikge1xuICAgICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBJRCB0byBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNvbnZlcnNhdGlvbigpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuY29udmVyc2F0aW9uSWQgJiYgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbkRhdGEgPSB7XG4gICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgY3JlYXRlVGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgICAgIGlzRmluYWxpemVkOiB0aGlzLmlzRmluYWxpemVkLFxuICAgICAgICAgIHBvc3NpYmxlUXVlcmllczogdGhpcy5wb3NzaWJsZVF1ZXJpZXMsXG4gICAgICAgICAgd2VsY29tZURhdGE6IHtcbiAgICAgICAgICAgIC4uLnRoaXMud2VsY29tZURhdGEsXG4gICAgICAgICAgICBpbWFnZVVybDpcbiAgICAgICAgICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsICYmXG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiZcbiAgICAgICAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybC5zdGFydHNXaXRoKFwiYmxvYjpcIilcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaW5raW5nQ29uZmlnOiB0aGlzLnRoaW5raW5nQ29uZmlnLFxuICAgICAgICAgIGFnZW50SWQ6IHRoaXMuYWdlbnRJZCxcbiAgICAgICAgICBndWVzdFRva2VuOiB0aGlzLmd1ZXN0VG9rZW4sXG4gICAgICAgIH07XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpLCBKU09OLnN0cmluZ2lmeShjb252ZXJzYXRpb25EYXRhKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgdG9rZW4gZXhwaXJhdGlvbiBlcnJvclxuICBwcml2YXRlIGlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3I6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiZcbiAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEgJiZcbiAgICAgIChlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yID09PSBcIlRva2VuIGhhcyBleHBpcmVkLlwiIHx8XG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICAodHlwZW9mIGVycm9yLnJlc3BvbnNlLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5pbmNsdWRlcyhcIlRva2VuIGhhcyBleHBpcmVkXCIpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBieSBjbGVhcmluZyB0aGUgSUQgYW5kIHdlYnNvY2tldFxuICAgKi9cbiAgcmVzZXRDaGF0Q29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIC8vIENsb3NlIHRoZSBjdXJyZW50IHdlYnNvY2tldCBjb25uZWN0aW9uIGlmIGl0IGV4aXN0c1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhciB0aGUgY29udmVyc2F0aW9uIElEXG4gICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IG51bGw7XG4gICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gbnVsbDtcbiAgICB0aGlzLmd1ZXN0VG9rZW4gPSBudWxsO1xuICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8vIENsZWFyIHBvc3NpYmxlIHF1ZXJpZXNcbiAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IFtdO1xuICAgIHRoaXMud2VsY29tZURhdGEgPSB7fTtcbiAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0geyBwaHJhc2VzOiBbXSwgZGVsYXlNczogMTAwMCB9O1xuICAgIGlmICh0aGlzLndlbGNvbWVPYmplY3RVcmwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodGhpcy53ZWxjb21lT2JqZWN0VXJsKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuYWdlbnRJZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRTdG9yYWdlS2V5KCkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlcmUncyBhIGN1cnJlbnQgY29udmVyc2F0aW9uXG4gICAqL1xuICBoYXNBY3RpdmVDb252ZXJzYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb252ZXJzYXRpb25JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIElEXG4gICAqL1xuICBnZXRDb252ZXJzYXRpb25JZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb25JZDtcbiAgfVxuXG4gIGdldENvbnZlcnNhdGlvbkNyZWF0ZVRpbWUoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZTtcbiAgfVxuXG4gIGlzQ29udmVyc2F0aW9uRmluYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRmluYWxpemVkO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRDb252ZXJzYXRpb24ocmVDYXB0Y2hhVG9rZW4/OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIHJlY29yZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGRhdGFfc291cmNlX2lkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlQ2FwdGNoYVRva2VuKSB7XG4gICAgICAgIHJlcXVlc3RCb2R5LnJlY2FwdGNoYV90b2tlbiA9IHJlQ2FwdGNoYVRva2VuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tZXRhZGF0YSkge1xuICAgICAgICByZXF1ZXN0Qm9keS5tZXRhZGF0YSA9IHRoaXMubWV0YWRhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlPihcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy9zdGFydGAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSByZXNwb25zZS5kYXRhLmNvbnZlcnNhdGlvbl9pZDtcbiAgICAgIC8vIFN0b3JlIGNvbnZlcnNhdGlvbiBjcmVhdGUgdGltZSAodXNlIGZyb20gcmVzcG9uc2UgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgY3VycmVudCB0aW1lKVxuICAgICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gcmVzcG9uc2UuZGF0YS5jcmVhdGVfdGltZVxuICAgICAgICA/IHJlc3BvbnNlLmRhdGEuY3JlYXRlX3RpbWUgLyAxMDAwXG4gICAgICAgIDogRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAvLyBTdG9yZSBndWVzdCB0b2tlbiBpZiBwcm92aWRlZFxuICAgICAgdGhpcy5ndWVzdFRva2VuID0gcmVzcG9uc2UuZGF0YS5ndWVzdF90b2tlbiB8fCBudWxsO1xuICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGZhbHNlO1xuXG4gICAgICAvLyBTdG9yZSBwb3NzaWJsZSBxdWVyaWVzIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKFxuICAgICAgICByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXMgJiZcbiAgICAgICAgcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzLmxlbmd0aCA+IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcy5maWx0ZXIoXG4gICAgICAgICAgKHF1ZXJ5KSA9PiB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgJiYgcXVlcnkudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYW55RGF0YTogYW55ID0gcmVzcG9uc2UuZGF0YSBhcyBhbnk7XG4gICAgICBjb25zdCBhZ2VudElkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhbnlEYXRhLmFnZW50X2lkO1xuICAgICAgdGhpcy5hZ2VudElkID0gYWdlbnRJZDtcbiAgICAgIGNvbnN0IHdlbGNvbWVUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF93ZWxjb21lX3RpdGxlO1xuICAgICAgY29uc3Qgd2VsY29tZUltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3dlbGNvbWVfaW1hZ2VfdXJsO1xuICAgICAgY29uc3QgdGhpbmtpbmdQaHJhc2VzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlcztcbiAgICAgIGNvbnN0IHRoaW5raW5nRGVsYXlTZWM6IG51bWJlciB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfdGhpbmtpbmdfcGhyYXNlX2RlbGF5O1xuXG4gICAgICB0aGlzLndlbGNvbWVEYXRhID0ge1xuICAgICAgICB0aXRsZTogd2VsY29tZVRpdGxlIHx8IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6IG51bGwsXG4gICAgICAgIGltYWdlVXJsOiB3ZWxjb21lSW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgcG9zc2libGVRdWVyaWVzOiB0aGlzLnBvc3NpYmxlUXVlcmllcyxcbiAgICAgIH07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaW5raW5nUGhyYXNlcykgJiYgdGhpbmtpbmdQaHJhc2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50aGlua2luZ0NvbmZpZy5waHJhc2VzID0gdGhpbmtpbmdQaHJhc2VzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlua2luZ0RlbGF5U2VjID09PSBcIm51bWJlclwiICYmIHRoaW5raW5nRGVsYXlTZWMgPj0gMCkge1xuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPSBNYXRoLm1heChcbiAgICAgICAgICAyNTAsXG4gICAgICAgICAgTWF0aC5yb3VuZCh0aGlua2luZ0RlbGF5U2VjICogMTAwMClcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIGFnZW50SWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaFdlbGNvbWVJbWFnZShhZ2VudElkKTtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyBhZ2VudCB3ZWxjb21lIG1lc3NhZ2UgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAocmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2UgJiYgdGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgICAgY29uc3Qgd2VsY29tZU1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgc3RhcnRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgc3BlYWtlcjogXCJhZ2VudFwiLFxuICAgICAgICAgIHRleHQ6IHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhLm1lc3NhZ2UgPSByZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcih3ZWxjb21lTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLndlbGNvbWVEYXRhSGFuZGxlcikge1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlcih0aGlzLndlbGNvbWVEYXRhKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zYXZlQ29udmVyc2F0aW9uKCk7XG4gICAgICBpZiAodGhpcy51c2VXcykge1xuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhLmNvbnZlcnNhdGlvbl9pZDtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q2hhdENvbnZlcnNhdGlvbigpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudFtdLFxuICAgIGV4dHJhTWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHJlQ2FwdGNoYVRva2VuPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCB8fCAhdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgY29uc3QgY2hhdE1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgIHN0YXJ0X3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICBzcGVha2VyOiBcImN1c3RvbWVyXCIsXG4gICAgICB0ZXh0OiBtZXNzYWdlLFxuICAgICAgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihjaGF0TWVzc2FnZSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICAgIG1lc3NhZ2VzOiBbY2hhdE1lc3NhZ2VdLFxuICAgICAgICByZWNvcmRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlQ2FwdGNoYVRva2VuKSB7XG4gICAgICAgIHJlcXVlc3RCb2R5LnJlY2FwdGNoYV90b2tlbiA9IHJlQ2FwdGNoYVRva2VuO1xuICAgICAgfVxuXG4gICAgICAvLyBJbmNsdWRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXJnZWRNZXRhZGF0YSA9IHtcbiAgICAgICAgLi4uKHRoaXMubWV0YWRhdGEgfHwge30pLFxuICAgICAgICAuLi4oZXh0cmFNZXRhZGF0YSB8fCB7fSksXG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdC5rZXlzKG1lcmdlZE1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcXVlc3RCb2R5Lm1ldGFkYXRhID0gbWVyZ2VkTWV0YWRhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucGF0Y2goXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvaW4tcHJvZ3Jlc3MvdXBkYXRlLyR7dGhpcy5jb252ZXJzYXRpb25JZH1gLFxuICAgICAgICByZXF1ZXN0Qm9keSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBJZiBub3QgdXNpbmcgV2ViU29ja2V0LCB0cnkgdG8gcmV0cmlldmUgdGhlIHJlc3BvbnNlIG1lc3NhZ2UgZnJvbSB0aGUgdXBkYXRlIGNvbnZlcnNhdGlvbiByZXNwb25zZVxuICAgICAgaWYgKCF0aGlzLnVzZVdzICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSByZXNwb25zZS5kYXRhIGFzIGFueTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAocmVzcG9uc2VEYXRhLm1lc3NhZ2VzICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2VEYXRhLm1lc3NhZ2VzKSkge1xuICAgICAgICAgICAgLy8gTG9vayBmb3IgdGhlIGxhdGVzdCBhZ2VudCBtZXNzYWdlIGluIHRoZSByZXNwb25zZVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHJlc3BvbnNlRGF0YS5tZXNzYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlRGF0YSA9IHJlc3BvbnNlRGF0YS5tZXNzYWdlc1tpXTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5zcGVha2VyID09PSBcImFnZW50XCIgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS50ZXh0ICYmXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEuY3JlYXRlX3RpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLnN0YXJ0X3RpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLmVuZF90aW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWdlbnRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBtZXNzYWdlRGF0YS5jcmVhdGVfdGltZSxcbiAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA/IG1lc3NhZ2VEYXRhLnN0YXJ0X3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgOiBtZXNzYWdlRGF0YS5zdGFydF90aW1lLFxuICAgICAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA/IG1lc3NhZ2VEYXRhLmVuZF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogbWVzc2FnZURhdGEuZW5kX3RpbWUsXG4gICAgICAgICAgICAgICAgICBzcGVha2VyOiBcImFnZW50XCIsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBtZXNzYWdlRGF0YS50ZXh0LFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZV9pZDogbWVzc2FnZURhdGEubWVzc2FnZV9pZCB8fCBtZXNzYWdlRGF0YS5pZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIE9ubHkgcHJvY2VzcyBpZiB0aGlzIGlzIGEgbmV3IG1lc3NhZ2Ugd2UgaGF2ZW4ndCBzZWVuIGJlZm9yZVxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGVhc2lseSBjaGVjayBoZXJlLCBzbyB3ZSdsbCBsZXQgdGhlIGhhbmRsZXIgbWFuYWdlIGR1cGxpY2F0ZXNcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGFnZW50TWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIHVwZGF0ZSBjb252ZXJzYXRpb24gcmVzcG9uc2U6XCIsIHBhcnNlRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBhIHRva2VuIGV4cGlyYXRpb24gZXJyb3JcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgaWYgKFxuICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3Jfa2V5ID09PSBcIkFHRU5UX0lOQUNUSVZFXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIGFnZW50IGluYWN0aXZlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSxcbiAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgdGV4dDogdGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZU1lc3NhZ2UgPz8gXCJUaGUgYWdlbnQgaXMgY3VycmVudGx5IG9mZmxpbmUsIHBsZWFzZSBjaGVjayBiYWNrIGxhdGVyLiBUaGFuayB5b3UhXCIsXG4gICAgICAgICAgICAuLi4odGhpcy5zZXJ2ZXJVbmF2YWlsYWJsZUNvbnRhY3RVcmwgJiYge1xuICAgICAgICAgICAgICBsaW5rVXJsOiB0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdFVybCxcbiAgICAgICAgICAgICAgbGlua0xhYmVsOiB0aGlzLnNlcnZlclVuYXZhaWxhYmxlQ29udGFjdExhYmVsID8/IFwiQ29udGFjdCBzdXBwb3J0XCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEb24ndCB0aHJvdyB0aGUgZXJyb3Igc2luY2Ugd2UgaGFuZGxlZCBpdCB3aXRoIGEgbWVzc2FnZVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEZpbGUoY2hhdElkOiBzdHJpbmcsIGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGVVcGxvYWRSZXNwb25zZSB8IG51bGw+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBub3Qgc3RhcnRlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcImNoYXRfaWRcIiwgY2hhdElkKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGZpbGUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucG9zdDxGaWxlVXBsb2FkUmVzcG9uc2U+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9nZW5hZ2VudC9rbm93bGVkZ2UvdXBsb2FkLWNoYXQtZmlsZWAsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEgYXMgRmlsZVVwbG9hZFJlc3BvbnNlO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0V2ViU29ja2V0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VXcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBJRCBpcyByZXF1aXJlZCBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGluZ1wiKTtcbiAgICBcbiAgICAvLyBCdWlsZCBXZWJTb2NrZXQgVVJMIHdpdGggcHJvcGVyIGF1dGhlbnRpY2F0aW9uXG4gICAgY29uc3Qgd3NCYXNlID0gdGhpcy5iYXNlVXJsLnJlcGxhY2UoXCJodHRwXCIsIFwid3NcIik7XG4gICAgY29uc3QgdG9waWNzID0gW1wibWVzc2FnZVwiLCBcInRha2VvdmVyXCIsIFwiZmluYWxpemVcIl07XG4gICAgY29uc3QgdG9waWNzUXVlcnkgPSB0b3BpY3MubWFwKCh0KSA9PiBgdG9waWNzPSR7dH1gKS5qb2luKFwiJlwiKTtcbiAgICBcbiAgICAvLyBVc2UgZ3Vlc3RfdG9rZW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFwaV9rZXlcbiAgICBjb25zdCBhdXRoUGFyYW0gPSB0aGlzLmd1ZXN0VG9rZW4gXG4gICAgICA/IGBhY2Nlc3NfdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ndWVzdFRva2VuKX1gXG4gICAgICA6IGBhcGlfa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYXBpS2V5KX1gO1xuICAgIFxuICAgIGxldCB3c1VybCA9IGAke3dzQmFzZX0vYXBpL2NvbnZlcnNhdGlvbnMvd3MvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT8ke2F1dGhQYXJhbX0mbGFuZz1lbiYke3RvcGljc1F1ZXJ5fWA7XG4gICAgXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmeC10ZW5hbnQtaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBuYXRpdmUgYnJvd3NlciBXZWJTb2NrZXQgZmFjdG9yeVxuICAgIHRoaXMud2ViU29ja2V0ID0gY3JlYXRlV2ViU29ja2V0KHdzVXJsKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnBheWxvYWQpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGEucGF5bG9hZCBhcyBDaGF0TWVzc2FnZVtdO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRpbWVzdGFtcHMgdG8gYmUgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBtZXNzYWdlX2lkIGZpZWxkIChiYWNrZW5kIG1pZ2h0IHNlbmQgJ2lkJyBpbnN0ZWFkIG9mICdtZXNzYWdlX2lkJylcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlc1xuICAgICAgICAgICAgICAubWFwKChtc2cpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RlZCA9IHRoaXMuYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemU6IGlmIGJhY2tlbmQgc2VuZHMgJ2lkJywgdXNlIGl0IGFzICdtZXNzYWdlX2lkJ1xuICAgICAgICAgICAgICAgIGlmICghYWRqdXN0ZWQubWVzc2FnZV9pZCAmJiAobXNnIGFzIGFueSkuaWQpIHtcbiAgICAgICAgICAgICAgICAgIGFkanVzdGVkLm1lc3NhZ2VfaWQgPSAobXNnIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcigobXNnKSA9PiBtc2cuc3BlYWtlciAhPT0gXCJjdXN0b21lclwiKTtcbiAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZXMuZm9yRWFjaCh0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlID0gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhcbiAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkIGFzIENoYXRNZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXplOiBpZiBiYWNrZW5kIHNlbmRzICdpZCcsIHVzZSBpdCBhcyAnbWVzc2FnZV9pZCdcbiAgICAgICAgICAgIGlmICghYWRqdXN0ZWRNZXNzYWdlLm1lc3NhZ2VfaWQgJiYgKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkKSB7XG4gICAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZS5tZXNzYWdlX2lkID0gKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkanVzdGVkTWVzc2FnZS5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihhZGp1c3RlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IFwidGFrZW92ZXJcIikge1xuICAgICAgICAgIC8vIEhhbmRsZSB0YWtlb3ZlciBldmVudFxuICAgICAgICAgIC8vIENyZWF0ZSBzcGVjaWFsIG1lc3NhZ2UgZm9yIHRoZSB0YWtlb3ZlciBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCB0YWtlb3Zlck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHRha2VvdmVyTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdGFrZW92ZXIgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcImZpbmFsaXplXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZmluYWxpemVkIGV2ZW50XG4gICAgICAgICAgLy8gQ3JlYXRlIHNwZWNpYWwgbWVzc2FnZSBmb3IgdGhlIGZpbmFsaXplZCBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCBmaW5hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgPyBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDFcbiAgICAgICAgICAgICAgICA6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIkNvbnZlcnNhdGlvbiBGaW5hbGl6ZWRcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGZpbmFsaXplZE1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGwgdGhlIGZpbmFsaXplZCBoYW5kbGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZWRIYW5kbGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2F2ZUNvbnZlcnNhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy53ZWJTb2NrZXQub25lcnJvciA9IChlcnJvcjogRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIpXG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcihcImRpc2Nvbm5lY3RlZFwiKTtcbiAgICAgIFxuICAgICAgLy8gTG9nIGRpYWdub3N0aWNcbiAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljKGVycm9yLCB3c1VybCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbR2VuQXNzaXN0IENoYXRdICR7ZGlhZ25vc3RpY31gKTtcbiAgICB9O1xuXG4gICAgdGhpcy53ZWJTb2NrZXQub25jbG9zZSA9IChldmVudDogQ2xvc2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcilcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiZGlzY29ubmVjdGVkXCIpO1xuICAgICAgXG4gICAgICAvLyBMb2cgZGlhZ25vc3RpY1xuICAgICAgaWYgKCFldmVudC53YXNDbGVhbikge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljID0gY3JlYXRlV2ViU29ja2V0RGlhZ25vc3RpYyhldmVudCwgd3NVcmwpO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtHZW5Bc3Npc3QgQ2hhdF0gJHtkaWFnbm9zdGljfWApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoV2VsY29tZUltYWdlKGFnZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZVJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9nZW5hZ2VudC9hZ2VudHMvY29uZmlncy8ke2FnZW50SWR9L3dlbGNvbWUtaW1hZ2VgLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlUmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBibG9iVXJsO1xuICAgICAgdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybCA9IGJsb2JVcmw7XG4gICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIodGhpcy53ZWxjb21lRGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q2hhdENvbnZlcnNhdGlvbigpO1xuICAgICAgfVxuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGZlZWRiYWNrIHRvIGEgc3BlY2lmaWMgYWdlbnQgbWVzc2FnZSBpbiB0aGUgY29udmVyc2F0aW9uXG4gIGFzeW5jIGFkZEZlZWRiYWNrKFxuICAgIG1lc3NhZ2VJZDogc3RyaW5nLFxuICAgIGZlZWRiYWNrOiBcImdvb2RcIiB8IFwiYmFkXCIsXG4gICAgZmVlZGJhY2tfbWVzc2FnZT86IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBJRCBpcyByZXF1aXJlZCBmb3IgZmVlZGJhY2tcIik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBtZXNzYWdlIElEIGluIHRoZSBVUkwgcGF0aCwgbm90IGNvbnZlcnNhdGlvbiBJRFxuICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9tZXNzYWdlL2FkZC1mZWVkYmFjay8ke21lc3NhZ2VJZH1gO1xuICAgICAgLy8gQm9keSBzaG91bGQgb25seSBjb250YWluIGZlZWRiYWNrIGFuZCBmZWVkYmFja19tZXNzYWdlIChubyBtZXNzYWdlX2lkKVxuICAgICAgY29uc3QgcGF5bG9hZDoge1xuICAgICAgICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiO1xuICAgICAgICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nO1xuICAgICAgfSA9IHtcbiAgICAgICAgZmVlZGJhY2ssXG4gICAgICB9O1xuICAgICAgXG4gICAgICBpZiAoZmVlZGJhY2tfbWVzc2FnZSkge1xuICAgICAgICBwYXlsb2FkLmZlZWRiYWNrX21lc3NhZ2UgPSBmZWVkYmFja19tZXNzYWdlO1xuICAgICAgfVxuICAgICAgXG4gICAgICBhd2FpdCBheGlvcy5wYXRjaCh1cmwsIHBheWxvYWQsIHtcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDaGF0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICBjb25zb2xlLmVycm9yKCdGZWVkYmFjayBBUEkgY2FsbCBmYWlsZWQ6Jywge1xuICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICByZXNwb25zZTogZXJyb3IucmVzcG9uc2U/LmRhdGEsXG4gICAgICAgIHN0YXR1czogZXJyb3IucmVzcG9uc2U/LnN0YXR1cyxcbiAgICAgIH0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBhZGp1c3QgbWVzc2FnZSB0aW1lc3RhbXBzIHJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICBwcml2YXRlIGFkanVzdE1lc3NhZ2VUaW1lc3RhbXBzKG1lc3NhZ2U6IENoYXRNZXNzYWdlKTogQ2hhdE1lc3NhZ2Uge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWVzc2FnZSxcbiAgICAgIHN0YXJ0X3RpbWU6IG1lc3NhZ2Uuc3RhcnRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICAgIGVuZF90aW1lOiBtZXNzYWdlLmVuZF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "genassist-chat-react",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.25",
|
|
4
4
|
"description": "React chat component for GenAssist",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@types/react-dom": ">=16.8.0"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"axios": "^1.
|
|
46
|
+
"axios": "^1.13.5",
|
|
47
47
|
"lucide-react": "^0.511.0",
|
|
48
48
|
"react-google-recaptcha-v3": "^1.11.0"
|
|
49
49
|
},
|