@riddance/host 0.0.8 → 0.0.10

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/lib/logging.js DELETED
@@ -1,205 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _LogBuffer_instances, _LogBuffer_transport, _LogBuffer_entries, _LogBuffer_size, _LogBuffer_flusher, _LogBuffer_signal, _LogBuffer_asyncTransport, _LogBuffer_timeout, _LogBuffer_startFlush, _EnrichingLogger_buffer, _EnrichingLogger_reservedEnrichment, _EnrichingLogger_customEnrichment, _EnrichingLogger_level;
13
- import { performance } from 'perf_hooks';
14
- export function makeLogger(transport, minimumLogLevel, signal) {
15
- return new EnrichingLogger(new LogBuffer(transport, signal), minimumLogLevel
16
- ? ['fatal', 'error', 'warning', 'info', 'debug', 'trace'].indexOf(minimumLogLevel)
17
- : 5, signal);
18
- }
19
- const performanceTimeOrigin100ns = Math.round(performance.timeOrigin * 10000);
20
- export function highPrecisionISODate(performanceNow) {
21
- const now100ns = performanceTimeOrigin100ns + Math.round(performanceNow * 10000);
22
- return (new Date(now100ns / 10000).toISOString().substring(0, 20) +
23
- (now100ns % 10000000).toString().padStart(7, '0') +
24
- 'Z');
25
- }
26
- class LogBuffer {
27
- constructor(transport, signal) {
28
- _LogBuffer_instances.add(this);
29
- _LogBuffer_transport.set(this, void 0);
30
- _LogBuffer_entries.set(this, []);
31
- _LogBuffer_size.set(this, 0);
32
- _LogBuffer_flusher.set(this, void 0);
33
- _LogBuffer_signal.set(this, void 0);
34
- _LogBuffer_asyncTransport.set(this, void 0);
35
- _LogBuffer_timeout.set(this, void 0);
36
- __classPrivateFieldSet(this, _LogBuffer_transport, transport, "f");
37
- __classPrivateFieldSet(this, _LogBuffer_signal, signal, "f");
38
- }
39
- collect(level, numericLogLevel, message, error, fields, reservedEnrichment, customEnrichment) {
40
- const offset = performance.now();
41
- const json = JSON.stringify({
42
- timestamp: highPrecisionISODate(offset),
43
- level,
44
- message,
45
- error: errorAsJson(error),
46
- ...reservedEnrichment,
47
- ...((fields || customEnrichment) && {
48
- fields: customEnrichment
49
- ? fields
50
- ? { ...customEnrichment, ...fields }
51
- : customEnrichment
52
- : fields,
53
- }),
54
- });
55
- __classPrivateFieldGet(this, _LogBuffer_entries, "f").push({
56
- timestamp: offset,
57
- level,
58
- message,
59
- error,
60
- json,
61
- });
62
- __classPrivateFieldSet(this, _LogBuffer_size, __classPrivateFieldGet(this, _LogBuffer_size, "f") + json.length, "f");
63
- if (__classPrivateFieldGet(this, _LogBuffer_asyncTransport, "f") === false) {
64
- // eslint-disable-next-line no-void
65
- void __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(__classPrivateFieldGet(this, _LogBuffer_entries, "f"), __classPrivateFieldGet(this, _LogBuffer_signal, "f"));
66
- __classPrivateFieldSet(this, _LogBuffer_entries, [], "f");
67
- __classPrivateFieldSet(this, _LogBuffer_size, 0, "f");
68
- }
69
- else if (__classPrivateFieldGet(this, _LogBuffer_asyncTransport, "f") === undefined) {
70
- __classPrivateFieldSet(this, _LogBuffer_asyncTransport, true, "f");
71
- setImmediate(() => {
72
- if (__classPrivateFieldGet(this, _LogBuffer_flusher, "f")) {
73
- return;
74
- }
75
- const sendResult = __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(__classPrivateFieldGet(this, _LogBuffer_entries, "f"), __classPrivateFieldGet(this, _LogBuffer_signal, "f"));
76
- __classPrivateFieldSet(this, _LogBuffer_entries, [], "f");
77
- __classPrivateFieldSet(this, _LogBuffer_size, 0, "f");
78
- if (sendResult) {
79
- __classPrivateFieldSet(this, _LogBuffer_flusher, sendResult, "f");
80
- }
81
- else {
82
- __classPrivateFieldSet(this, _LogBuffer_asyncTransport, false, "f");
83
- }
84
- });
85
- }
86
- else {
87
- if (numericLogLevel < 2 || __classPrivateFieldGet(this, _LogBuffer_entries, "f").length > 8 || __classPrivateFieldGet(this, _LogBuffer_size, "f") > 64000) {
88
- // eslint-disable-next-line no-void
89
- void this.flush();
90
- }
91
- else {
92
- __classPrivateFieldSet(this, _LogBuffer_timeout, setTimeout(() => {
93
- // eslint-disable-next-line no-void
94
- void this.flush();
95
- __classPrivateFieldSet(this, _LogBuffer_timeout, undefined, "f");
96
- }, 2000), "f");
97
- }
98
- }
99
- }
100
- async flush() {
101
- if (__classPrivateFieldGet(this, _LogBuffer_entries, "f").length === 0) {
102
- return;
103
- }
104
- __classPrivateFieldGet(this, _LogBuffer_instances, "m", _LogBuffer_startFlush).call(this, __classPrivateFieldGet(this, _LogBuffer_entries, "f"));
105
- __classPrivateFieldSet(this, _LogBuffer_entries, [], "f");
106
- __classPrivateFieldSet(this, _LogBuffer_size, 0, "f");
107
- if (__classPrivateFieldGet(this, _LogBuffer_timeout, "f")) {
108
- clearTimeout(__classPrivateFieldGet(this, _LogBuffer_timeout, "f"));
109
- __classPrivateFieldSet(this, _LogBuffer_timeout, undefined, "f");
110
- }
111
- return await __classPrivateFieldGet(this, _LogBuffer_flusher, "f");
112
- }
113
- }
114
- _LogBuffer_transport = new WeakMap(), _LogBuffer_entries = new WeakMap(), _LogBuffer_size = new WeakMap(), _LogBuffer_flusher = new WeakMap(), _LogBuffer_signal = new WeakMap(), _LogBuffer_asyncTransport = new WeakMap(), _LogBuffer_timeout = new WeakMap(), _LogBuffer_instances = new WeakSet(), _LogBuffer_startFlush = function _LogBuffer_startFlush(entries) {
115
- if (__classPrivateFieldGet(this, _LogBuffer_flusher, "f")) {
116
- __classPrivateFieldSet(this, _LogBuffer_flusher, __classPrivateFieldGet(this, _LogBuffer_flusher, "f").then(() => __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(entries, __classPrivateFieldGet(this, _LogBuffer_signal, "f"))), "f");
117
- }
118
- else {
119
- __classPrivateFieldSet(this, _LogBuffer_flusher, __classPrivateFieldGet(this, _LogBuffer_transport, "f").sendEntries(entries, __classPrivateFieldGet(this, _LogBuffer_signal, "f")), "f");
120
- }
121
- };
122
- class EnrichingLogger {
123
- constructor(buffer, level, reservedEnrichment, customEnrichment) {
124
- _EnrichingLogger_buffer.set(this, void 0);
125
- _EnrichingLogger_reservedEnrichment.set(this, void 0);
126
- _EnrichingLogger_customEnrichment.set(this, void 0);
127
- _EnrichingLogger_level.set(this, void 0);
128
- __classPrivateFieldSet(this, _EnrichingLogger_buffer, buffer, "f");
129
- __classPrivateFieldSet(this, _EnrichingLogger_level, level, "f");
130
- __classPrivateFieldSet(this, _EnrichingLogger_reservedEnrichment, reservedEnrichment, "f");
131
- __classPrivateFieldSet(this, _EnrichingLogger_customEnrichment, customEnrichment, "f");
132
- }
133
- enrich(fields) {
134
- return new EnrichingLogger(__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f"), __classPrivateFieldGet(this, _EnrichingLogger_level, "f"), __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), {
135
- ...(__classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f") ?? {}),
136
- ...fields,
137
- });
138
- }
139
- flush() {
140
- return __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").flush();
141
- }
142
- enrichReserved(fields) {
143
- return new EnrichingLogger(__classPrivateFieldGet(this, _EnrichingLogger_buffer, "f"), __classPrivateFieldGet(this, _EnrichingLogger_level, "f"), {
144
- ...(__classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f") ?? {}),
145
- ...fields,
146
- }, __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
147
- }
148
- trace(message, error, fields) {
149
- if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 5) {
150
- return;
151
- }
152
- __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('trace', 5, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
153
- }
154
- debug(message, error, fields) {
155
- if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 4) {
156
- return;
157
- }
158
- __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('debug', 4, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
159
- }
160
- info(message, error, fields) {
161
- if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 3) {
162
- return;
163
- }
164
- __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('info', 3, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
165
- }
166
- warn(message, error, fields) {
167
- if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 2) {
168
- return;
169
- }
170
- __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('warning', 2, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
171
- }
172
- error(message, error, fields) {
173
- if (__classPrivateFieldGet(this, _EnrichingLogger_level, "f") < 1) {
174
- return;
175
- }
176
- __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('error', 1, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
177
- }
178
- fatal(message, error, fields) {
179
- __classPrivateFieldGet(this, _EnrichingLogger_buffer, "f").collect('fatal', 0, message, error, fields, __classPrivateFieldGet(this, _EnrichingLogger_reservedEnrichment, "f"), __classPrivateFieldGet(this, _EnrichingLogger_customEnrichment, "f"));
180
- }
181
- }
182
- _EnrichingLogger_buffer = new WeakMap(), _EnrichingLogger_reservedEnrichment = new WeakMap(), _EnrichingLogger_customEnrichment = new WeakMap(), _EnrichingLogger_level = new WeakMap();
183
- function errorAsJson(error) {
184
- if (error === undefined || error === null) {
185
- return undefined;
186
- }
187
- if (error instanceof Error) {
188
- return {
189
- message: error.message,
190
- name: error.name,
191
- stack: error.stack,
192
- ...error,
193
- };
194
- }
195
- if (error instanceof Object) {
196
- return {
197
- ...error,
198
- };
199
- }
200
- return {
201
- message: error?.toString(),
202
- name: typeof error,
203
- };
204
- }
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUl4QyxNQUFNLFVBQVUsVUFBVSxDQUN0QixTQUF1QixFQUN2QixlQUFxQyxFQUNyQyxNQUFtQjtJQUVuQixPQUFPLElBQUksZUFBZSxDQUN0QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQ2hDLGVBQWU7UUFDWCxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDbEYsQ0FBQyxDQUFDLENBQUMsRUFDUCxNQUFNLENBQ1QsQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQTtBQUU3RSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBc0I7SUFDdkQsTUFBTSxRQUFRLEdBQUcsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFDaEYsT0FBTyxDQUNILElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6RCxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNqRCxHQUFHLENBQ04sQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFNBQVM7SUFTWCxZQUFZLFNBQXVCLEVBQUUsTUFBbUI7O1FBUnhELHVDQUFpQztRQUNqQyw2QkFBdUIsRUFBRSxFQUFBO1FBQ3pCLDBCQUFRLENBQUMsRUFBQTtRQUNULHFDQUFvQztRQUNwQyxvQ0FBNkI7UUFDN0IsNENBQW9DO1FBQ3BDLHFDQUFvQztRQUdoQyx1QkFBQSxJQUFJLHdCQUFjLFNBQVMsTUFBQSxDQUFBO1FBQzNCLHVCQUFBLElBQUkscUJBQVcsTUFBTSxNQUFBLENBQUE7SUFDekIsQ0FBQztJQUVELE9BQU8sQ0FDSCxLQUFlLEVBQ2YsZUFBdUIsRUFDdkIsT0FBZSxFQUNmLEtBQWMsRUFDZCxNQUEwQixFQUMxQixrQkFBc0MsRUFDdEMsZ0JBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNoQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7WUFDdkMsS0FBSztZQUNMLE9BQU87WUFDUCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN6QixHQUFHLGtCQUFrQjtZQUNyQixHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsSUFBSTtnQkFDaEMsTUFBTSxFQUFFLGdCQUFnQjtvQkFDcEIsQ0FBQyxDQUFDLE1BQU07d0JBQ0osQ0FBQyxDQUFDLEVBQUUsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLE1BQU0sRUFBRTt3QkFDcEMsQ0FBQyxDQUFDLGdCQUFnQjtvQkFDdEIsQ0FBQyxDQUFDLE1BQU07YUFDZixDQUFDO1NBQ0wsQ0FBQyxDQUFBO1FBQ0YsdUJBQUEsSUFBSSwwQkFBUyxDQUFDLElBQUksQ0FBQztZQUNmLFNBQVMsRUFBRSxNQUFNO1lBQ2pCLEtBQUs7WUFDTCxPQUFPO1lBQ1AsS0FBSztZQUNMLElBQUk7U0FDUCxDQUFDLENBQUE7UUFDRixtR0FBYyxJQUFJLENBQUMsTUFBTSxNQUFBLENBQUE7UUFFekIsSUFBSSx1QkFBQSxJQUFJLGlDQUFnQixLQUFLLEtBQUssRUFBRTtZQUNoQyxtQ0FBbUM7WUFDbkMsS0FBSyx1QkFBQSxJQUFJLDRCQUFXLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUksMEJBQVMsRUFBRSx1QkFBQSxJQUFJLHlCQUFRLENBQUMsQ0FBQTtZQUM3RCx1QkFBQSxJQUFJLHNCQUFZLEVBQUUsTUFBQSxDQUFBO1lBQ2xCLHVCQUFBLElBQUksbUJBQVMsQ0FBQyxNQUFBLENBQUE7U0FDakI7YUFBTSxJQUFJLHVCQUFBLElBQUksaUNBQWdCLEtBQUssU0FBUyxFQUFFO1lBQzNDLHVCQUFBLElBQUksNkJBQW1CLElBQUksTUFBQSxDQUFBO1lBQzNCLFlBQVksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSx1QkFBQSxJQUFJLDBCQUFTLEVBQUU7b0JBQ2YsT0FBTTtpQkFDVDtnQkFDRCxNQUFNLFVBQVUsR0FBRyx1QkFBQSxJQUFJLDRCQUFXLENBQUMsV0FBVyxDQUFDLHVCQUFBLElBQUksMEJBQVMsRUFBRSx1QkFBQSxJQUFJLHlCQUFRLENBQUMsQ0FBQTtnQkFDM0UsdUJBQUEsSUFBSSxzQkFBWSxFQUFFLE1BQUEsQ0FBQTtnQkFDbEIsdUJBQUEsSUFBSSxtQkFBUyxDQUFDLE1BQUEsQ0FBQTtnQkFDZCxJQUFJLFVBQVUsRUFBRTtvQkFDWix1QkFBQSxJQUFJLHNCQUFZLFVBQVUsTUFBQSxDQUFBO2lCQUM3QjtxQkFBTTtvQkFDSCx1QkFBQSxJQUFJLDZCQUFtQixLQUFLLE1BQUEsQ0FBQTtpQkFDL0I7WUFDTCxDQUFDLENBQUMsQ0FBQTtTQUNMO2FBQU07WUFDSCxJQUFJLGVBQWUsR0FBRyxDQUFDLElBQUksdUJBQUEsSUFBSSwwQkFBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksdUJBQUEsSUFBSSx1QkFBTSxHQUFHLEtBQUssRUFBRTtnQkFDdkUsbUNBQW1DO2dCQUNuQyxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTthQUNwQjtpQkFBTTtnQkFDSCx1QkFBQSxJQUFJLHNCQUFZLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQzVCLG1DQUFtQztvQkFDbkMsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUE7b0JBQ2pCLHVCQUFBLElBQUksc0JBQVksU0FBUyxNQUFBLENBQUE7Z0JBQzdCLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBQSxDQUFBO2FBQ1g7U0FDSjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksdUJBQUEsSUFBSSwwQkFBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDNUIsT0FBTTtTQUNUO1FBQ0QsdUJBQUEsSUFBSSxtREFBWSxNQUFoQixJQUFJLEVBQWEsdUJBQUEsSUFBSSwwQkFBUyxDQUFDLENBQUE7UUFDL0IsdUJBQUEsSUFBSSxzQkFBWSxFQUFFLE1BQUEsQ0FBQTtRQUNsQix1QkFBQSxJQUFJLG1CQUFTLENBQUMsTUFBQSxDQUFBO1FBQ2QsSUFBSSx1QkFBQSxJQUFJLDBCQUFTLEVBQUU7WUFDZixZQUFZLENBQUMsdUJBQUEsSUFBSSwwQkFBUyxDQUFDLENBQUE7WUFDM0IsdUJBQUEsSUFBSSxzQkFBWSxTQUFTLE1BQUEsQ0FBQTtTQUM1QjtRQUNELE9BQU8sTUFBTSx1QkFBQSxJQUFJLDBCQUFTLENBQUE7SUFDOUIsQ0FBQztDQVdKOzhWQVRlLE9BQW1CO0lBQzNCLElBQUksdUJBQUEsSUFBSSwwQkFBUyxFQUFFO1FBQ2YsdUJBQUEsSUFBSSxzQkFBWSx1QkFBQSxJQUFJLDBCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUNwQyx1QkFBQSxJQUFJLDRCQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSx1QkFBQSxJQUFJLHlCQUFRLENBQUMsQ0FDckQsTUFBQSxDQUFBO0tBQ0o7U0FBTTtRQUNILHVCQUFBLElBQUksc0JBQVksdUJBQUEsSUFBSSw0QkFBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsdUJBQUEsSUFBSSx5QkFBUSxDQUFDLE1BQUEsQ0FBQTtLQUNyRTtBQUNMLENBQUM7QUFHTCxNQUFNLGVBQWU7SUFNakIsWUFDSSxNQUFpQixFQUNqQixLQUFhLEVBQ2Isa0JBQTJCLEVBQzNCLGdCQUF5QjtRQVQ3QiwwQ0FBMkI7UUFDM0Isc0RBQXFDO1FBQ3JDLG9EQUFtQztRQUNuQyx5Q0FBdUI7UUFRbkIsdUJBQUEsSUFBSSwyQkFBVyxNQUFNLE1BQUEsQ0FBQTtRQUNyQix1QkFBQSxJQUFJLDBCQUFVLEtBQUssTUFBQSxDQUFBO1FBQ25CLHVCQUFBLElBQUksdUNBQXVCLGtCQUFrQixNQUFBLENBQUE7UUFDN0MsdUJBQUEsSUFBSSxxQ0FBcUIsZ0JBQWdCLE1BQUEsQ0FBQTtJQUM3QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWM7UUFDakIsT0FBTyxJQUFJLGVBQWUsQ0FBQyx1QkFBQSxJQUFJLCtCQUFRLEVBQUUsdUJBQUEsSUFBSSw4QkFBTyxFQUFFLHVCQUFBLElBQUksMkNBQW9CLEVBQUU7WUFDNUUsR0FBRyxDQUFDLHVCQUFBLElBQUkseUNBQWtCLElBQUksRUFBRSxDQUFDO1lBQ2pDLEdBQUcsTUFBTTtTQUNaLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLO1FBQ0QsT0FBTyx1QkFBQSxJQUFJLCtCQUFRLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDL0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjO1FBQ3pCLE9BQU8sSUFBSSxlQUFlLENBQ3RCLHVCQUFBLElBQUksK0JBQVEsRUFDWix1QkFBQSxJQUFJLDhCQUFPLEVBQ1g7WUFDSSxHQUFHLENBQUMsdUJBQUEsSUFBSSwyQ0FBb0IsSUFBSSxFQUFFLENBQUM7WUFDbkMsR0FBRyxNQUFNO1NBQ1osRUFDRCx1QkFBQSxJQUFJLHlDQUFrQixDQUN6QixDQUFBO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQTBCO1FBQzdELElBQUksdUJBQUEsSUFBSSw4QkFBTyxHQUFHLENBQUMsRUFBRTtZQUNqQixPQUFNO1NBQ1Q7UUFDRCx1QkFBQSxJQUFJLCtCQUFRLENBQUMsT0FBTyxDQUNoQixPQUFPLEVBQ1AsQ0FBQyxFQUNELE9BQU8sRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUFBLElBQUksMkNBQW9CLEVBQ3hCLHVCQUFBLElBQUkseUNBQWtCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSx1QkFBQSxJQUFJLDhCQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU07U0FDVDtRQUNELHVCQUFBLElBQUksK0JBQVEsQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQUEsSUFBSSwyQ0FBb0IsRUFDeEIsdUJBQUEsSUFBSSx5Q0FBa0IsQ0FDekIsQ0FBQTtJQUNMLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxNQUEwQjtRQUM1RCxJQUFJLHVCQUFBLElBQUksOEJBQU8sR0FBRyxDQUFDLEVBQUU7WUFDakIsT0FBTTtTQUNUO1FBQ0QsdUJBQUEsSUFBSSwrQkFBUSxDQUFDLE9BQU8sQ0FDaEIsTUFBTSxFQUNOLENBQUMsRUFDRCxPQUFPLEVBQ1AsS0FBSyxFQUNMLE1BQU0sRUFDTix1QkFBQSxJQUFJLDJDQUFvQixFQUN4Qix1QkFBQSxJQUFJLHlDQUFrQixDQUN6QixDQUFBO0lBQ0wsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFlLEVBQUUsS0FBYyxFQUFFLE1BQTBCO1FBQzVELElBQUksdUJBQUEsSUFBSSw4QkFBTyxHQUFHLENBQUMsRUFBRTtZQUNqQixPQUFNO1NBQ1Q7UUFDRCx1QkFBQSxJQUFJLCtCQUFRLENBQUMsT0FBTyxDQUNoQixTQUFTLEVBQ1QsQ0FBQyxFQUNELE9BQU8sRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUFBLElBQUksMkNBQW9CLEVBQ3hCLHVCQUFBLElBQUkseUNBQWtCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQWUsRUFBRSxLQUFjLEVBQUUsTUFBMEI7UUFDN0QsSUFBSSx1QkFBQSxJQUFJLDhCQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQ2pCLE9BQU07U0FDVDtRQUNELHVCQUFBLElBQUksK0JBQVEsQ0FBQyxPQUFPLENBQ2hCLE9BQU8sRUFDUCxDQUFDLEVBQ0QsT0FBTyxFQUNQLEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQUEsSUFBSSwyQ0FBb0IsRUFDeEIsdUJBQUEsSUFBSSx5Q0FBa0IsQ0FDekIsQ0FBQTtJQUNMLENBQUM7SUFDRCxLQUFLLENBQUMsT0FBZSxFQUFFLEtBQWMsRUFBRSxNQUEwQjtRQUM3RCx1QkFBQSxJQUFJLCtCQUFRLENBQUMsT0FBTyxDQUNoQixPQUFPLEVBQ1AsQ0FBQyxFQUNELE9BQU8sRUFDUCxLQUFLLEVBQ0wsTUFBTSxFQUNOLHVCQUFBLElBQUksMkNBQW9CLEVBQ3hCLHVCQUFBLElBQUkseUNBQWtCLENBQ3pCLENBQUE7SUFDTCxDQUFDO0NBQ0o7O0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUMvQixJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtRQUN2QyxPQUFPLFNBQVMsQ0FBQTtLQUNuQjtJQUNELElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTtRQUN4QixPQUFPO1lBQ0gsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsR0FBSSxLQUErQztTQUM5QyxDQUFBO0tBQ1o7SUFDRCxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUU7UUFDekIsT0FBTztZQUNILEdBQUcsS0FBSztTQUNILENBQUE7S0FDWjtJQUNELE9BQU87UUFDSCxPQUFPLEVBQUcsS0FBNEIsRUFBRSxRQUFRLEVBQUU7UUFDbEQsSUFBSSxFQUFFLE9BQU8sS0FBSztLQUNiLENBQUE7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcGVyZm9ybWFuY2UgfSBmcm9tICdwZXJmX2hvb2tzJ1xyXG5pbXBvcnQgeyBBYm9ydFNpZ25hbCwgSnNvbiwgTG9nZ2VyIH0gZnJvbSAnLi4vY29udGV4dC5qcydcclxuaW1wb3J0IHsgTG9nRW50cnksIExvZ0xldmVsLCBMb2dUcmFuc3BvcnQsIFJvb3RMb2dnZXIgfSBmcm9tICcuL2NvbnRleHQuanMnXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFrZUxvZ2dlcihcclxuICAgIHRyYW5zcG9ydDogTG9nVHJhbnNwb3J0LFxyXG4gICAgbWluaW11bUxvZ0xldmVsOiBMb2dMZXZlbCB8IHVuZGVmaW5lZCxcclxuICAgIHNpZ25hbDogQWJvcnRTaWduYWwsXHJcbik6IFJvb3RMb2dnZXIge1xyXG4gICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIoXHJcbiAgICAgICAgbmV3IExvZ0J1ZmZlcih0cmFuc3BvcnQsIHNpZ25hbCksXHJcbiAgICAgICAgbWluaW11bUxvZ0xldmVsXHJcbiAgICAgICAgICAgID8gWydmYXRhbCcsICdlcnJvcicsICd3YXJuaW5nJywgJ2luZm8nLCAnZGVidWcnLCAndHJhY2UnXS5pbmRleE9mKG1pbmltdW1Mb2dMZXZlbClcclxuICAgICAgICAgICAgOiA1LFxyXG4gICAgICAgIHNpZ25hbCxcclxuICAgIClcclxufVxyXG5cclxuY29uc3QgcGVyZm9ybWFuY2VUaW1lT3JpZ2luMTAwbnMgPSBNYXRoLnJvdW5kKHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKiAxMDAwMClcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBoaWdoUHJlY2lzaW9uSVNPRGF0ZShwZXJmb3JtYW5jZU5vdzogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBub3cxMDBucyA9IHBlcmZvcm1hbmNlVGltZU9yaWdpbjEwMG5zICsgTWF0aC5yb3VuZChwZXJmb3JtYW5jZU5vdyAqIDEwMDAwKVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICBuZXcgRGF0ZShub3cxMDBucyAvIDEwMDAwKS50b0lTT1N0cmluZygpLnN1YnN0cmluZygwLCAyMCkgK1xyXG4gICAgICAgIChub3cxMDBucyAlIDEwMDAwMDAwKS50b1N0cmluZygpLnBhZFN0YXJ0KDcsICcwJykgK1xyXG4gICAgICAgICdaJ1xyXG4gICAgKVxyXG59XHJcblxyXG5jbGFzcyBMb2dCdWZmZXIge1xyXG4gICAgcmVhZG9ubHkgI3RyYW5zcG9ydDogTG9nVHJhbnNwb3J0XHJcbiAgICAjZW50cmllczogTG9nRW50cnlbXSA9IFtdXHJcbiAgICAjc2l6ZSA9IDBcclxuICAgICNmbHVzaGVyPzogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZFxyXG4gICAgcmVhZG9ubHkgI3NpZ25hbDogQWJvcnRTaWduYWxcclxuICAgICNhc3luY1RyYW5zcG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZFxyXG4gICAgI3RpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgdW5kZWZpbmVkXHJcblxyXG4gICAgY29uc3RydWN0b3IodHJhbnNwb3J0OiBMb2dUcmFuc3BvcnQsIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcclxuICAgICAgICB0aGlzLiN0cmFuc3BvcnQgPSB0cmFuc3BvcnRcclxuICAgICAgICB0aGlzLiNzaWduYWwgPSBzaWduYWxcclxuICAgIH1cclxuXHJcbiAgICBjb2xsZWN0KFxyXG4gICAgICAgIGxldmVsOiBMb2dMZXZlbCxcclxuICAgICAgICBudW1lcmljTG9nTGV2ZWw6IG51bWJlcixcclxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXHJcbiAgICAgICAgZXJyb3I6IHVua25vd24sXHJcbiAgICAgICAgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgcmVzZXJ2ZWRFbnJpY2htZW50OiBvYmplY3QgfCB1bmRlZmluZWQsXHJcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudDogb2JqZWN0IHwgdW5kZWZpbmVkLFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGVyZm9ybWFuY2Uubm93KClcclxuICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IGhpZ2hQcmVjaXNpb25JU09EYXRlKG9mZnNldCksXHJcbiAgICAgICAgICAgIGxldmVsLFxyXG4gICAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JBc0pzb24oZXJyb3IpLFxyXG4gICAgICAgICAgICAuLi5yZXNlcnZlZEVucmljaG1lbnQsXHJcbiAgICAgICAgICAgIC4uLigoZmllbGRzIHx8IGN1c3RvbUVucmljaG1lbnQpICYmIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkczogY3VzdG9tRW5yaWNobWVudFxyXG4gICAgICAgICAgICAgICAgICAgID8gZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyAuLi5jdXN0b21FbnJpY2htZW50LCAuLi5maWVsZHMgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGN1c3RvbUVucmljaG1lbnRcclxuICAgICAgICAgICAgICAgICAgICA6IGZpZWxkcyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLiNlbnRyaWVzLnB1c2goe1xyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9mZnNldCxcclxuICAgICAgICAgICAgbGV2ZWwsXHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBqc29uLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy4jc2l6ZSArPSBqc29uLmxlbmd0aFxyXG5cclxuICAgICAgICBpZiAodGhpcy4jYXN5bmNUcmFuc3BvcnQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXHJcbiAgICAgICAgICAgIHZvaWQgdGhpcy4jdHJhbnNwb3J0LnNlbmRFbnRyaWVzKHRoaXMuI2VudHJpZXMsIHRoaXMuI3NpZ25hbClcclxuICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXHJcbiAgICAgICAgICAgIHRoaXMuI3NpemUgPSAwXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNhc3luY1RyYW5zcG9ydCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2FzeW5jVHJhbnNwb3J0ID0gdHJ1ZVxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRSZXN1bHQgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXModGhpcy4jZW50cmllcywgdGhpcy4jc2lnbmFsKVxyXG4gICAgICAgICAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXHJcbiAgICAgICAgICAgICAgICB0aGlzLiNzaXplID0gMFxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbmRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gc2VuZFJlc3VsdFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiNhc3luY1RyYW5zcG9ydCA9IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG51bWVyaWNMb2dMZXZlbCA8IDIgfHwgdGhpcy4jZW50cmllcy5sZW5ndGggPiA4IHx8IHRoaXMuI3NpemUgPiA2NDAwMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcclxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5mbHVzaCgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiN0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcclxuICAgICAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3RpbWVvdXQgPSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2VudHJpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNzdGFydEZsdXNoKHRoaXMuI2VudHJpZXMpXHJcbiAgICAgICAgdGhpcy4jZW50cmllcyA9IFtdXHJcbiAgICAgICAgdGhpcy4jc2l6ZSA9IDBcclxuICAgICAgICBpZiAodGhpcy4jdGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy4jdGltZW91dClcclxuICAgICAgICAgICAgdGhpcy4jdGltZW91dCA9IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxyXG4gICAgfVxyXG5cclxuICAgICNzdGFydEZsdXNoKGVudHJpZXM6IExvZ0VudHJ5W10pIHtcclxuICAgICAgICBpZiAodGhpcy4jZmx1c2hlcikge1xyXG4gICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gdGhpcy4jZmx1c2hlci50aGVuKCgpID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiN0cmFuc3BvcnQuc2VuZEVudHJpZXMoZW50cmllcywgdGhpcy4jc2lnbmFsKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuY2xhc3MgRW5yaWNoaW5nTG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyIHtcclxuICAgIHJlYWRvbmx5ICNidWZmZXI6IExvZ0J1ZmZlclxyXG4gICAgcmVhZG9ubHkgI3Jlc2VydmVkRW5yaWNobWVudD86IG9iamVjdFxyXG4gICAgcmVhZG9ubHkgI2N1c3RvbUVucmljaG1lbnQ/OiBvYmplY3RcclxuICAgIHJlYWRvbmx5ICNsZXZlbDogbnVtYmVyXHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgYnVmZmVyOiBMb2dCdWZmZXIsXHJcbiAgICAgICAgbGV2ZWw6IG51bWJlcixcclxuICAgICAgICByZXNlcnZlZEVucmljaG1lbnQ/OiBvYmplY3QsXHJcbiAgICAgICAgY3VzdG9tRW5yaWNobWVudD86IG9iamVjdCxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuI2J1ZmZlciA9IGJ1ZmZlclxyXG4gICAgICAgIHRoaXMuI2xldmVsID0gbGV2ZWxcclxuICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQgPSByZXNlcnZlZEVucmljaG1lbnRcclxuICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50ID0gY3VzdG9tRW5yaWNobWVudFxyXG4gICAgfVxyXG5cclxuICAgIGVucmljaChmaWVsZHM6IG9iamVjdCk6IExvZ2dlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBFbnJpY2hpbmdMb2dnZXIodGhpcy4jYnVmZmVyLCB0aGlzLiNsZXZlbCwgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LCB7XHJcbiAgICAgICAgICAgIC4uLih0aGlzLiNjdXN0b21FbnJpY2htZW50ID8/IHt9KSxcclxuICAgICAgICAgICAgLi4uZmllbGRzLFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZmx1c2goKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlci5mbHVzaCgpXHJcbiAgICB9XHJcblxyXG4gICAgZW5yaWNoUmVzZXJ2ZWQoZmllbGRzOiBvYmplY3QpOiBFbnJpY2hpbmdMb2dnZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRW5yaWNoaW5nTG9nZ2VyKFxyXG4gICAgICAgICAgICB0aGlzLiNidWZmZXIsXHJcbiAgICAgICAgICAgIHRoaXMuI2xldmVsLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAuLi4odGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50ID8/IHt9KSxcclxuICAgICAgICAgICAgICAgIC4uLmZpZWxkcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2UobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCA1KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcclxuICAgICAgICAgICAgJ3RyYWNlJyxcclxuICAgICAgICAgICAgNSxcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxyXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgNCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXHJcbiAgICAgICAgICAgICdkZWJ1ZycsXHJcbiAgICAgICAgICAgIDQsXHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcclxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcclxuICAgICAgICApXHJcbiAgICB9XHJcbiAgICBpbmZvKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuI2xldmVsIDwgMykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXHJcbiAgICAgICAgICAgICdpbmZvJyxcclxuICAgICAgICAgICAgMyxcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxyXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIHdhcm4obWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCAyKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcclxuICAgICAgICAgICAgJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAyLFxyXG4gICAgICAgICAgICBtZXNzYWdlLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgZmllbGRzLFxyXG4gICAgICAgICAgICB0aGlzLiNyZXNlcnZlZEVucmljaG1lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuI2N1c3RvbUVucmljaG1lbnQsXHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG4gICAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBlcnJvcjogdW5rbm93biwgZmllbGRzOiBvYmplY3QgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy4jbGV2ZWwgPCAxKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiNidWZmZXIuY29sbGVjdChcclxuICAgICAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAgICAgMSxcclxuICAgICAgICAgICAgbWVzc2FnZSxcclxuICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgIGZpZWxkcyxcclxuICAgICAgICAgICAgdGhpcy4jcmVzZXJ2ZWRFbnJpY2htZW50LFxyXG4gICAgICAgICAgICB0aGlzLiNjdXN0b21FbnJpY2htZW50LFxyXG4gICAgICAgIClcclxuICAgIH1cclxuICAgIGZhdGFsKG1lc3NhZ2U6IHN0cmluZywgZXJyb3I6IHVua25vd24sIGZpZWxkczogb2JqZWN0IHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy4jYnVmZmVyLmNvbGxlY3QoXHJcbiAgICAgICAgICAgICdmYXRhbCcsXHJcbiAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgIG1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgICBmaWVsZHMsXHJcbiAgICAgICAgICAgIHRoaXMuI3Jlc2VydmVkRW5yaWNobWVudCxcclxuICAgICAgICAgICAgdGhpcy4jY3VzdG9tRW5yaWNobWVudCxcclxuICAgICAgICApXHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGVycm9yQXNKc29uKGVycm9yOiB1bmtub3duKTogSnNvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoZXJyb3IgPT09IHVuZGVmaW5lZCB8fCBlcnJvciA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgbmFtZTogZXJyb3IubmFtZSxcclxuICAgICAgICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLFxyXG4gICAgICAgICAgICAuLi4oZXJyb3IgYXMgdW5rbm93biBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSksXHJcbiAgICAgICAgfSBhcyBKc29uXHJcbiAgICB9XHJcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5lcnJvcixcclxuICAgICAgICB9IGFzIEpzb25cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbWVzc2FnZTogKGVycm9yIGFzIG9iamVjdCB8IHVuZGVmaW5lZCk/LnRvU3RyaW5nKCksXHJcbiAgICAgICAgbmFtZTogdHlwZW9mIGVycm9yLFxyXG4gICAgfSBhcyBKc29uXHJcbn1cclxuIl19
package/lib/registry.js DELETED
@@ -1,61 +0,0 @@
1
- const handlers = {};
2
- function addHandler(type, handler) {
3
- ;
4
- (handlers[type] ??= []).push(handler);
5
- }
6
- export function getHandlers(type) {
7
- return (handlers[type] ?? []);
8
- }
9
- let httpHostRegistry;
10
- function setHttpHost(host) {
11
- httpHostRegistry = host;
12
- }
13
- let metadata;
14
- export function setMeta(packageName, fileName, revision, config) {
15
- metadata = {
16
- packageName,
17
- fileName,
18
- revision,
19
- config,
20
- };
21
- }
22
- function getMetadata() {
23
- return metadata;
24
- }
25
- function pathToRegExp(path) {
26
- return new RegExp(('^' +
27
- path.replace(/[/\\^$+?.()|[\]{}]/gu, '\\$&').replaceAll('*', '[^/\\?]+') +
28
- '(\\?.*)?$').replace('[^/\\?]+[^/\\?]+(\\?.*)?$', ''), 'u');
29
- }
30
- function combineConfig(base, override) {
31
- if (base === undefined) {
32
- return override;
33
- }
34
- else if (override === undefined) {
35
- return base;
36
- }
37
- return { ...base, ...override };
38
- }
39
- function httpHost(meta, cfg, method, path, entry) {
40
- addHandler('http', {
41
- meta,
42
- config: combineConfig(meta?.config, cfg),
43
- method,
44
- pathPattern: path,
45
- pathRegExp: pathToRegExp(path),
46
- entry,
47
- });
48
- }
49
- setHttpHost(httpHost);
50
- export function registerHttpHandler(method, path, configOrHandler, fn) {
51
- if (typeof configOrHandler === 'function') {
52
- httpHostRegistry(getMetadata(), undefined, method, path, configOrHandler);
53
- }
54
- else {
55
- if (!fn) {
56
- throw new Error('Please provide a handler function.');
57
- }
58
- httpHostRegistry(getMetadata(), configOrHandler, method, path, fn);
59
- }
60
- }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZWdpc3RyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsTUFBTSxRQUFRLEdBQWlDLEVBQUUsQ0FBQTtBQUVqRCxTQUFTLFVBQVUsQ0FBQyxJQUF3QixFQUFFLE9BQW9CO0lBQzlELENBQUM7SUFBQSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDMUMsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBd0I7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQWtCLENBQUE7QUFDbEQsQ0FBQztBQVVELElBQUksZ0JBQTBCLENBQUE7QUFFOUIsU0FBUyxXQUFXLENBQUMsSUFBYztJQUMvQixnQkFBZ0IsR0FBRyxJQUFJLENBQUE7QUFDM0IsQ0FBQztBQUVELElBQUksUUFBOEIsQ0FBQTtBQUVsQyxNQUFNLFVBQVUsT0FBTyxDQUNuQixXQUFtQixFQUNuQixRQUFnQixFQUNoQixRQUE0QixFQUM1QixNQUF3QztJQUV4QyxRQUFRLEdBQUc7UUFDUCxXQUFXO1FBQ1gsUUFBUTtRQUNSLFFBQVE7UUFDUixNQUFNO0tBQ1QsQ0FBQTtBQUNMLENBQUM7QUFjRCxTQUFTLFdBQVc7SUFDaEIsT0FBTyxRQUFRLENBQUE7QUFDbkIsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxJQUFJLE1BQU0sQ0FDYixDQUNJLEdBQUc7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1FBQ3hFLFdBQVcsQ0FDZCxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLENBQUMsRUFDMUMsR0FBRyxDQUNOLENBQUE7QUFDTCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQ2xCLElBQXNDLEVBQ3RDLFFBQTBDO0lBRTFDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUNwQixPQUFPLFFBQVEsQ0FBQTtLQUNsQjtTQUFNLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtRQUMvQixPQUFPLElBQUksQ0FBQTtLQUNkO0lBQ0QsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUE7QUFDbkMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUNiLElBQTBCLEVBQzFCLEdBQXFDLEVBQ3JDLE1BQWMsRUFDZCxJQUFZLEVBQ1osS0FBYztJQUVkLFVBQVUsQ0FBQyxNQUFNLEVBQUU7UUFDZixJQUFJO1FBQ0osTUFBTSxFQUFFLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztRQUN4QyxNQUFNO1FBQ04sV0FBVyxFQUFFLElBQUk7UUFDakIsVUFBVSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUM7UUFDOUIsS0FBSztLQUNSLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUE7QUFJckIsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixNQUFjLEVBQ2QsSUFBWSxFQUNaLGVBQStDLEVBQy9DLEVBQVk7SUFFWixJQUFJLE9BQU8sZUFBZSxLQUFLLFVBQVUsRUFBRTtRQUN2QyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQTtLQUM1RTtTQUFNO1FBQ0gsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQTtTQUN4RDtRQUNELGdCQUFnQixDQUFDLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0tBQ3JFO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhhbmRsZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29udGV4dC5qcydcclxuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gJy4uL2h0dHAuanMnXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEh0dHBIYW5kbGVyIHtcclxuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXHJcbiAgICBjb25maWc6IChQYWNrYWdlQ29uZmlndXJhdGlvbiAmIEhhbmRsZXJDb25maWd1cmF0aW9uKSB8IHVuZGVmaW5lZFxyXG4gICAgbWV0aG9kOiBNZXRob2RcclxuICAgIHBhdGhQYXR0ZXJuOiBzdHJpbmdcclxuICAgIHBhdGhSZWdFeHA6IFJlZ0V4cFxyXG4gICAgZW50cnk6IEhhbmRsZXJcclxufVxyXG5cclxuaW50ZXJmYWNlIEhhbmRsZXJUeXBlcyB7XHJcbiAgICBodHRwOiBIdHRwSGFuZGxlclxyXG59XHJcblxyXG5jb25zdCBoYW5kbGVyczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duW10gfSA9IHt9XHJcblxyXG5mdW5jdGlvbiBhZGRIYW5kbGVyKHR5cGU6IGtleW9mIEhhbmRsZXJUeXBlcywgaGFuZGxlcjogSHR0cEhhbmRsZXIpIHtcclxuICAgIDsoaGFuZGxlcnNbdHlwZV0gPz89IFtdKS5wdXNoKGhhbmRsZXIpXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRIYW5kbGVycyh0eXBlOiBrZXlvZiBIYW5kbGVyVHlwZXMpIHtcclxuICAgIHJldHVybiAoaGFuZGxlcnNbdHlwZV0gPz8gW10pIGFzIEh0dHBIYW5kbGVyW11cclxufVxyXG5cclxudHlwZSBIdHRwSG9zdCA9IChcclxuICAgIG1ldGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkLFxyXG4gICAgY29uZmlnOiBIYW5kbGVyQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZCxcclxuICAgIG1ldGhvZDogTWV0aG9kLFxyXG4gICAgcGF0aDogc3RyaW5nLFxyXG4gICAgaGFuZGxlcjogSGFuZGxlcixcclxuKSA9PiB2b2lkXHJcblxyXG5sZXQgaHR0cEhvc3RSZWdpc3RyeTogSHR0cEhvc3RcclxuXHJcbmZ1bmN0aW9uIHNldEh0dHBIb3N0KGhvc3Q6IEh0dHBIb3N0KSB7XHJcbiAgICBodHRwSG9zdFJlZ2lzdHJ5ID0gaG9zdFxyXG59XHJcblxyXG5sZXQgbWV0YWRhdGE6IE1ldGFkYXRhIHwgdW5kZWZpbmVkXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0TWV0YShcclxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nLFxyXG4gICAgcmV2aXNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcclxuICAgIGNvbmZpZzogUGFja2FnZUNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXHJcbikge1xyXG4gICAgbWV0YWRhdGEgPSB7XHJcbiAgICAgICAgcGFja2FnZU5hbWUsXHJcbiAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgcmV2aXNpb24sXHJcbiAgICAgICAgY29uZmlnLFxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWludGVyZmFjZVxyXG5leHBvcnQgaW50ZXJmYWNlIFBhY2thZ2VDb25maWd1cmF0aW9uIGV4dGVuZHMgSGFuZGxlckNvbmZpZ3VyYXRpb24ge1xyXG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHBhY2thZ2UtbGV2ZWwgY29uZmlndXJhdGlvbnNcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZXRhZGF0YSB7XHJcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nXHJcbiAgICBmaWxlTmFtZTogc3RyaW5nXHJcbiAgICByZXZpc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkXHJcbiAgICBjb25maWc/OiBQYWNrYWdlQ29uZmlndXJhdGlvblxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRNZXRhZGF0YSgpIHtcclxuICAgIHJldHVybiBtZXRhZGF0YVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXRoVG9SZWdFeHAocGF0aDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChcclxuICAgICAgICAoXHJcbiAgICAgICAgICAgICdeJyArXHJcbiAgICAgICAgICAgIHBhdGgucmVwbGFjZSgvWy9cXFxcXiQrPy4oKXxbXFxde31dL2d1LCAnXFxcXCQmJykucmVwbGFjZUFsbCgnKicsICdbXi9cXFxcP10rJykgK1xyXG4gICAgICAgICAgICAnKFxcXFw/LiopPyQnXHJcbiAgICAgICAgKS5yZXBsYWNlKCdbXi9cXFxcP10rW14vXFxcXD9dKyhcXFxcPy4qKT8kJywgJycpLFxyXG4gICAgICAgICd1JyxcclxuICAgIClcclxufVxyXG5cclxuZnVuY3Rpb24gY29tYmluZUNvbmZpZyhcclxuICAgIGJhc2U6IFBhY2thZ2VDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxyXG4gICAgb3ZlcnJpZGU6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkLFxyXG4pOiAoUGFja2FnZUNvbmZpZ3VyYXRpb24gJiBIYW5kbGVyQ29uZmlndXJhdGlvbikgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKGJhc2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiBvdmVycmlkZVxyXG4gICAgfSBlbHNlIGlmIChvdmVycmlkZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VcclxuICAgIH1cclxuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLm92ZXJyaWRlIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaHR0cEhvc3QoXHJcbiAgICBtZXRhOiBNZXRhZGF0YSB8IHVuZGVmaW5lZCxcclxuICAgIGNmZzogSGFuZGxlckNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQsXHJcbiAgICBtZXRob2Q6IE1ldGhvZCxcclxuICAgIHBhdGg6IHN0cmluZyxcclxuICAgIGVudHJ5OiBIYW5kbGVyLFxyXG4pIHtcclxuICAgIGFkZEhhbmRsZXIoJ2h0dHAnLCB7XHJcbiAgICAgICAgbWV0YSxcclxuICAgICAgICBjb25maWc6IGNvbWJpbmVDb25maWcobWV0YT8uY29uZmlnLCBjZmcpLFxyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBwYXRoUGF0dGVybjogcGF0aCxcclxuICAgICAgICBwYXRoUmVnRXhwOiBwYXRoVG9SZWdFeHAocGF0aCksXHJcbiAgICAgICAgZW50cnksXHJcbiAgICB9KVxyXG59XHJcblxyXG5zZXRIdHRwSG9zdChodHRwSG9zdClcclxuXHJcbmV4cG9ydCB0eXBlIE1ldGhvZCA9ICdHRVQnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAnUEFUQ0gnIHwgJ0RFTEVURSdcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckh0dHBIYW5kbGVyKFxyXG4gICAgbWV0aG9kOiBNZXRob2QsXHJcbiAgICBwYXRoOiBzdHJpbmcsXHJcbiAgICBjb25maWdPckhhbmRsZXI6IEhhbmRsZXJDb25maWd1cmF0aW9uIHwgSGFuZGxlcixcclxuICAgIGZuPzogSGFuZGxlcixcclxuKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09ySGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGh0dHBIb3N0UmVnaXN0cnkoZ2V0TWV0YWRhdGEoKSwgdW5kZWZpbmVkLCBtZXRob2QsIHBhdGgsIGNvbmZpZ09ySGFuZGxlcilcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCFmbikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGEgaGFuZGxlciBmdW5jdGlvbi4nKVxyXG4gICAgICAgIH1cclxuICAgICAgICBodHRwSG9zdFJlZ2lzdHJ5KGdldE1ldGFkYXRhKCksIGNvbmZpZ09ySGFuZGxlciwgbWV0aG9kLCBwYXRoLCBmbilcclxuICAgIH1cclxufVxyXG4iXX0=