@mnaoumov/typescript-lib 0.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/@types/debug/package.json +4 -0
  2. package/LICENSE +21 -0
  3. package/README.md +15 -1
  4. package/dist/lib/cjs/@types/debug.d.cts +21 -0
  5. package/dist/lib/cjs/abort-controller.cjs +144 -0
  6. package/dist/lib/cjs/abort-controller.d.cts +136 -0
  7. package/dist/lib/cjs/aggregate-error.cjs +40 -0
  8. package/dist/lib/cjs/aggregate-error.d.cts +24 -0
  9. package/dist/lib/cjs/array-buffer.cjs +38 -0
  10. package/dist/lib/cjs/array-buffer.d.cts +16 -0
  11. package/dist/lib/cjs/array.cjs +76 -0
  12. package/dist/lib/cjs/array.d.cts +46 -0
  13. package/dist/lib/cjs/async-events.cjs +408 -0
  14. package/dist/lib/cjs/async-events.d.cts +456 -0
  15. package/dist/lib/cjs/async-operation-hook.cjs +55 -0
  16. package/dist/lib/cjs/async-operation-hook.d.cts +59 -0
  17. package/dist/lib/cjs/async.cjs +463 -0
  18. package/dist/lib/cjs/async.d.cts +415 -0
  19. package/dist/lib/cjs/beeper.cjs +68 -0
  20. package/dist/lib/cjs/beeper.d.cts +21 -0
  21. package/dist/lib/cjs/blob.cjs +102 -0
  22. package/dist/lib/cjs/blob.d.cts +60 -0
  23. package/dist/lib/cjs/bytes.cjs +56 -0
  24. package/dist/lib/cjs/bytes.d.cts +17 -0
  25. package/dist/lib/cjs/debug-controller.cjs +22 -0
  26. package/dist/lib/cjs/debug-controller.d.cts +87 -0
  27. package/dist/lib/cjs/debug.cjs +204 -0
  28. package/dist/lib/cjs/debug.d.cts +66 -0
  29. package/dist/lib/cjs/desktop-zip-extractor.cjs +157 -0
  30. package/dist/lib/cjs/desktop-zip-extractor.d.cts +96 -0
  31. package/dist/lib/cjs/disposable.cjs +364 -0
  32. package/dist/lib/cjs/disposable.d.cts +387 -0
  33. package/dist/lib/cjs/enum.cjs +42 -0
  34. package/dist/lib/cjs/enum.d.cts +24 -0
  35. package/dist/lib/cjs/error.cjs +239 -0
  36. package/dist/lib/cjs/error.d.cts +182 -0
  37. package/dist/lib/cjs/function.cjs +83 -0
  38. package/dist/lib/cjs/function.d.cts +128 -0
  39. package/dist/lib/cjs/html-element.cjs +283 -0
  40. package/dist/lib/cjs/html-element.d.cts +200 -0
  41. package/dist/lib/cjs/index.cjs +137 -0
  42. package/dist/lib/cjs/index.d.cts +33 -0
  43. package/dist/lib/cjs/jpeg-metadata.cjs +170 -0
  44. package/dist/lib/cjs/jpeg-metadata.d.cts +42 -0
  45. package/dist/lib/cjs/library-references.d.cts +2 -0
  46. package/dist/lib/cjs/library.cjs +100 -0
  47. package/dist/lib/cjs/library.d.cts +96 -0
  48. package/dist/lib/cjs/object-utils.cjs +559 -0
  49. package/dist/lib/cjs/object-utils.d.cts +298 -0
  50. package/dist/lib/cjs/path.cjs +171 -0
  51. package/dist/lib/cjs/path.d.cts +155 -0
  52. package/dist/lib/cjs/reg-exp.cjs +196 -0
  53. package/dist/lib/cjs/reg-exp.d.cts +87 -0
  54. package/dist/lib/cjs/string.cjs +268 -0
  55. package/dist/lib/cjs/string.d.cts +362 -0
  56. package/dist/lib/cjs/transformers/date-transformer.cjs +71 -0
  57. package/dist/lib/cjs/transformers/date-transformer.d.cts +39 -0
  58. package/dist/lib/cjs/transformers/group-transformer.cjs +115 -0
  59. package/dist/lib/cjs/transformers/group-transformer.d.cts +70 -0
  60. package/dist/lib/cjs/transformers/index.cjs +65 -0
  61. package/dist/lib/cjs/transformers/index.d.cts +9 -0
  62. package/dist/lib/cjs/transformers/map-transformer.cjs +71 -0
  63. package/dist/lib/cjs/transformers/map-transformer.d.cts +41 -0
  64. package/dist/lib/cjs/transformers/set-transformer.cjs +71 -0
  65. package/dist/lib/cjs/transformers/set-transformer.d.cts +39 -0
  66. package/dist/lib/cjs/transformers/skip-private-property-transformer.cjs +69 -0
  67. package/dist/lib/cjs/transformers/skip-private-property-transformer.d.cts +36 -0
  68. package/dist/lib/cjs/transformers/transformer.cjs +112 -0
  69. package/dist/lib/cjs/transformers/transformer.d.cts +70 -0
  70. package/dist/lib/cjs/transformers/two-way-map-transformer.cjs +72 -0
  71. package/dist/lib/cjs/transformers/two-way-map-transformer.d.cts +42 -0
  72. package/dist/lib/cjs/transformers/typed-transformer.cjs +36 -0
  73. package/dist/lib/cjs/transformers/typed-transformer.d.cts +39 -0
  74. package/dist/lib/cjs/two-way-map.cjs +150 -0
  75. package/dist/lib/cjs/two-way-map.d.cts +101 -0
  76. package/dist/lib/cjs/type-guards.cjs +70 -0
  77. package/dist/lib/cjs/type-guards.d.cts +84 -0
  78. package/dist/lib/cjs/type.cjs +63 -0
  79. package/dist/lib/cjs/type.d.cts +122 -0
  80. package/dist/lib/cjs/typescript-lib-state.cjs +68 -0
  81. package/dist/lib/cjs/typescript-lib-state.d.cts +56 -0
  82. package/dist/lib/cjs/url.cjs +78 -0
  83. package/dist/lib/cjs/url.d.cts +74 -0
  84. package/dist/lib/cjs/value-provider.cjs +42 -0
  85. package/dist/lib/cjs/value-provider.d.cts +29 -0
  86. package/dist/lib/cjs/value-wrapper.cjs +86 -0
  87. package/dist/lib/cjs/value-wrapper.d.cts +47 -0
  88. package/dist/lib/esm/@types/debug.d.mts +21 -0
  89. package/dist/lib/esm/abort-controller.d.mts +136 -0
  90. package/dist/lib/esm/abort-controller.mjs +115 -0
  91. package/dist/lib/esm/aggregate-error.d.mts +24 -0
  92. package/dist/lib/esm/aggregate-error.mjs +16 -0
  93. package/dist/lib/esm/array-buffer.d.mts +16 -0
  94. package/dist/lib/esm/array-buffer.mjs +14 -0
  95. package/dist/lib/esm/array.d.mts +46 -0
  96. package/dist/lib/esm/array.mjs +49 -0
  97. package/dist/lib/esm/async-events.d.mts +456 -0
  98. package/dist/lib/esm/async-events.mjs +383 -0
  99. package/dist/lib/esm/async-operation-hook.d.mts +59 -0
  100. package/dist/lib/esm/async-operation-hook.mjs +27 -0
  101. package/dist/lib/esm/async.d.mts +415 -0
  102. package/dist/lib/esm/async.mjs +435 -0
  103. package/dist/lib/esm/beeper.d.mts +21 -0
  104. package/dist/lib/esm/beeper.mjs +44 -0
  105. package/dist/lib/esm/blob.d.mts +60 -0
  106. package/dist/lib/esm/blob.mjs +77 -0
  107. package/dist/lib/esm/bytes.d.mts +17 -0
  108. package/dist/lib/esm/bytes.mjs +32 -0
  109. package/dist/lib/esm/debug-controller.d.mts +87 -0
  110. package/dist/lib/esm/debug-controller.mjs +6 -0
  111. package/dist/lib/esm/debug.d.mts +66 -0
  112. package/dist/lib/esm/debug.mjs +168 -0
  113. package/dist/lib/esm/desktop-zip-extractor.d.mts +96 -0
  114. package/dist/lib/esm/desktop-zip-extractor.mjs +136 -0
  115. package/dist/lib/esm/disposable.d.mts +387 -0
  116. package/dist/lib/esm/disposable.mjs +324 -0
  117. package/dist/lib/esm/enum.d.mts +24 -0
  118. package/dist/lib/esm/enum.mjs +17 -0
  119. package/dist/lib/esm/error.d.mts +182 -0
  120. package/dist/lib/esm/error.mjs +204 -0
  121. package/dist/lib/esm/function.d.mts +128 -0
  122. package/dist/lib/esm/function.mjs +52 -0
  123. package/dist/lib/esm/html-element.d.mts +200 -0
  124. package/dist/lib/esm/html-element.mjs +247 -0
  125. package/dist/lib/esm/index.d.mts +33 -0
  126. package/dist/lib/esm/index.mjs +72 -0
  127. package/dist/lib/esm/jpeg-metadata.d.mts +42 -0
  128. package/dist/lib/esm/jpeg-metadata.mjs +145 -0
  129. package/dist/lib/esm/library-references.d.mts +2 -0
  130. package/dist/lib/esm/library.d.mts +96 -0
  131. package/dist/lib/esm/library.mjs +74 -0
  132. package/dist/lib/esm/object-utils.d.mts +298 -0
  133. package/dist/lib/esm/object-utils.mjs +523 -0
  134. package/dist/lib/esm/path.d.mts +155 -0
  135. package/dist/lib/esm/path.mjs +122 -0
  136. package/dist/lib/esm/reg-exp.d.mts +87 -0
  137. package/dist/lib/esm/reg-exp.mjs +169 -0
  138. package/dist/lib/esm/string.d.mts +362 -0
  139. package/dist/lib/esm/string.mjs +230 -0
  140. package/dist/lib/esm/transformers/date-transformer.d.mts +39 -0
  141. package/dist/lib/esm/transformers/date-transformer.mjs +47 -0
  142. package/dist/lib/esm/transformers/group-transformer.d.mts +70 -0
  143. package/dist/lib/esm/transformers/group-transformer.mjs +94 -0
  144. package/dist/lib/esm/transformers/index.d.mts +9 -0
  145. package/dist/lib/esm/transformers/index.mjs +24 -0
  146. package/dist/lib/esm/transformers/map-transformer.d.mts +41 -0
  147. package/dist/lib/esm/transformers/map-transformer.mjs +47 -0
  148. package/dist/lib/esm/transformers/set-transformer.d.mts +39 -0
  149. package/dist/lib/esm/transformers/set-transformer.mjs +47 -0
  150. package/dist/lib/esm/transformers/skip-private-property-transformer.d.mts +36 -0
  151. package/dist/lib/esm/transformers/skip-private-property-transformer.mjs +45 -0
  152. package/dist/lib/esm/transformers/transformer.d.mts +70 -0
  153. package/dist/lib/esm/transformers/transformer.mjs +88 -0
  154. package/dist/lib/esm/transformers/two-way-map-transformer.d.mts +42 -0
  155. package/dist/lib/esm/transformers/two-way-map-transformer.mjs +48 -0
  156. package/dist/lib/esm/transformers/typed-transformer.d.mts +39 -0
  157. package/dist/lib/esm/transformers/typed-transformer.mjs +12 -0
  158. package/dist/lib/esm/two-way-map.d.mts +101 -0
  159. package/dist/lib/esm/two-way-map.mjs +126 -0
  160. package/dist/lib/esm/type-guards.d.mts +84 -0
  161. package/dist/lib/esm/type-guards.mjs +41 -0
  162. package/dist/lib/esm/type.d.mts +122 -0
  163. package/dist/lib/esm/type.mjs +39 -0
  164. package/dist/lib/esm/typescript-lib-state.d.mts +56 -0
  165. package/dist/lib/esm/typescript-lib-state.mjs +40 -0
  166. package/dist/lib/esm/url.d.mts +74 -0
  167. package/dist/lib/esm/url.mjs +50 -0
  168. package/dist/lib/esm/value-provider.d.mts +29 -0
  169. package/dist/lib/esm/value-provider.mjs +18 -0
  170. package/dist/lib/esm/value-wrapper.d.mts +47 -0
  171. package/dist/lib/esm/value-wrapper.mjs +62 -0
  172. package/package.json +153 -13
  173. package/transformers/date-transformer/package.json +6 -0
  174. package/transformers/group-transformer/package.json +6 -0
  175. package/transformers/index/package.json +6 -0
  176. package/transformers/map-transformer/package.json +6 -0
  177. package/transformers/package.json +6 -0
  178. package/transformers/set-transformer/package.json +6 -0
  179. package/transformers/skip-private-property-transformer/package.json +6 -0
  180. package/transformers/transformer/package.json +6 -0
  181. package/transformers/two-way-map-transformer/package.json +6 -0
  182. package/transformers/typed-transformer/package.json +6 -0
@@ -0,0 +1,364 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
7
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
8
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
9
+ }
10
+
11
+ ensureDisposeSymbols();
12
+ })();
13
+
14
+ "use strict";
15
+ var __defProp = Object.defineProperty;
16
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
17
+ var __getOwnPropNames = Object.getOwnPropertyNames;
18
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, { get: all[name], enumerable: true });
22
+ };
23
+ var __copyProps = (to, from, except, desc) => {
24
+ if (from && typeof from === "object" || typeof from === "function") {
25
+ for (let key of __getOwnPropNames(from))
26
+ if (!__hasOwnProp.call(to, key) && key !== except)
27
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
28
+ }
29
+ return to;
30
+ };
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
+ var disposable_exports = {};
33
+ __export(disposable_exports, {
34
+ AsyncCallbackDisposable: () => AsyncCallbackDisposable,
35
+ AsyncDisposableBase: () => AsyncDisposableBase,
36
+ CallbackDisposable: () => CallbackDisposable,
37
+ CombineAsyncDisposable: () => CombineAsyncDisposable,
38
+ CombineDisposable: () => CombineDisposable,
39
+ DisposableBase: () => DisposableBase,
40
+ DisposeErrorBehavior: () => DisposeErrorBehavior,
41
+ DisposeOrder: () => DisposeOrder,
42
+ MultipleDisposeBehavior: () => MultipleDisposeBehavior,
43
+ dispose: () => dispose,
44
+ disposeAsync: () => disposeAsync,
45
+ isAsyncDisposable: () => isAsyncDisposable,
46
+ isAsyncDisposableEx: () => isAsyncDisposableEx,
47
+ isDisposable: () => isDisposable,
48
+ isDisposableEx: () => isDisposableEx,
49
+ toAsyncDisposableEx: () => toAsyncDisposableEx,
50
+ toDisposableEx: () => toDisposableEx
51
+ });
52
+ module.exports = __toCommonJS(disposable_exports);
53
+ var import_aggregate_error = require('./aggregate-error.cjs');
54
+ var import_type_guards = require('./type-guards.cjs');
55
+ var DisposeErrorBehavior = /* @__PURE__ */ ((DisposeErrorBehavior2) => {
56
+ DisposeErrorBehavior2[DisposeErrorBehavior2["Aggregate"] = 0] = "Aggregate";
57
+ DisposeErrorBehavior2[DisposeErrorBehavior2["FailFast"] = 1] = "FailFast";
58
+ return DisposeErrorBehavior2;
59
+ })(DisposeErrorBehavior || {});
60
+ var DisposeOrder = /* @__PURE__ */ ((DisposeOrder2) => {
61
+ DisposeOrder2[DisposeOrder2["Lifo"] = 0] = "Lifo";
62
+ DisposeOrder2[DisposeOrder2["Fifo"] = 1] = "Fifo";
63
+ return DisposeOrder2;
64
+ })(DisposeOrder || {});
65
+ var MultipleDisposeBehavior = /* @__PURE__ */ ((MultipleDisposeBehavior2) => {
66
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Invoke"] = 0] = "Invoke";
67
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Ignore"] = 1] = "Ignore";
68
+ MultipleDisposeBehavior2[MultipleDisposeBehavior2["Throw"] = 2] = "Throw";
69
+ return MultipleDisposeBehavior2;
70
+ })(MultipleDisposeBehavior || {});
71
+ class AsyncDisposableBase {
72
+ /**
73
+ * How the disposable behaves when disposed more than once.
74
+ *
75
+ * @default {@link MultipleDisposeBehavior.Ignore}
76
+ */
77
+ multipleDisposeBehavior = 1 /* Ignore */;
78
+ /**
79
+ * Whether this disposable has been disposed (its teardown has run at least once).
80
+ *
81
+ * @returns `true` once disposal has started.
82
+ */
83
+ get isDisposed() {
84
+ return this._isDisposed;
85
+ }
86
+ _isDisposed = false;
87
+ /**
88
+ * Disposes the object. Convenience alias that delegates to `this[Symbol.asyncDispose]()`.
89
+ *
90
+ * @returns A {@link Promise} that resolves once teardown completes.
91
+ */
92
+ asyncDispose() {
93
+ return this[Symbol.asyncDispose]();
94
+ }
95
+ /**
96
+ * Disposes the object by running {@link AsyncDisposableBase.performDisposeAsync}, honoring the configured
97
+ * {@link MultipleDisposeBehavior} on a repeat dispose.
98
+ *
99
+ * @returns A {@link Promise} that resolves once teardown completes.
100
+ */
101
+ async [Symbol.asyncDispose]() {
102
+ if (!shouldPerformDispose(this._isDisposed, this.multipleDisposeBehavior)) {
103
+ return;
104
+ }
105
+ this._isDisposed = true;
106
+ await this.performDisposeAsync();
107
+ }
108
+ }
109
+ class AsyncCallbackDisposable extends AsyncDisposableBase {
110
+ callback;
111
+ /**
112
+ * Creates a new instance of {@link AsyncCallbackDisposable}.
113
+ *
114
+ * @param params - The parameters.
115
+ */
116
+ constructor(params) {
117
+ super();
118
+ this.callback = params.callback;
119
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
120
+ }
121
+ /**
122
+ * Runs the dispose callback.
123
+ *
124
+ * @returns A {@link Promise} that resolves once the callback completes.
125
+ */
126
+ async performDisposeAsync() {
127
+ await this.callback();
128
+ }
129
+ }
130
+ function dispose(disposable) {
131
+ disposable[Symbol.dispose]();
132
+ }
133
+ class DisposableBase {
134
+ /**
135
+ * How the disposable behaves when disposed more than once.
136
+ *
137
+ * @default {@link MultipleDisposeBehavior.Ignore}
138
+ */
139
+ multipleDisposeBehavior = 1 /* Ignore */;
140
+ /**
141
+ * Whether this disposable has been disposed (its teardown has run at least once).
142
+ *
143
+ * @returns `true` once disposal has started.
144
+ */
145
+ get isDisposed() {
146
+ return this._isDisposed;
147
+ }
148
+ _isDisposed = false;
149
+ /**
150
+ * Disposes the object. Convenience alias that delegates to `this[Symbol.dispose]()`.
151
+ */
152
+ dispose() {
153
+ this[Symbol.dispose]();
154
+ }
155
+ /**
156
+ * Disposes the object by running {@link DisposableBase.performDispose}, honoring the configured
157
+ * {@link MultipleDisposeBehavior} on a repeat dispose.
158
+ */
159
+ [Symbol.dispose]() {
160
+ if (!shouldPerformDispose(this._isDisposed, this.multipleDisposeBehavior)) {
161
+ return;
162
+ }
163
+ this._isDisposed = true;
164
+ this.performDispose();
165
+ }
166
+ }
167
+ class CallbackDisposable extends DisposableBase {
168
+ callback;
169
+ /**
170
+ * Creates a new instance of {@link CallbackDisposable}.
171
+ *
172
+ * @param params - The parameters.
173
+ */
174
+ constructor(params) {
175
+ super();
176
+ this.callback = params.callback;
177
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
178
+ }
179
+ /**
180
+ * Runs the dispose callback.
181
+ */
182
+ performDispose() {
183
+ this.callback();
184
+ }
185
+ }
186
+ class CombineAsyncDisposable extends AsyncDisposableBase {
187
+ children;
188
+ disposeOrder;
189
+ errorBehavior;
190
+ /**
191
+ * Creates a new instance of {@link CombineAsyncDisposable}.
192
+ *
193
+ * @param params - The parameters.
194
+ */
195
+ constructor(params) {
196
+ super();
197
+ this.children = [...params.asyncDisposables];
198
+ this.disposeOrder = params.disposeOrder ?? 0 /* Lifo */;
199
+ this.errorBehavior = params.errorBehavior ?? 0 /* Aggregate */;
200
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
201
+ }
202
+ /**
203
+ * Disposes all combined children in the configured {@link DisposeOrder}, applying the configured
204
+ * {@link DisposeErrorBehavior} when a child throws.
205
+ *
206
+ * @returns A {@link Promise} that resolves once all children have been disposed.
207
+ */
208
+ async performDisposeAsync() {
209
+ const errors = [];
210
+ for (const child of this.getOrderedChildren()) {
211
+ try {
212
+ await child[Symbol.asyncDispose]();
213
+ } catch (error) {
214
+ if (this.errorBehavior === 1 /* FailFast */) {
215
+ throw error;
216
+ }
217
+ errors.push(error);
218
+ }
219
+ }
220
+ if (errors.length > 0) {
221
+ throw (0, import_aggregate_error.createAggregateError)(errors);
222
+ }
223
+ }
224
+ getOrderedChildren() {
225
+ switch (this.disposeOrder) {
226
+ case 1 /* Fifo */: {
227
+ return this.children;
228
+ }
229
+ case 0 /* Lifo */: {
230
+ return [...this.children].reverse();
231
+ }
232
+ default: {
233
+ (0, import_type_guards.assertNever)(this.disposeOrder);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ class CombineDisposable extends DisposableBase {
239
+ children;
240
+ disposeOrder;
241
+ errorBehavior;
242
+ /**
243
+ * Creates a new instance of {@link CombineDisposable}.
244
+ *
245
+ * @param params - The parameters.
246
+ */
247
+ constructor(params) {
248
+ super();
249
+ this.children = [...params.disposables];
250
+ this.disposeOrder = params.disposeOrder ?? 0 /* Lifo */;
251
+ this.errorBehavior = params.errorBehavior ?? 0 /* Aggregate */;
252
+ this.multipleDisposeBehavior = params.multipleDisposeBehavior ?? 1 /* Ignore */;
253
+ }
254
+ /**
255
+ * Disposes all combined children in the configured {@link DisposeOrder}, applying the configured
256
+ * {@link DisposeErrorBehavior} when a child throws.
257
+ */
258
+ performDispose() {
259
+ const errors = [];
260
+ for (const child of this.getOrderedChildren()) {
261
+ try {
262
+ child[Symbol.dispose]();
263
+ } catch (error) {
264
+ if (this.errorBehavior === 1 /* FailFast */) {
265
+ throw error;
266
+ }
267
+ errors.push(error);
268
+ }
269
+ }
270
+ if (errors.length > 0) {
271
+ throw (0, import_aggregate_error.createAggregateError)(errors);
272
+ }
273
+ }
274
+ getOrderedChildren() {
275
+ switch (this.disposeOrder) {
276
+ case 1 /* Fifo */: {
277
+ return this.children;
278
+ }
279
+ case 0 /* Lifo */: {
280
+ return [...this.children].reverse();
281
+ }
282
+ default: {
283
+ (0, import_type_guards.assertNever)(this.disposeOrder);
284
+ }
285
+ }
286
+ }
287
+ }
288
+ async function disposeAsync(asyncDisposable) {
289
+ await asyncDisposable[Symbol.asyncDispose]();
290
+ }
291
+ function isAsyncDisposable($unknown) {
292
+ const asyncDisposable = $unknown;
293
+ return !!asyncDisposable[Symbol.asyncDispose];
294
+ }
295
+ function isAsyncDisposableEx($unknown) {
296
+ const asyncDisposableEx = $unknown;
297
+ return isAsyncDisposable($unknown) && typeof asyncDisposableEx.asyncDispose === "function";
298
+ }
299
+ function isDisposable($unknown) {
300
+ const disposable = $unknown;
301
+ return !!disposable[Symbol.dispose];
302
+ }
303
+ function isDisposableEx($unknown) {
304
+ const disposableEx = $unknown;
305
+ return isDisposable($unknown) && typeof disposableEx.dispose === "function";
306
+ }
307
+ function toAsyncDisposableEx(asyncDisposable) {
308
+ return isAsyncDisposableEx(asyncDisposable) ? asyncDisposable : {
309
+ asyncDispose: asyncDisposeAdapted,
310
+ [Symbol.asyncDispose]: asyncDisposeAdapted
311
+ };
312
+ function asyncDisposeAdapted() {
313
+ return disposeAsync(asyncDisposable);
314
+ }
315
+ }
316
+ function toDisposableEx(disposable) {
317
+ return isDisposableEx(disposable) ? disposable : {
318
+ dispose: disposeAdapted,
319
+ [Symbol.dispose]: disposeAdapted
320
+ };
321
+ function disposeAdapted() {
322
+ dispose(disposable);
323
+ }
324
+ }
325
+ function shouldPerformDispose(isDisposed, multipleDisposeBehavior) {
326
+ if (!isDisposed) {
327
+ return true;
328
+ }
329
+ switch (multipleDisposeBehavior) {
330
+ case 1 /* Ignore */: {
331
+ return false;
332
+ }
333
+ case 0 /* Invoke */: {
334
+ return true;
335
+ }
336
+ case 2 /* Throw */: {
337
+ throw new Error("This disposable has already been disposed.");
338
+ }
339
+ default: {
340
+ (0, import_type_guards.assertNever)(multipleDisposeBehavior);
341
+ }
342
+ }
343
+ }
344
+ // Annotate the CommonJS export names for ESM import in node:
345
+ 0 && (module.exports = {
346
+ AsyncCallbackDisposable,
347
+ AsyncDisposableBase,
348
+ CallbackDisposable,
349
+ CombineAsyncDisposable,
350
+ CombineDisposable,
351
+ DisposableBase,
352
+ DisposeErrorBehavior,
353
+ DisposeOrder,
354
+ MultipleDisposeBehavior,
355
+ dispose,
356
+ disposeAsync,
357
+ isAsyncDisposable,
358
+ isAsyncDisposableEx,
359
+ isDisposable,
360
+ isDisposableEx,
361
+ toAsyncDisposableEx,
362
+ toDisposableEx
363
+ });
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kaXNwb3NhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBEaXNwb3NhYmxlIHV0aWxpdGllcyBmb3IgYHVzaW5nYCAvIGBhd2FpdCB1c2luZ2AgZGVjbGFyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yIH0gZnJvbSAnLi9hZ2dyZWdhdGUtZXJyb3IudHMnO1xuaW1wb3J0IHsgYXNzZXJ0TmV2ZXIgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBlcnJvciBzZW1hbnRpY3Mgb2YgYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSB3aGVuXG4gKiBvbmUgb2YgaXRzIGNoaWxkcmVuIHRocm93cyB3aGlsZSBiZWluZyBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGVudW0gRGlzcG9zZUVycm9yQmVoYXZpb3Ige1xuICAvKipcbiAgICogRGlzcG9zZSBldmVyeSBjaGlsZCBldmVuIGlmIHNvbWUgb2YgdGhlbSB0aHJvdywgY29sbGVjdGluZyB0aGUgdGhyb3duIGVycm9ycyBhbmQgcmUtdGhyb3dpbmcgdGhlbVxuICAgKiBhcyBhIHNpbmdsZSB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIEFnZ3JlZ2F0ZSxcblxuICAvKipcbiAgICogUmUtdGhyb3cgdGhlIGZpcnN0IGVycm9yIGEgY2hpbGQgdGhyb3dzIGltbWVkaWF0ZWx5LCBsZWF2aW5nIHRoZSByZW1haW5pbmcgY2hpbGRyZW4gdW5kaXNwb3NlZC5cbiAgICovXG4gIEZhaWxGYXN0XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB0aGUgb3JkZXIgaW4gd2hpY2ggYSB7QGxpbmsgQ29tYmluZURpc3Bvc2FibGV9IG9yIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfSBkaXNwb3Nlc1xuICogaXRzIGNoaWxkcmVuLlxuICovXG5leHBvcnQgZW51bSBEaXNwb3NlT3JkZXIge1xuICAvKipcbiAgICogRGlzcG9zZSB0aGUgbGFzdC1yZWdpc3RlcmVkIGNoaWxkIGZpcnN0IChsYXN0LWluLCBmaXJzdC1vdXQpLCBsaWtlIG5lc3RlZCBgdXNpbmdgIGRlY2xhcmF0aW9uc1xuICAgKiB1bndpbmRpbmcgaW4gcmV2ZXJzZS5cbiAgICovXG4gIExpZm8sXG5cbiAgLyoqXG4gICAqIERpc3Bvc2UgdGhlIGZpcnN0LXJlZ2lzdGVyZWQgY2hpbGQgZmlyc3QgKGZpcnN0LWluLCBmaXJzdC1vdXQpLlxuICAgKi9cbiAgRmlmb1xufVxuXG4vKipcbiAqIERldGVybWluZXMgaG93IGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gb3Ige0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfSBiZWhhdmVzIHdoZW4gaXQgaXNcbiAqIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICovXG5leHBvcnQgZW51bSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvciB7XG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIGV2ZXJ5IGRpc3Bvc2UuXG4gICAqL1xuICBJbnZva2UsXG5cbiAgLyoqXG4gICAqIEludm9rZSB0aGUgY2FsbGJhY2sgb24gdGhlIGZpcnN0IGRpc3Bvc2Ugb25seTsgc3Vic2VxdWVudCBkaXNwb3NlcyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgSWdub3JlLFxuXG4gIC8qKlxuICAgKiBJbnZva2UgdGhlIGNhbGxiYWNrIG9uIHRoZSBmaXJzdCBkaXNwb3NlIG9ubHk7IHN1YnNlcXVlbnQgZGlzcG9zZXMgdGhyb3cuXG4gICAqL1xuICBUaHJvd1xufVxuXG4vKipcbiAqIFRoZSBwYXJhbWV0ZXJzIGZvciBjb25zdHJ1Y3RpbmcgYW4ge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBc3luY0NhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICByZWFkb25seSBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcj86IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yO1xufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IHRoYXQgYWRkaXRpb25hbGx5IGV4cG9zZXMgYSBjb252ZW5pZW5jZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXguYXN5bmNEaXNwb3NlfVxuICogbWV0aG9kLCBzbyBhIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuYXN5bmNEaXNwb3NlKClgIGluc3RlYWQgb2YgdGhlIGNsdW5raWVyXG4gKiBgaGFuZGxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jRGlzcG9zYWJsZUV4IGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpYC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAgICovXG4gIGFzeW5jRGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIGNhbGxiYWNrIGludm9rZWQgd2hlbiBhbiB7QGxpbmsgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGV9IGlzIGRpc3Bvc2VkLlxuICovXG5leHBvcnQgdHlwZSBBc3luY0Rpc3Bvc2VDYWxsYmFjayA9ICgpID0+IFByb21pc2FibGU8dm9pZD47XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENhbGxiYWNrRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIHdoZW4gZGlzcG9zZWQuXG4gICAqL1xuICByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGRpc3Bvc2FibGUgYmVoYXZlcyB3aGVuIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgY29uc3RydWN0aW5nIGEge0BsaW5rIENvbWJpbmVBc3luY0Rpc3Bvc2FibGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbWJpbmVBc3luY0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYXN5bmMgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRGlzcG9zYWJsZXM6IEl0ZXJhYmxlPEFzeW5jRGlzcG9zYWJsZT47XG5cbiAgLyoqXG4gICAqIFRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGRyZW4gYXJlIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZU9yZGVyLkxpZm99XG4gICAqL1xuICByZWFkb25seSBkaXNwb3NlT3JkZXI/OiBEaXNwb3NlT3JkZXI7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIG9uZSBvZiBpdHMgY2hpbGRyZW4gdGhyb3dzIHdoaWxlIGJlaW5nIGRpc3Bvc2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlfVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcj86IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBIb3cgdGhlIGNvbWJpbmVyIGJlaGF2ZXMgd2hlbiBpdCBpcyBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHJlYWRvbmx5IG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yPzogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I7XG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlcnMgZm9yIGNvbnN0cnVjdGluZyBhIHtAbGluayBDb21iaW5lRGlzcG9zYWJsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzcG9zYWJsZXMgdG8gZGlzcG9zZSB3aGVuIHRoZSBjb21iaW5lciBpcyBkaXNwb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2FibGVzOiBJdGVyYWJsZTxEaXNwb3NhYmxlPjtcblxuICAvKipcbiAgICogVGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZHJlbiBhcmUgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlT3JkZXIuTGlmb31cbiAgICovXG4gIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcj86IERpc3Bvc2VPcmRlcjtcblxuICAvKipcbiAgICogSG93IHRoZSBjb21iaW5lciBiZWhhdmVzIHdoZW4gb25lIG9mIGl0cyBjaGlsZHJlbiB0aHJvd3Mgd2hpbGUgYmVpbmcgZGlzcG9zZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGV9XG4gICAqL1xuICByZWFkb25seSBlcnJvckJlaGF2aW9yPzogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIEhvdyB0aGUgY29tYmluZXIgYmVoYXZlcyB3aGVuIGl0IGlzIGRpc3Bvc2VkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlfVxuICAgKi9cbiAgcmVhZG9ubHkgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I/OiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IGFkZGl0aW9uYWxseSBleHBvc2VzIGEgY29udmVuaWVuY2Uge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QsIHNvIGFcbiAqIHN0b3JlZCBoYW5kbGUgY2FuIGJlIGRpc3Bvc2VkIGFzIGBoYW5kbGUuZGlzcG9zZSgpYCBpbnN0ZWFkIG9mIHRoZSBjbHVua2llciBgaGFuZGxlW1N5bWJvbC5kaXNwb3NlXSgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwb3NhYmxlRXggZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIERlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBkaXNwb3NlOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEEgY2FsbGJhY2sgaW52b2tlZCB3aGVuIGEge0BsaW5rIENhbGxiYWNrRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERpc3Bvc2VDYWxsYmFjayA9ICgpID0+IHZvaWQ7XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBmb3IgYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fTogaXQgY2FycmllcyB0aGUgcmUtZGlzcG9zZSBndWFyZCAodmlhXG4gKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9KSBhbmQgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeC5hc3luY0Rpc3Bvc2V9IGFsaWFzOyBhIHN1YmNsYXNzIG9ubHlcbiAqIGltcGxlbWVudHMge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2VBc3luY30uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBc3luY0Rpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgQXN5bmNEaXNwb3NhYmxlRXgge1xuICAvKipcbiAgICogSG93IHRoZSBkaXNwb3NhYmxlIGJlaGF2ZXMgd2hlbiBkaXNwb3NlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZX1cbiAgICovXG4gIHByb3RlY3RlZCBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBkaXNwb3NhYmxlIGhhcyBiZWVuIGRpc3Bvc2VkIChpdHMgdGVhcmRvd24gaGFzIHJ1biBhdCBsZWFzdCBvbmNlKS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIG9uY2UgZGlzcG9zYWwgaGFzIHN0YXJ0ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0IGlzRGlzcG9zZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzRGlzcG9zZWQ7XG4gIH1cblxuICBwcml2YXRlIF9pc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QuIENvbnZlbmllbmNlIGFsaWFzIHRoYXQgZGVsZWdhdGVzIHRvIGB0aGlzW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jRGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpc1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlQmFzZS5wZXJmb3JtRGlzcG9zZUFzeW5jfSwgaG9ub3JpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSBvbiBhIHJlcGVhdCBkaXNwb3NlLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgYXdhaXQgdGhpcy5wZXJmb3JtRGlzcG9zZUFzeW5jKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCB0ZWFyZG93bi4gQ2FsbGVkIGF0IG1vc3Qgb25jZSB1bmxlc3Mge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZX0gaXMgc2V0LlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNhYmxlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGVhcmRvd24gY29tcGxldGVzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBlcmZvcm1EaXNwb3NlQXN5bmMoKTogUHJvbWlzYWJsZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBkaXNwb3NhYmxlIHRoYXQgZXhlY3V0ZXMgYSBjYWxsYmFjayB3aGVuIGRpc3Bvc2VkIHZpYSBgYXdhaXQgdXNpbmdgIChvciBhIG1hbnVhbFxuICogYGF3YWl0IGRpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKWApLlxuICovXG5leHBvcnQgY2xhc3MgQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGUgZXh0ZW5kcyBBc3luY0Rpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogQXN5bmNEaXNwb3NlQ2FsbGJhY2s7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIEFzeW5jQ2FsbGJhY2tEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQXN5bmNDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGNhbGxiYWNrIGNvbXBsZXRlcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGEge0BsaW5rIERpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKWAgYXQgdGhlIGNhbGwgc2l0ZTogaXQgcmVhZHMgYmV0dGVyIGFuZCBrZWVwcyB0aGVcbiAqIHdlbGwta25vd24gc3ltYm9sIHJlZmVyZW5jZWQgaW4gYSBzaW5nbGUgcGxhY2UuXG4gKlxuICogQHBhcmFtIGRpc3Bvc2FibGUgLSB0aGUgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXNwb3NlKGRpc3Bvc2FibGU6IERpc3Bvc2FibGUpOiB2b2lkIHtcbiAgZGlzcG9zYWJsZVtTeW1ib2wuZGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGZvciBhIHtAbGluayBEaXNwb3NhYmxlRXh9OiBpdCBjYXJyaWVzIHRoZSByZS1kaXNwb3NlIGd1YXJkICh2aWEge0BsaW5rIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yfSlcbiAqIGFuZCB0aGUge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBhbGlhczsgYSBzdWJjbGFzcyBvbmx5IGltcGxlbWVudHMge0BsaW5rIERpc3Bvc2FibGVCYXNlLnBlcmZvcm1EaXNwb3NlfS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERpc3Bvc2FibGVCYXNlIGltcGxlbWVudHMgRGlzcG9zYWJsZUV4IHtcbiAgLyoqXG4gICAqIEhvdyB0aGUgZGlzcG9zYWJsZSBiZWhhdmVzIHdoZW4gZGlzcG9zZWQgbW9yZSB0aGFuIG9uY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmV9XG4gICAqL1xuICBwcm90ZWN0ZWQgbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3I6IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZGlzcG9zYWJsZSBoYXMgYmVlbiBkaXNwb3NlZCAoaXRzIHRlYXJkb3duIGhhcyBydW4gYXQgbGVhc3Qgb25jZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBvbmNlIGRpc3Bvc2FsIGhhcyBzdGFydGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBpc0Rpc3Bvc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pc0Rpc3Bvc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgb2JqZWN0LiBDb252ZW5pZW5jZSBhbGlhcyB0aGF0IGRlbGVnYXRlcyB0byBgdGhpc1tTeW1ib2wuZGlzcG9zZV0oKWAuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzW1N5bWJvbC5kaXNwb3NlXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBvYmplY3QgYnkgcnVubmluZyB7QGxpbmsgRGlzcG9zYWJsZUJhc2UucGVyZm9ybURpc3Bvc2V9LCBob25vcmluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3J9IG9uIGEgcmVwZWF0IGRpc3Bvc2UuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICBpZiAoIXNob3VsZFBlcmZvcm1EaXNwb3NlKHRoaXMuX2lzRGlzcG9zZWQsIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faXNEaXNwb3NlZCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtRGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIHRoZSBhY3R1YWwgdGVhcmRvd24uIENhbGxlZCBhdCBtb3N0IG9uY2UgdW5sZXNzIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JbnZva2V9IGlzIHNldC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwZXJmb3JtRGlzcG9zZSgpOiB2b2lkO1xufVxuXG4vKipcbiAqIEEgZGlzcG9zYWJsZSB0aGF0IGV4ZWN1dGVzIGEgY2FsbGJhY2sgd2hlbiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENhbGxiYWNrRGlzcG9zYWJsZSBleHRlbmRzIERpc3Bvc2FibGVCYXNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYWxsYmFjazogRGlzcG9zZUNhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDYWxsYmFja0Rpc3Bvc2FibGV9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDYWxsYmFja0Rpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jYWxsYmFjayA9IHBhcmFtcy5jYWxsYmFjaztcbiAgICB0aGlzLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID0gcGFyYW1zLm11bHRpcGxlRGlzcG9zZUJlaGF2aW9yID8/IE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHRoZSBkaXNwb3NlIGNhbGxiYWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHBlcmZvcm1EaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gdGhhdCBjb21iaW5lcyBtdWx0aXBsZSBhc3luYyBkaXNwb3NhYmxlcyBhbmQgZGlzcG9zZXMgYWxsIG9mIHRoZW0gd2hlbiBpdFxuICogaXMgZGlzcG9zZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb21iaW5lQXN5bmNEaXNwb3NhYmxlIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlQmFzZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hpbGRyZW46IHJlYWRvbmx5IEFzeW5jRGlzcG9zYWJsZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGRpc3Bvc2VPcmRlcjogRGlzcG9zZU9yZGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yQmVoYXZpb3I6IERpc3Bvc2VFcnJvckJlaGF2aW9yO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHtAbGluayBDb21iaW5lQXN5bmNEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZUFzeW5jRGlzcG9zYWJsZUNvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gWy4uLnBhcmFtcy5hc3luY0Rpc3Bvc2FibGVzXTtcbiAgICB0aGlzLmRpc3Bvc2VPcmRlciA9IHBhcmFtcy5kaXNwb3NlT3JkZXIgPz8gRGlzcG9zZU9yZGVyLkxpZm87XG4gICAgdGhpcy5lcnJvckJlaGF2aW9yID0gcGFyYW1zLmVycm9yQmVoYXZpb3IgPz8gRGlzcG9zZUVycm9yQmVoYXZpb3IuQWdncmVnYXRlO1xuICAgIHRoaXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPSBwYXJhbXMubXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgPz8gTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIGFsbCBjb21iaW5lZCBjaGlsZHJlbiBpbiB0aGUgY29uZmlndXJlZCB7QGxpbmsgRGlzcG9zZU9yZGVyfSwgYXBwbHlpbmcgdGhlIGNvbmZpZ3VyZWRcbiAgICoge0BsaW5rIERpc3Bvc2VFcnJvckJlaGF2aW9yfSB3aGVuIGEgY2hpbGQgdGhyb3dzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgYWxsIGNoaWxkcmVuIGhhdmUgYmVlbiBkaXNwb3NlZC5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBwZXJmb3JtRGlzcG9zZUFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGVycm9yczogdW5rbm93bltdID0gW107XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmdldE9yZGVyZWRDaGlsZHJlbigpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjaGlsZFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgQXN5bmNEaXNwb3NhYmxlW10ge1xuICAgIHN3aXRjaCAodGhpcy5kaXNwb3NlT3JkZXIpIHtcbiAgICAgIGNhc2UgRGlzcG9zZU9yZGVyLkZpZm86IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgICB9XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5MaWZvOiB7XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5jaGlsZHJlbl0ucmV2ZXJzZSgpO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBhc3NlcnROZXZlcih0aGlzLmRpc3Bvc2VPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IGNvbWJpbmVzIG11bHRpcGxlIGRpc3Bvc2FibGVzIGFuZCBkaXNwb3NlcyBhbGwgb2YgdGhlbSB3aGVuIGl0IGlzXG4gKiBkaXNwb3NlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbWJpbmVEaXNwb3NhYmxlIGV4dGVuZHMgRGlzcG9zYWJsZUJhc2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuOiByZWFkb25seSBEaXNwb3NhYmxlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcG9zZU9yZGVyOiBEaXNwb3NlT3JkZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JCZWhhdmlvcjogRGlzcG9zZUVycm9yQmVoYXZpb3I7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbWJpbmVEaXNwb3NhYmxlfS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ29tYmluZURpc3Bvc2FibGVDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5wYXJhbXMuZGlzcG9zYWJsZXNdO1xuICAgIHRoaXMuZGlzcG9zZU9yZGVyID0gcGFyYW1zLmRpc3Bvc2VPcmRlciA/PyBEaXNwb3NlT3JkZXIuTGlmbztcbiAgICB0aGlzLmVycm9yQmVoYXZpb3IgPSBwYXJhbXMuZXJyb3JCZWhhdmlvciA/PyBEaXNwb3NlRXJyb3JCZWhhdmlvci5BZ2dyZWdhdGU7XG4gICAgdGhpcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA9IHBhcmFtcy5tdWx0aXBsZURpc3Bvc2VCZWhhdmlvciA/PyBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmU7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgYWxsIGNvbWJpbmVkIGNoaWxkcmVuIGluIHRoZSBjb25maWd1cmVkIHtAbGluayBEaXNwb3NlT3JkZXJ9LCBhcHBseWluZyB0aGUgY29uZmlndXJlZFxuICAgKiB7QGxpbmsgRGlzcG9zZUVycm9yQmVoYXZpb3J9IHdoZW4gYSBjaGlsZCB0aHJvd3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGVyZm9ybURpc3Bvc2UoKTogdm9pZCB7XG4gICAgY29uc3QgZXJyb3JzOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuZ2V0T3JkZXJlZENoaWxkcmVuKCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkW1N5bWJvbC5kaXNwb3NlXSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JCZWhhdmlvciA9PT0gRGlzcG9zZUVycm9yQmVoYXZpb3IuRmFpbEZhc3QpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPcmRlcmVkQ2hpbGRyZW4oKTogcmVhZG9ubHkgRGlzcG9zYWJsZVtdIHtcbiAgICBzd2l0Y2ggKHRoaXMuZGlzcG9zZU9yZGVyKSB7XG4gICAgICBjYXNlIERpc3Bvc2VPcmRlci5GaWZvOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xuICAgICAgfVxuICAgICAgY2FzZSBEaXNwb3NlT3JkZXIuTGlmbzoge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuY2hpbGRyZW5dLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgYXNzZXJ0TmV2ZXIodGhpcy5kaXNwb3NlT3JkZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIERpc3Bvc2VzIGFuIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9LlxuICpcbiAqIFByZWZlciB0aGlzIG92ZXIgY2FsbGluZyBgYXN5bmNEaXNwb3NhYmxlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKClgIGF0IHRoZSBjYWxsIHNpdGU6IGl0IHJlYWRzIGJldHRlciBhbmRcbiAqIGtlZXBzIHRoZSB3ZWxsLWtub3duIHN5bWJvbCByZWZlcmVuY2VkIGluIGEgc2luZ2xlIHBsYWNlLlxuICpcbiAqIEBwYXJhbSBhc3luY0Rpc3Bvc2FibGUgLSB0aGUgYXN5bmMgZGlzcG9zYWJsZSB0byBkaXNwb3NlXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlfSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICogQHJldHVybnMgV2hldGhlciB0aGUgb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Rpc3Bvc2FibGUoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGUge1xuICBjb25zdCBhc3luY0Rpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPEFzeW5jRGlzcG9zYWJsZT47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWNvbXB1dGVkLXByb3BlcnR5LWV4aXN0ZW5jZS1jaGVjayAtLSBgT2JqZWN0Lmhhc093bmAgaXMgb3duLXByb3BlcnR5LW9ubHksIGFuZCBgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdYCBpcyBhIHByb3RvdHlwZSBtZXRob2Qgb24gZXZlcnkgY2xhc3MtYmFzZWQgZGlzcG9zYWJsZSBoZXJlLlxuICByZXR1cm4gISFhc3luY0Rpc3Bvc2FibGVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2UuXG4gKlxuICogQHBhcmFtICR1bmtub3duIC0gdGhlIG9iamVjdCB0byBjaGVjayBmb3IgdGhlIHtAbGluayBBc3luY0Rpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXN5bmNEaXNwb3NhYmxlRXgoJHVua25vd246IHVua25vd24pOiAkdW5rbm93biBpcyBBc3luY0Rpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGFzeW5jRGlzcG9zYWJsZUV4ID0gJHVua25vd24gYXMgUGFydGlhbDxBc3luY0Rpc3Bvc2FibGVFeD47XG4gIHJldHVybiBpc0FzeW5jRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGFuIG9iamVjdCBpbXBsZW1lbnRzIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlLlxuICpcbiAqIEBwYXJhbSAkdW5rbm93biAtIHRoZSBvYmplY3QgdG8gY2hlY2sgZm9yIHRoZSB7QGxpbmsgRGlzcG9zYWJsZX0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGV9IGludGVyZmFjZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEaXNwb3NhYmxlKCR1bmtub3duOiB1bmtub3duKTogJHVua25vd24gaXMgRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGRpc3Bvc2FibGUgPSAkdW5rbm93biBhcyBQYXJ0aWFsPERpc3Bvc2FibGU+O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1jb21wdXRlZC1wcm9wZXJ0eS1leGlzdGVuY2UtY2hlY2sgLS0gYE9iamVjdC5oYXNPd25gIGlzIG93bi1wcm9wZXJ0eS1vbmx5LCBhbmQgYFtTeW1ib2wuZGlzcG9zZV1gIGlzIGEgcHJvdG90eXBlIG1ldGhvZCBvbiBldmVyeSBjbGFzcy1iYXNlZCBkaXNwb3NhYmxlIGhlcmUuXG4gIHJldHVybiAhIWRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGltcGxlbWVudHMgdGhlIHtAbGluayBEaXNwb3NhYmxlRXh9IGludGVyZmFjZS5cbiAqXG4gKiBAcGFyYW0gJHVua25vd24gLSB0aGUgb2JqZWN0IHRvIGNoZWNrIGZvciB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBvYmplY3QgaW1wbGVtZW50cyB0aGUge0BsaW5rIERpc3Bvc2FibGVFeH0gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Rpc3Bvc2FibGVFeCgkdW5rbm93bjogdW5rbm93bik6ICR1bmtub3duIGlzIERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGRpc3Bvc2FibGVFeCA9ICR1bmtub3duIGFzIFBhcnRpYWw8RGlzcG9zYWJsZUV4PjtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZSgkdW5rbm93bikgJiYgdHlwZW9mIGRpc3Bvc2FibGVFeC5kaXNwb3NlID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEFkYXB0cyBhIHBsYWluIHtAbGluayBBc3luY0Rpc3Bvc2FibGV9IGludG8gYW4ge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUV4LmFzeW5jRGlzcG9zZX0gbWV0aG9kIHRoYXQgZGVsZWdhdGVzIHRvIGBTeW1ib2wuYXN5bmNEaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9LCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIGFzeW5jRGlzcG9zYWJsZSAtIHRoZSBhc3luYyBkaXNwb3NhYmxlIHRvIGFkYXB0XG4gKiBAcmV0dXJucyBBbiB7QGxpbmsgQXN5bmNEaXNwb3NhYmxlRXh9IHdyYXBwaW5nIHRoZSBhc3luYyBkaXNwb3NhYmxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0Rpc3Bvc2FibGVFeChhc3luY0Rpc3Bvc2FibGU6IEFzeW5jRGlzcG9zYWJsZSk6IEFzeW5jRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzQXN5bmNEaXNwb3NhYmxlRXgoYXN5bmNEaXNwb3NhYmxlKVxuICAgID8gYXN5bmNEaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBhc3luY0Rpc3Bvc2U6IGFzeW5jRGlzcG9zZUFkYXB0ZWQsXG4gICAgICBbU3ltYm9sLmFzeW5jRGlzcG9zZV06IGFzeW5jRGlzcG9zZUFkYXB0ZWRcbiAgICB9O1xuXG4gIGZ1bmN0aW9uIGFzeW5jRGlzcG9zZUFkYXB0ZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIGRpc3Bvc2VBc3luYyhhc3luY0Rpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogQWRhcHRzIGEgcGxhaW4ge0BsaW5rIERpc3Bvc2FibGV9IGludG8gYSB7QGxpbmsgRGlzcG9zYWJsZUV4fSBieSBhZGRpbmcgYSBjb252ZW5pZW5jZVxuICoge0BsaW5rIERpc3Bvc2FibGVFeC5kaXNwb3NlfSBtZXRob2QgdGhhdCBkZWxlZ2F0ZXMgdG8gYFN5bWJvbC5kaXNwb3NlYC5cbiAqXG4gKiBJZiB0aGUgb2JqZWN0IGFscmVhZHkgaW1wbGVtZW50cyB7QGxpbmsgRGlzcG9zYWJsZUV4fSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gdGhlIGRpc3Bvc2FibGUgdG8gYWRhcHRcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gd3JhcHBpbmcgdGhlIGRpc3Bvc2FibGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Rpc3Bvc2FibGVFeChkaXNwb3NhYmxlOiBEaXNwb3NhYmxlKTogRGlzcG9zYWJsZUV4IHtcbiAgcmV0dXJuIGlzRGlzcG9zYWJsZUV4KGRpc3Bvc2FibGUpXG4gICAgPyBkaXNwb3NhYmxlXG4gICAgOiB7XG4gICAgICBkaXNwb3NlOiBkaXNwb3NlQWRhcHRlZCxcbiAgICAgIFtTeW1ib2wuZGlzcG9zZV06IGRpc3Bvc2VBZGFwdGVkXG4gICAgfTtcblxuICBmdW5jdGlvbiBkaXNwb3NlQWRhcHRlZCgpOiB2b2lkIHtcbiAgICBkaXNwb3NlKGRpc3Bvc2FibGUpO1xuICB9XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGV0aGVyIGEgZGlzcG9zYWJsZSdzIHRlYXJkb3duIHNob3VsZCBydW4gb24gdGhlIGN1cnJlbnQgZGlzcG9zZSBjYWxsLCBhcHBseWluZyB0aGVcbiAqIHtAbGluayBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcn0gcmUtZGlzcG9zZSBwb2xpY3kuIFNpbmdsZSBzb3VyY2Ugb2YgdGhlIGd1YXJkIHNoYXJlZCBieVxuICoge0BsaW5rIERpc3Bvc2FibGVCYXNlfSBhbmQge0BsaW5rIEFzeW5jRGlzcG9zYWJsZUJhc2V9LlxuICpcbiAqIEBwYXJhbSBpc0Rpc3Bvc2VkIC0gV2hldGhlciB0aGUgZGlzcG9zYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9uY2UuXG4gKiBAcGFyYW0gbXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IgLSBUaGUgcmUtZGlzcG9zZSBiZWhhdmlvci5cbiAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSB0ZWFyZG93biBzaG91bGQgcnVuLCBgZmFsc2VgIHdoZW4gaXQgc2hvdWxkIGJlIHNraXBwZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFBlcmZvcm1EaXNwb3NlKGlzRGlzcG9zZWQ6IGJvb2xlYW4sIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvcik6IGJvb2xlYW4ge1xuICBpZiAoIWlzRGlzcG9zZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaCAobXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IpIHtcbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLklnbm9yZToge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjYXNlIE11bHRpcGxlRGlzcG9zZUJlaGF2aW9yLkludm9rZToge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhc2UgTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuVGhyb3c6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhpcyBkaXNwb3NhYmxlIGhhcyBhbHJlYWR5IGJlZW4gZGlzcG9zZWQuJyk7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDZCQUFxQztBQUNyQyx5QkFBNEI7QUFNckIsSUFBSyx1QkFBTCxrQkFBS0EsMEJBQUw7QUFLTCxFQUFBQSw0Q0FBQTtBQUtBLEVBQUFBLDRDQUFBO0FBVlUsU0FBQUE7QUFBQSxHQUFBO0FBaUJMLElBQUssZUFBTCxrQkFBS0Msa0JBQUw7QUFLTCxFQUFBQSw0QkFBQTtBQUtBLEVBQUFBLDRCQUFBO0FBVlUsU0FBQUE7QUFBQSxHQUFBO0FBaUJMLElBQUssMEJBQUwsa0JBQUtDLDZCQUFMO0FBSUwsRUFBQUEsa0RBQUE7QUFLQSxFQUFBQSxrREFBQTtBQUtBLEVBQUFBLGtEQUFBO0FBZFUsU0FBQUE7QUFBQSxHQUFBO0FBeUpMLE1BQWUsb0JBQWlEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTTNELDBCQUFtRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU83RCxJQUFjLGFBQXNCO0FBQ2xDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQSxFQUVRLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPZixlQUE4QjtBQUNuQyxXQUFPLEtBQUssT0FBTyxZQUFZLEVBQUU7QUFBQSxFQUNuQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsT0FBYyxPQUFPLFlBQVksSUFBbUI7QUFDbEQsUUFBSSxDQUFDLHFCQUFxQixLQUFLLGFBQWEsS0FBSyx1QkFBdUIsR0FBRztBQUN6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