cdk-nextjs 0.7.14 → 0.7.16

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.
@@ -32,12 +32,6 @@ export declare class ShimServerResponse extends Transform {
32
32
  useChunkedEncodingByDefault: boolean;
33
33
  /** Set by Next.js in a few places; never read by us. */
34
34
  req?: unknown;
35
- /**
36
- * Installed by the runtime core when it inserts gzip, so that Next.js's
37
- * per-chunk `if ("flush" in res) res.flush()` actually reaches the
38
- * compressor. Without it, streamed HTML sits in zlib's buffer.
39
- */
40
- flush?: () => void;
41
35
  /** Lowercased name → original casing + value, mirroring Node's own store. */
42
36
  private readonly headerStore;
43
37
  constructor();
@@ -60,6 +54,12 @@ export declare class ShimServerResponse extends Transform {
60
54
  private buildHead;
61
55
  _transform(chunk: unknown, _encoding: BufferEncoding, callback: TransformCallback): void;
62
56
  _flush(callback: TransformCallback): void;
57
+ /**
58
+ * What the `compression` middleware adds under `next start`, kept for app
59
+ * code that calls it, such as `res.write(event); res.flush()` in a Pages API
60
+ * route. A no-op: the sink's gzip stage already sync-flushes every chunk.
61
+ */
62
+ flush(): void;
63
63
  addTrailers(): never;
64
64
  assignSocket(): never;
65
65
  detachSocket(): never;
@@ -54,12 +54,6 @@ class ShimServerResponse extends node_stream_1.Transform {
54
54
  useChunkedEncodingByDefault = false;
55
55
  /** Set by Next.js in a few places; never read by us. */
56
56
  req;
57
- /**
58
- * Installed by the runtime core when it inserts gzip, so that Next.js's
59
- * per-chunk `if ("flush" in res) res.flush()` actually reaches the
60
- * compressor. Without it, streamed HTML sits in zlib's buffer.
61
- */
62
- flush;
63
57
  /** Lowercased name → original casing + value, mirroring Node's own store. */
64
58
  headerStore = new Map();
65
59
  constructor() {
@@ -196,6 +190,12 @@ class ShimServerResponse extends node_stream_1.Transform {
196
190
  this.flushHeaders();
197
191
  callback();
198
192
  }
193
+ /**
194
+ * What the `compression` middleware adds under `next start`, kept for app
195
+ * code that calls it, such as `res.write(event); res.flush()` in a Pages API
196
+ * route. A no-op: the sink's gzip stage already sync-flushes every chunk.
197
+ */
198
+ flush() { }
199
199
  // --- the rest of the ServerResponse surface -------------------------------
200
200
  addTrailers() {
201
201
  return unsupported("addTrailers");
@@ -226,4 +226,4 @@ exports.ShimServerResponse = ShimServerResponse;
226
226
  function asServerResponse(res) {
227
227
  return res;
228
228
  }
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9odHRwL3Jlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBDQSxzQ0FJQztBQXFPRCw0Q0FFQztBQXJSRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gseUNBQXlDO0FBRXpDLDZDQUF3QztBQWN4Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBaUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUlELG1FQUFtRTtBQUNuRSxTQUFTLFdBQVcsQ0FBQyxNQUFjO0lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2IsT0FBTyxNQUFNLDhEQUE4RDtRQUN6RSxvRUFBb0U7UUFDcEUsV0FBVyxDQUNkLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSx1QkFBUztJQUN4QyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLGFBQWEsQ0FBVTtJQUN2QixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLCtFQUErRTtJQUN4RSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLHdEQUF3RDtJQUNqRCxHQUFHLENBQVc7SUFDckI7Ozs7T0FJRztJQUNJLEtBQUssQ0FBYztJQUUxQiw2RUFBNkU7SUFDNUQsV0FBVyxHQUFHLElBQUksR0FBRyxFQUduQyxDQUFDO0lBRUo7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRCw2RUFBNkU7SUFFdEUsU0FBUyxDQUFDLElBQVksRUFBRSxLQUFrQjtRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxZQUFZLENBQUMsSUFBWSxFQUFFLEtBQXdCO1FBQ3hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDekMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQ2YsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzVCLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFNBQVMsQ0FBQyxJQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQ3pELENBQUM7SUFFTSxVQUFVO1FBQ2YsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUN4QyxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxjQUFjO1FBQ25CLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sU0FBUyxDQUFDLElBQVk7UUFDM0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU0sWUFBWSxDQUFDLElBQVk7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVNLFNBQVMsQ0FDZCxVQUFrQixFQUNsQixzQkFBcUUsRUFDckUsWUFBa0Q7UUFFbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDO1FBQzNCLElBQUksT0FBTyxzQkFBc0IsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLHNCQUFzQixDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLHNCQUFzQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hELE9BQU8sR0FBRyxzQkFBc0IsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0IsdUVBQXVFO1lBQ3ZFLHdFQUF3RTtZQUN4RSxpRUFBaUU7WUFDakUsZ0NBQWdDO1lBQ2hDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyQyxDQUFDO1lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBZ0IsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFlBQVksQ0FDZixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2YsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDbEQsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO2FBQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBb0IsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFlBQVk7UUFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsNEVBQTRFO0lBQzVFLElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO1FBQzNDLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUMzQixLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixJQUFJLEdBQUcsS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ3ZCLHNFQUFzRTtvQkFDdEUsb0VBQW9FO29CQUNwRSx3REFBd0Q7b0JBQ3hELE9BQU8sQ0FBQyxJQUFJLENBQ1YsNEJBQTRCLEtBQUssQ0FBQyxNQUFNLG9CQUFvQjt3QkFDMUQsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FDaEQsQ0FBQztvQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsU0FBUztZQUNYLENBQUM7WUFDRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxJQUFJLHdCQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNsRSxPQUFPO1lBQ1AsT0FBTztTQUNSLENBQUM7SUFDSixDQUFDO0lBRUQsNkVBQTZFO0lBRTdELFVBQVUsQ0FDeEIsS0FBYyxFQUNkLFNBQXlCLEVBQ3pCLFFBQTJCO1FBRTNCLHdFQUF3RTtRQUN4RSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVlLE1BQU0sQ0FBQyxRQUEyQjtRQUNoRCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVELDZFQUE2RTtJQUV0RSxXQUFXO1FBQ2hCLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDTSxZQUFZO1FBQ2pCLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDTSxZQUFZO1FBQ2pCLE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDTSxhQUFhO1FBQ2xCLE9BQU8sV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDTSxlQUFlO1FBQ3BCLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNNLGVBQWU7UUFDcEIsT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0Y7QUFoTkQsZ0RBZ05DO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxHQUF1QjtJQUN0RCxPQUFPLEdBQWdDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzeW50aGVzaXplZCwgc3RyZWFtaW5nIGBodHRwLlNlcnZlclJlc3BvbnNlYC5cbiAqXG4gKiBUaGUgcmVzcG9uc2UgKmlzKiB0aGUgc3RyZWFtOiB0aGlzIGlzIGEgYFRyYW5zZm9ybWAgdGhhdCBOZXh0LmpzIHdyaXRlcyBpbnRvLFxuICogYW5kIHRoZSBzaGVsbCBwaXBlcyBpbnRvIGl0cyBvd24gYnl0ZSBzaW5rIChgYXdzbGFtYmRhLkh0dHBSZXNwb25zZVN0cmVhbWAgZm9yXG4gKiBGdW5jdGlvbnMsIHRoZSByZWFsIGBTZXJ2ZXJSZXNwb25zZWAgZm9yIENvbnRhaW5lcnMpLiBTdGF0dXMgYW5kIGhlYWRlcnMgYXJlXG4gKiBlbWl0dGVkIG9uY2UgYXMgYSB7QGxpbmsgUmVzcG9uc2VIZWFkfSBvbiB0aGUgYFwiaGVhZFwiYCBldmVudCwgYmVjYXVzZSBMYW1iZGEnc1xuICogcmVzcG9uc2Ugc3RyZWFtIG5lZWRzIHRoZW0gaW4gYSBwcmVsdWRlICpiZWZvcmUqIGFueSBib2R5IGJ5dGUuXG4gKlxuICogTW9kZWxlZCBvbiBPcGVuTmV4dCdzIGBPcGVuTmV4dE5vZGVSZXNwb25zZWAgKE1JVCwgwqkgMjAyMiBTU1QpOlxuICogaHR0cHM6Ly9naXRodWIuY29tL29wZW5uZXh0anMvb3Blbm5leHRqcy1hd3MvYmxvYi9tYWluL3BhY2thZ2VzL29wZW4tbmV4dC9zcmMvaHR0cC9vcGVuTmV4dFJlc3BvbnNlLnRzXG4gKlxuICogRGVsaWJlcmF0ZWx5IG11Y2ggc21hbGxlciB0aGFuIHRoYXQgZmlsZS4gT3Blbk5leHQncyBzaGltIGRvdWJsZXMgYXMgYVxuICogYEJhc2VOZXh0UmVzcG9uc2VgIGFuZCByZS1pbXBsZW1lbnRzIHRoZSBtaWRkbGV3YXJlIGhlYWRlciBtZXJnZSwgYmVjYXVzZVxuICogT3Blbk5leHQgcmVpbXBsZW1lbnRzIHJvdXRpbmcuIFdlIGhhbmQgdGhpcyBvYmplY3QgdG8gYGhhbmRsZXIocmVxLCByZXMsIGN0eClgLFxuICogd2hpY2ggd3JhcHMgaXQgaW4gTmV4dC5qcydzIG93biBgTm9kZU5leHRSZXNwb25zZWBcbiAqIChgbmV4dC9kaXN0L3NlcnZlci9iYXNlLWh0dHAvbm9kZS5qc2ApIOKAlCBzbyB0aGUgY29udHJhY3QgaXMganVzdCBcImJlIGFcbiAqIGBTZXJ2ZXJSZXNwb25zZWBcIiwgYW5kIHRoZSBoZWFkZXItbWVyZ2UgbG9naWMgYmVsb25ncyB0byBgQG5leHQvcm91dGluZ2AuXG4gKi9cbmltcG9ydCB7IFNUQVRVU19DT0RFUyB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB0eXBlIHsgT3V0Z29pbmdIdHRwSGVhZGVycywgU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwibm9kZTpodHRwXCI7XG5pbXBvcnQgeyBUcmFuc2Zvcm0gfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB0eXBlIHsgVHJhbnNmb3JtQ2FsbGJhY2sgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUhlYWQge1xuICByZWFkb25seSBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXR1c01lc3NhZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGbGF0IGhlYWRlciBtYXAgd2l0aCBgc2V0LWNvb2tpZWAgcmVtb3ZlZCDigJQgYSBgUmVjb3JkPHN0cmluZywgc3RyaW5nPmBcbiAgICogY2Fubm90IHJlcHJlc2VudCBpdCwgYW5kIGJvdGggc2lua3MgdGFrZSBjb29raWVzIHNlcGFyYXRlbHkuXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkb25seSBjb29raWVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPbmUgZW50cnkgcGVyIGBTZXQtQ29va2llYCBsaW5lLCB0aGUgd2F5IE5vZGUncyBgU2VydmVyUmVzcG9uc2VgIGVtaXRzIHRoZW06XG4gKiBlYWNoIGFycmF5IGVsZW1lbnQgaXMgYSB3aG9sZSBjb29raWUgYW5kIGEgc3RyaW5nIGlzIGV4YWN0bHkgb25lLiBOb3RoaW5nIGhlcmVcbiAqIHNwbGl0cyBvbiBjb21tYXMg4oCUIGBFeHBpcmVzPWAgZGF0ZXMgY29udGFpbiBvbmUgaW4gZXZlcnkgZm9ybWF0IChgV2VkLCAyMSBPY3RgLFxuICogYFdlZG5lc2RheSwgMjEtT2N0LTI2YCksIGFuZCBhIGhldXJpc3RpYyBzcGxpdCB0dXJucyBvbmUgY29va2llIGludG8gYSBzZXNzaW9uXG4gKiBjb29raWUgb24gdGhlIHdyb25nIHBhdGggcGx1cyBhIGp1bmsgb25lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29va2llTGlzdCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIHJldHVybiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0pXG4gICAgLm1hcCgoY29va2llKSA9PiBTdHJpbmcoY29va2llKS50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbn1cblxudHlwZSBIZWFkZXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdO1xuXG4vKiogTm9kZSBuZXZlciBjYWxscyB0aGVzZSwgYW5kIE5leHQuanMgbmV2ZXIgY2FsbHMgdGhlbSBlaXRoZXIuICovXG5mdW5jdGlvbiB1bnN1cHBvcnRlZChtZXRob2Q6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGByZXMuJHttZXRob2R9KCkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY2RrLW5leHRqcyBydW50aW1lLiBOZXh0LmpzIGRvZXMgYCArXG4gICAgICBgbm90IGNhbGwgaXQsIHNvIHJlYWNoaW5nIHRoaXMgbWVhbnMgc29tZXRoaW5nIGVsc2UgaXMgd3JpdGluZyB0aGUgYCArXG4gICAgICBgcmVzcG9uc2UuYCxcbiAgKTtcbn1cblxuZXhwb3J0IGNsYXNzIFNoaW1TZXJ2ZXJSZXNwb25zZSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIHB1YmxpYyBzdGF0dXNDb2RlID0gMjAwO1xuICBwdWJsaWMgc3RhdHVzTWVzc2FnZT86IHN0cmluZztcbiAgcHVibGljIGhlYWRlcnNTZW50ID0gZmFsc2U7XG4gIC8qKiBBY2NlcHRlZCBhbmQgaWdub3JlZDogdGhlcmUgaXMgbm8gc29ja2V0IHRvIHNjaGVkdWxlIGEgYERhdGVgIGhlYWRlciBvbi4gKi9cbiAgcHVibGljIHNlbmREYXRlID0gZmFsc2U7XG4gIHB1YmxpYyBzdHJpY3RDb250ZW50TGVuZ3RoID0gZmFsc2U7XG4gIHB1YmxpYyBjaHVua2VkRW5jb2RpbmcgPSBmYWxzZTtcbiAgcHVibGljIHNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlO1xuICBwdWJsaWMgdXNlQ2h1bmtlZEVuY29kaW5nQnlEZWZhdWx0ID0gZmFsc2U7XG4gIC8qKiBTZXQgYnkgTmV4dC5qcyBpbiBhIGZldyBwbGFjZXM7IG5ldmVyIHJlYWQgYnkgdXMuICovXG4gIHB1YmxpYyByZXE/OiB1bmtub3duO1xuICAvKipcbiAgICogSW5zdGFsbGVkIGJ5IHRoZSBydW50aW1lIGNvcmUgd2hlbiBpdCBpbnNlcnRzIGd6aXAsIHNvIHRoYXQgTmV4dC5qcydzXG4gICAqIHBlci1jaHVuayBgaWYgKFwiZmx1c2hcIiBpbiByZXMpIHJlcy5mbHVzaCgpYCBhY3R1YWxseSByZWFjaGVzIHRoZVxuICAgKiBjb21wcmVzc29yLiBXaXRob3V0IGl0LCBzdHJlYW1lZCBIVE1MIHNpdHMgaW4gemxpYidzIGJ1ZmZlci5cbiAgICovXG4gIHB1YmxpYyBmbHVzaD86ICgpID0+IHZvaWQ7XG5cbiAgLyoqIExvd2VyY2FzZWQgbmFtZSDihpIgb3JpZ2luYWwgY2FzaW5nICsgdmFsdWUsIG1pcnJvcmluZyBOb2RlJ3Mgb3duIHN0b3JlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlclN0b3JlID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBIZWFkZXJWYWx1ZSB9XG4gID4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8vIC0tLSBoZWFkZXIgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIHNldEhlYWRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBIZWFkZXJWYWx1ZSk6IHRoaXMge1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuc2V0KG5hbWUudG9Mb3dlckNhc2UoKSwgeyBuYW1lLCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaGVhZGVyU3RvcmUuZ2V0KGtleSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShjdXJyZW50LnZhbHVlKVxuICAgICAgPyBjdXJyZW50LnZhbHVlXG4gICAgICA6IFtTdHJpbmcoY3VycmVudC52YWx1ZSldO1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuc2V0KGtleSwge1xuICAgICAgbmFtZTogY3VycmVudC5uYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlcy5jb25jYXQodmFsdWUpLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlcihuYW1lOiBzdHJpbmcpOiBIZWFkZXJWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyU3RvcmUuZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSk/LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlcnMoKTogT3V0Z29pbmdIdHRwSGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycyA9IHt9O1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXMuaGVhZGVyU3RvcmUudmFsdWVzKCkpIHtcbiAgICAgIGhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRIZWFkZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmhlYWRlclN0b3JlLmtleXMoKV07XG4gIH1cblxuICBwdWJsaWMgaGFzSGVhZGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhlYWRlclN0b3JlLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUhlYWRlcihuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlclN0b3JlLmRlbGV0ZShuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlSGVhZChcbiAgICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgc3RhdHVzTWVzc2FnZU9ySGVhZGVycz86IHN0cmluZyB8IE91dGdvaW5nSHR0cEhlYWRlcnMgfCBIZWFkZXJWYWx1ZVtdLFxuICAgIG1heWJlSGVhZGVycz86IE91dGdvaW5nSHR0cEhlYWRlcnMgfCBIZWFkZXJWYWx1ZVtdLFxuICApOiB0aGlzIHtcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzID0gbWF5YmVIZWFkZXJzO1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzTWVzc2FnZU9ySGVhZGVycyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZU9ySGVhZGVycztcbiAgICB9IGVsc2UgaWYgKHN0YXR1c01lc3NhZ2VPckhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGVhZGVycyA9IHN0YXR1c01lc3NhZ2VPckhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIC8vIE5vZGUncyBmbGF0IGV2ZW4vb2RkIGBbbmFtZSwgdmFsdWUsIG5hbWUsIHZhbHVlXWAgZm9ybSwgd2hlcmUgYSBuYW1lXG4gICAgICAvLyBtYXkgcmVwZWF0IChvbmUgYFNldC1Db29raWVgIHBlciBjb29raWUpLCBzbywgYXMgTm9kZSBkb2VzLCBlYWNoIG5hbWVcbiAgICAgIC8vIHJlcGxhY2VzIHdoYXQgd2FzIHNldCBiZWZvcmUgYnV0IGl0cyB2YWx1ZXMgYWRkIHVwLiBUdXBsZXMgYXJlXG4gICAgICAvLyBmbGF0dGVuZWQgaW50byB0aGUgc2FtZSBmb3JtLlxuICAgICAgY29uc3QgZmxhdCA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1swXSkgPyBoZWFkZXJzLmZsYXQoKSA6IGhlYWRlcnM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsYXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVIZWFkZXIoU3RyaW5nKGZsYXRbaV0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxhdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZsYXRbaSArIDFdIGFzIEhlYWRlclZhbHVlO1xuICAgICAgICB0aGlzLmFwcGVuZEhlYWRlcihcbiAgICAgICAgICBTdHJpbmcoZmxhdFtpXSksXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRIZWFkZXIobmFtZSwgdmFsdWUgYXMgSGVhZGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGcmVlemVzIHN0YXR1cyArIGhlYWRlcnMgYW5kIGVtaXRzIHRoZW0gYXMgdGhlIGBcImhlYWRcImAgZXZlbnQuIENhbGxlZFxuICAgKiBleHBsaWNpdGx5IGJ5IE5leHQuanMgYmVmb3JlIGl0IHN0cmVhbXMsIGFuZCBsYXppbHkgYnkgdGhpcyBjbGFzcyBvbiB0aGVcbiAgICogZmlyc3QgYnl0ZSBvciBvbiBgZW5kKClgIHdoZW4gaXQgaXNuJ3QuXG4gICAqL1xuICBwdWJsaWMgZmx1c2hIZWFkZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWRlcnNTZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGVhZGVyc1NlbnQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdChcImhlYWRcIiwgdGhpcy5idWlsZEhlYWQoKSk7XG4gIH1cblxuICAvKiogRGVwcmVjYXRlZCBvbiBgU2VydmVyUmVzcG9uc2VgLCBidXQgYE5vZGVOZXh0UmVzcG9uc2Uuc2VudGAgcmVhZHMgaXQuICovXG4gIHB1YmxpYyBnZXQgZmluaXNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGFibGVFbmRlZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkKCk6IFJlc3BvbnNlSGVhZCB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGxldCBjb29raWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXMuaGVhZGVyU3RvcmUudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChrZXkgPT09IFwic2V0LWNvb2tpZVwiKSB7XG4gICAgICAgIGNvb2tpZXMgPSBzZXRDb29raWVMaXN0KHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJsb2NhdGlvblwiKSB7XG4gICAgICAgICAgLy8gTmV4dC5qcyBzZW5kcyBhbiBhcnJheSBgTG9jYXRpb25gIHdoZW4gYSBjYWNoZUhhbmRsZXIgYGdldGAgcmV0dXJuc1xuICAgICAgICAgIC8vIG51bGwgZm9yIGEgcGFnZSB0aGF0IGNhbGxzIGByZWRpcmVjdCgpYC4gQ29tbWEtam9pbmluZyBwcm9kdWNlcyBhXG4gICAgICAgICAgLy8gVVJMIHRoYXQgcmVzb2x2ZXMgdG8gbm90aGluZywgc28gdGFrZSB0aGUgbGFzdCB3cml0ZS5cbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Nkay1uZXh0anNdIE5leHQuanMgc2V0ICR7dmFsdWUubGVuZ3RofSBMb2NhdGlvbiBoZWFkZXJzIGAgK1xuICAgICAgICAgICAgICBgKCR7dmFsdWUuam9pbihcIiB8IFwiKX0pOyB1c2luZyB0aGUgbGFzdCBvbmUuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFN0cmluZyh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWUuam9pbihcIiwgXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhlYWRlcnNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiB0aGlzLnN0YXR1c0NvZGUsXG4gICAgICBzdGF0dXNNZXNzYWdlOiB0aGlzLnN0YXR1c01lc3NhZ2UgPz8gU1RBVFVTX0NPREVTW3RoaXMuc3RhdHVzQ29kZV0sXG4gICAgICBoZWFkZXJzLFxuICAgICAgY29va2llcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gLS0tIHN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgb3ZlcnJpZGUgX3RyYW5zZm9ybShcbiAgICBjaHVuazogdW5rbm93bixcbiAgICBfZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nLFxuICAgIGNhbGxiYWNrOiBUcmFuc2Zvcm1DYWxsYmFjayxcbiAgKTogdm9pZCB7XG4gICAgLy8gTGF6aWx5LCBiZWNhdXNlIE5leHQuanMgb25seSBjYWxscyBgZmx1c2hIZWFkZXJzKClgIG9uIHRoZSBwYXRocyB0aGF0XG4gICAgLy8gc3RyZWFtLiBgc2VuZFBheWxvYWRgIGp1c3Qgd3JpdGVzIGFuZCBlbmRzLlxuICAgIHRoaXMuZmx1c2hIZWFkZXJzKCk7XG4gICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIF9mbHVzaChjYWxsYmFjazogVHJhbnNmb3JtQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAvLyBBbiBlbXB0eSBib2R5IHN0aWxsIG5lZWRzIGEgc3RhdHVzIGxpbmUuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgLy8gLS0tIHRoZSByZXN0IG9mIHRoZSBTZXJ2ZXJSZXNwb25zZSBzdXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgYWRkVHJhaWxlcnMoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcImFkZFRyYWlsZXJzXCIpO1xuICB9XG4gIHB1YmxpYyBhc3NpZ25Tb2NrZXQoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcImFzc2lnblNvY2tldFwiKTtcbiAgfVxuICBwdWJsaWMgZGV0YWNoU29ja2V0KCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJkZXRhY2hTb2NrZXRcIik7XG4gIH1cbiAgcHVibGljIHdyaXRlQ29udGludWUoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcIndyaXRlQ29udGludWVcIik7XG4gIH1cbiAgcHVibGljIHdyaXRlRWFybHlIaW50cygpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwid3JpdGVFYXJseUhpbnRzXCIpO1xuICB9XG4gIHB1YmxpYyB3cml0ZVByb2Nlc3NpbmcoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcIndyaXRlUHJvY2Vzc2luZ1wiKTtcbiAgfVxufVxuXG4vKipcbiAqIGBTaGltU2VydmVyUmVzcG9uc2VgIGlzIHN0cnVjdHVyYWxseSBhIGBTZXJ2ZXJSZXNwb25zZWAgZm9yIGV2ZXJ5dGhpbmcgTmV4dC5qc1xuICogdG91Y2hlcywgYnV0IG5vdCBub21pbmFsbHkgb25lIChubyBzb2NrZXQsIG5vIHRyYWlsZXJzKS4gVGhlIGVudHJ5cG9pbnRcbiAqIHNpZ25hdHVyZSB3YW50cyB0aGUgcmVhbCB0eXBlLCBzbyB0aGUgY2FzdCBpcyBjZW50cmFsaXplZCBoZXJlIHdpdGggdGhlXG4gKiByZWFzb25pbmcgYXR0YWNoZWQgcmF0aGVyIHRoYW4gcmVwZWF0ZWQgYXQgZWFjaCBjYWxsIHNpdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc1NlcnZlclJlc3BvbnNlKHJlczogU2hpbVNlcnZlclJlc3BvbnNlKTogU2VydmVyUmVzcG9uc2Uge1xuICByZXR1cm4gcmVzIGFzIHVua25vd24gYXMgU2VydmVyUmVzcG9uc2U7XG59XG4iXX0=
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcnVudGltZS9odHRwL3Jlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBDQSxzQ0FJQztBQXNPRCw0Q0FFQztBQXRSRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gseUNBQXlDO0FBRXpDLDZDQUF3QztBQWN4Qzs7Ozs7O0dBTUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBaUM7SUFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN0QyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckIsQ0FBQztBQUlELG1FQUFtRTtBQUNuRSxTQUFTLFdBQVcsQ0FBQyxNQUFjO0lBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQ2IsT0FBTyxNQUFNLDhEQUE4RDtRQUN6RSxvRUFBb0U7UUFDcEUsV0FBVyxDQUNkLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBYSxrQkFBbUIsU0FBUSx1QkFBUztJQUN4QyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLGFBQWEsQ0FBVTtJQUN2QixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLCtFQUErRTtJQUN4RSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUM1QixlQUFlLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDeEIsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO0lBQzNDLHdEQUF3RDtJQUNqRCxHQUFHLENBQVc7SUFFckIsNkVBQTZFO0lBQzVELFdBQVcsR0FBRyxJ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QUMsaUJBQWlCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ00sZUFBZTtRQUNwQixPQUFPLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7Q0FDRjtBQWpORCxnREFpTkM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEdBQXVCO0lBQ3RELE9BQU8sR0FBZ0MsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBIHN5bnRoZXNpemVkLCBzdHJlYW1pbmcgYGh0dHAuU2VydmVyUmVzcG9uc2VgLlxuICpcbiAqIFRoZSByZXNwb25zZSAqaXMqIHRoZSBzdHJlYW06IHRoaXMgaXMgYSBgVHJhbnNmb3JtYCB0aGF0IE5leHQuanMgd3JpdGVzIGludG8sXG4gKiBhbmQgdGhlIHNoZWxsIHBpcGVzIGludG8gaXRzIG93biBieXRlIHNpbmsgKGBhd3NsYW1iZGEuSHR0cFJlc3BvbnNlU3RyZWFtYCBmb3JcbiAqIEZ1bmN0aW9ucywgdGhlIHJlYWwgYFNlcnZlclJlc3BvbnNlYCBmb3IgQ29udGFpbmVycykuIFN0YXR1cyBhbmQgaGVhZGVycyBhcmVcbiAqIGVtaXR0ZWQgb25jZSBhcyBhIHtAbGluayBSZXNwb25zZUhlYWR9IG9uIHRoZSBgXCJoZWFkXCJgIGV2ZW50LCBiZWNhdXNlIExhbWJkYSdzXG4gKiByZXNwb25zZSBzdHJlYW0gbmVlZHMgdGhlbSBpbiBhIHByZWx1ZGUgKmJlZm9yZSogYW55IGJvZHkgYnl0ZS5cbiAqXG4gKiBNb2RlbGVkIG9uIE9wZW5OZXh0J3MgYE9wZW5OZXh0Tm9kZVJlc3BvbnNlYCAoTUlULCDCqSAyMDIyIFNTVCk6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vb3Blbm5leHRqcy9vcGVubmV4dGpzLWF3cy9ibG9iL21haW4vcGFja2FnZXMvb3Blbi1uZXh0L3NyYy9odHRwL29wZW5OZXh0UmVzcG9uc2UudHNcbiAqXG4gKiBEZWxpYmVyYXRlbHkgbXVjaCBzbWFsbGVyIHRoYW4gdGhhdCBmaWxlLiBPcGVuTmV4dCdzIHNoaW0gZG91YmxlcyBhcyBhXG4gKiBgQmFzZU5leHRSZXNwb25zZWAgYW5kIHJlLWltcGxlbWVudHMgdGhlIG1pZGRsZXdhcmUgaGVhZGVyIG1lcmdlLCBiZWNhdXNlXG4gKiBPcGVuTmV4dCByZWltcGxlbWVudHMgcm91dGluZy4gV2UgaGFuZCB0aGlzIG9iamVjdCB0byBgaGFuZGxlcihyZXEsIHJlcywgY3R4KWAsXG4gKiB3aGljaCB3cmFwcyBpdCBpbiBOZXh0LmpzJ3Mgb3duIGBOb2RlTmV4dFJlc3BvbnNlYFxuICogKGBuZXh0L2Rpc3Qvc2VydmVyL2Jhc2UtaHR0cC9ub2RlLmpzYCkg4oCUIHNvIHRoZSBjb250cmFjdCBpcyBqdXN0IFwiYmUgYVxuICogYFNlcnZlclJlc3BvbnNlYFwiLCBhbmQgdGhlIGhlYWRlci1tZXJnZSBsb2dpYyBiZWxvbmdzIHRvIGBAbmV4dC9yb3V0aW5nYC5cbiAqL1xuaW1wb3J0IHsgU1RBVFVTX0NPREVTIH0gZnJvbSBcIm5vZGU6aHR0cFwiO1xuaW1wb3J0IHR5cGUgeyBPdXRnb2luZ0h0dHBIZWFkZXJzLCBTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCJub2RlOmh0dHBcIjtcbmltcG9ydCB7IFRyYW5zZm9ybSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2Zvcm1DYWxsYmFjayB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlSGVhZCB7XG4gIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgc3RhdHVzTWVzc2FnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEZsYXQgaGVhZGVyIG1hcCB3aXRoIGBzZXQtY29va2llYCByZW1vdmVkIOKAlCBhIGBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+YFxuICAgKiBjYW5ub3QgcmVwcmVzZW50IGl0LCBhbmQgYm90aCBzaW5rcyB0YWtlIGNvb2tpZXMgc2VwYXJhdGVseS5cbiAgICovXG4gIHJlYWRvbmx5IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlYWRvbmx5IGNvb2tpZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSBlbnRyeSBwZXIgYFNldC1Db29raWVgIGxpbmUsIHRoZSB3YXkgTm9kZSdzIGBTZXJ2ZXJSZXNwb25zZWAgZW1pdHMgdGhlbTpcbiAqIGVhY2ggYXJyYXkgZWxlbWVudCBpcyBhIHdob2xlIGNvb2tpZSBhbmQgYSBzdHJpbmcgaXMgZXhhY3RseSBvbmUuIE5vdGhpbmcgaGVyZVxuICogc3BsaXRzIG9uIGNvbW1hcyDigJQgYEV4cGlyZXM9YCBkYXRlcyBjb250YWluIG9uZSBpbiBldmVyeSBmb3JtYXQgKGBXZWQsIDIxIE9jdGAsXG4gKiBgV2VkbmVzZGF5LCAyMS1PY3QtMjZgKSwgYW5kIGEgaGV1cmlzdGljIHNwbGl0IHR1cm5zIG9uZSBjb29raWUgaW50byBhIHNlc3Npb25cbiAqIGNvb2tpZSBvbiB0aGUgd3JvbmcgcGF0aCBwbHVzIGEganVuayBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb29raWVMaXN0KHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSlcbiAgICAubWFwKChjb29raWUpID0+IFN0cmluZyhjb29raWUpLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xufVxuXG50eXBlIEhlYWRlclZhbHVlID0gc3RyaW5nIHwgbnVtYmVyIHwgc3RyaW5nW107XG5cbi8qKiBOb2RlIG5ldmVyIGNhbGxzIHRoZXNlLCBhbmQgTmV4dC5qcyBuZXZlciBjYWxscyB0aGVtIGVpdGhlci4gKi9cbmZ1bmN0aW9uIHVuc3VwcG9ydGVkKG1ldGhvZDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYHJlcy4ke21ldGhvZH0oKSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjZGstbmV4dGpzIHJ1bnRpbWUuIE5leHQuanMgZG9lcyBgICtcbiAgICAgIGBub3QgY2FsbCBpdCwgc28gcmVhY2hpbmcgdGhpcyBtZWFucyBzb21ldGhpbmcgZWxzZSBpcyB3cml0aW5nIHRoZSBgICtcbiAgICAgIGByZXNwb25zZS5gLFxuICApO1xufVxuXG5leHBvcnQgY2xhc3MgU2hpbVNlcnZlclJlc3BvbnNlIGV4dGVuZHMgVHJhbnNmb3JtIHtcbiAgcHVibGljIHN0YXR1c0NvZGUgPSAyMDA7XG4gIHB1YmxpYyBzdGF0dXNNZXNzYWdlPzogc3RyaW5nO1xuICBwdWJsaWMgaGVhZGVyc1NlbnQgPSBmYWxzZTtcbiAgLyoqIEFjY2VwdGVkIGFuZCBpZ25vcmVkOiB0aGVyZSBpcyBubyBzb2NrZXQgdG8gc2NoZWR1bGUgYSBgRGF0ZWAgaGVhZGVyIG9uLiAqL1xuICBwdWJsaWMgc2VuZERhdGUgPSBmYWxzZTtcbiAgcHVibGljIHN0cmljdENvbnRlbnRMZW5ndGggPSBmYWxzZTtcbiAgcHVibGljIGNodW5rZWRFbmNvZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgc2hvdWxkS2VlcEFsaXZlID0gZmFsc2U7XG4gIHB1YmxpYyB1c2VDaHVua2VkRW5jb2RpbmdCeURlZmF1bHQgPSBmYWxzZTtcbiAgLyoqIFNldCBieSBOZXh0LmpzIGluIGEgZmV3IHBsYWNlczsgbmV2ZXIgcmVhZCBieSB1cy4gKi9cbiAgcHVibGljIHJlcT86IHVua25vd247XG5cbiAgLyoqIExvd2VyY2FzZWQgbmFtZSDihpIgb3JpZ2luYWwgY2FzaW5nICsgdmFsdWUsIG1pcnJvcmluZyBOb2RlJ3Mgb3duIHN0b3JlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlclN0b3JlID0gbmV3IE1hcDxcbiAgICBzdHJpbmcsXG4gICAgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBIZWFkZXJWYWx1ZSB9XG4gID4oKTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8vIC0tLSBoZWFkZXIgQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIHNldEhlYWRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBIZWFkZXJWYWx1ZSk6IHRoaXMge1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuc2V0KG5hbWUudG9Mb3dlckNhc2UoKSwgeyBuYW1lLCB2YWx1ZSB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzIHtcbiAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaGVhZGVyU3RvcmUuZ2V0KGtleSk7XG4gICAgaWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShjdXJyZW50LnZhbHVlKVxuICAgICAgPyBjdXJyZW50LnZhbHVlXG4gICAgICA6IFtTdHJpbmcoY3VycmVudC52YWx1ZSldO1xuICAgIHRoaXMuaGVhZGVyU3RvcmUuc2V0KGtleSwge1xuICAgICAgbmFtZTogY3VycmVudC5uYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlcy5jb25jYXQodmFsdWUpLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlcihuYW1lOiBzdHJpbmcpOiBIZWFkZXJWYWx1ZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZGVyU3RvcmUuZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSk/LnZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldEhlYWRlcnMoKTogT3V0Z29pbmdIdHRwSGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVyczogT3V0Z29pbmdIdHRwSGVhZGVycyA9IHt9O1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXMuaGVhZGVyU3RvcmUudmFsdWVzKCkpIHtcbiAgICAgIGhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXRIZWFkZXJOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmhlYWRlclN0b3JlLmtleXMoKV07XG4gIH1cblxuICBwdWJsaWMgaGFzSGVhZGVyKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhlYWRlclN0b3JlLmhhcyhuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUhlYWRlcihuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlclN0b3JlLmRlbGV0ZShuYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgcHVibGljIHdyaXRlSGVhZChcbiAgICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gICAgc3RhdHVzTWVzc2FnZU9ySGVhZGVycz86IHN0cmluZyB8IE91dGdvaW5nSHR0cEhlYWRlcnMgfCBIZWFkZXJWYWx1ZVtdLFxuICAgIG1heWJlSGVhZGVycz86IE91dGdvaW5nSHR0cEhlYWRlcnMgfCBIZWFkZXJWYWx1ZVtdLFxuICApOiB0aGlzIHtcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIGxldCBoZWFkZXJzID0gbWF5YmVIZWFkZXJzO1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzTWVzc2FnZU9ySGVhZGVycyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhpcy5zdGF0dXNNZXNzYWdlID0gc3RhdHVzTWVzc2FnZU9ySGVhZGVycztcbiAgICB9IGVsc2UgaWYgKHN0YXR1c01lc3NhZ2VPckhlYWRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGVhZGVycyA9IHN0YXR1c01lc3NhZ2VPckhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIC8vIE5vZGUncyBmbGF0IGV2ZW4vb2RkIGBbbmFtZSwgdmFsdWUsIG5hbWUsIHZhbHVlXWAgZm9ybSwgd2hlcmUgYSBuYW1lXG4gICAgICAvLyBtYXkgcmVwZWF0IChvbmUgYFNldC1Db29raWVgIHBlciBjb29raWUpLCBzbywgYXMgTm9kZSBkb2VzLCBlYWNoIG5hbWVcbiAgICAgIC8vIHJlcGxhY2VzIHdoYXQgd2FzIHNldCBiZWZvcmUgYnV0IGl0cyB2YWx1ZXMgYWRkIHVwLiBUdXBsZXMgYXJlXG4gICAgICAvLyBmbGF0dGVuZWQgaW50byB0aGUgc2FtZSBmb3JtLlxuICAgICAgY29uc3QgZmxhdCA9IEFycmF5LmlzQXJyYXkoaGVhZGVyc1swXSkgPyBoZWFkZXJzLmZsYXQoKSA6IGhlYWRlcnM7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZsYXQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVIZWFkZXIoU3RyaW5nKGZsYXRbaV0pKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmxhdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZsYXRbaSArIDFdIGFzIEhlYWRlclZhbHVlO1xuICAgICAgICB0aGlzLmFwcGVuZEhlYWRlcihcbiAgICAgICAgICBTdHJpbmcoZmxhdFtpXSksXG4gICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gU3RyaW5nKHZhbHVlKSA6IHZhbHVlLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycykge1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRIZWFkZXIobmFtZSwgdmFsdWUgYXMgSGVhZGVyVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGcmVlemVzIHN0YXR1cyArIGhlYWRlcnMgYW5kIGVtaXRzIHRoZW0gYXMgdGhlIGBcImhlYWRcImAgZXZlbnQuIENhbGxlZFxuICAgKiBleHBsaWNpdGx5IGJ5IE5leHQuanMgYmVmb3JlIGl0IHN0cmVhbXMsIGFuZCBsYXppbHkgYnkgdGhpcyBjbGFzcyBvbiB0aGVcbiAgICogZmlyc3QgYnl0ZSBvciBvbiBgZW5kKClgIHdoZW4gaXQgaXNuJ3QuXG4gICAqL1xuICBwdWJsaWMgZmx1c2hIZWFkZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmhlYWRlcnNTZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGVhZGVyc1NlbnQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdChcImhlYWRcIiwgdGhpcy5idWlsZEhlYWQoKSk7XG4gIH1cblxuICAvKiogRGVwcmVjYXRlZCBvbiBgU2VydmVyUmVzcG9uc2VgLCBidXQgYE5vZGVOZXh0UmVzcG9uc2Uuc2VudGAgcmVhZHMgaXQuICovXG4gIHB1YmxpYyBnZXQgZmluaXNoZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud3JpdGFibGVFbmRlZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRIZWFkKCk6IFJlc3BvbnNlSGVhZCB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGxldCBjb29raWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXMuaGVhZGVyU3RvcmUudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGtleSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChrZXkgPT09IFwic2V0LWNvb2tpZVwiKSB7XG4gICAgICAgIGNvb2tpZXMgPSBzZXRDb29raWVMaXN0KHZhbHVlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJsb2NhdGlvblwiKSB7XG4gICAgICAgICAgLy8gTmV4dC5qcyBzZW5kcyBhbiBhcnJheSBgTG9jYXRpb25gIHdoZW4gYSBjYWNoZUhhbmRsZXIgYGdldGAgcmV0dXJuc1xuICAgICAgICAgIC8vIG51bGwgZm9yIGEgcGFnZSB0aGF0IGNhbGxzIGByZWRpcmVjdCgpYC4gQ29tbWEtam9pbmluZyBwcm9kdWNlcyBhXG4gICAgICAgICAgLy8gVVJMIHRoYXQgcmVzb2x2ZXMgdG8gbm90aGluZywgc28gdGFrZSB0aGUgbGFzdCB3cml0ZS5cbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Nkay1uZXh0anNdIE5leHQuanMgc2V0ICR7dmFsdWUubGVuZ3RofSBMb2NhdGlvbiBoZWFkZXJzIGAgK1xuICAgICAgICAgICAgICBgKCR7dmFsdWUuam9pbihcIiB8IFwiKX0pOyB1c2luZyB0aGUgbGFzdCBvbmUuYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGhlYWRlcnNba2V5XSA9IFN0cmluZyh2YWx1ZVt2YWx1ZS5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWUuam9pbihcIiwgXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhlYWRlcnNba2V5XSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXNDb2RlOiB0aGlzLnN0YXR1c0NvZGUsXG4gICAgICBzdGF0dXNNZXNzYWdlOiB0aGlzLnN0YXR1c01lc3NhZ2UgPz8gU1RBVFVTX0NPREVTW3RoaXMuc3RhdHVzQ29kZV0sXG4gICAgICBoZWFkZXJzLFxuICAgICAgY29va2llcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gLS0tIHN0cmVhbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBwdWJsaWMgb3ZlcnJpZGUgX3RyYW5zZm9ybShcbiAgICBjaHVuazogdW5rbm93bixcbiAgICBfZW5jb2Rpbmc6IEJ1ZmZlckVuY29kaW5nLFxuICAgIGNhbGxiYWNrOiBUcmFuc2Zvcm1DYWxsYmFjayxcbiAgKTogdm9pZCB7XG4gICAgLy8gTGF6aWx5LCBiZWNhdXNlIE5leHQuanMgb25seSBjYWxscyBgZmx1c2hIZWFkZXJzKClgIG9uIHRoZSBwYXRocyB0aGF0XG4gICAgLy8gc3RyZWFtLiBgc2VuZFBheWxvYWRgIGp1c3Qgd3JpdGVzIGFuZCBlbmRzLlxuICAgIHRoaXMuZmx1c2hIZWFkZXJzKCk7XG4gICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIF9mbHVzaChjYWxsYmFjazogVHJhbnNmb3JtQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAvLyBBbiBlbXB0eSBib2R5IHN0aWxsIG5lZWRzIGEgc3RhdHVzIGxpbmUuXG4gICAgdGhpcy5mbHVzaEhlYWRlcnMoKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoYXQgdGhlIGBjb21wcmVzc2lvbmAgbWlkZGxld2FyZSBhZGRzIHVuZGVyIGBuZXh0IHN0YXJ0YCwga2VwdCBmb3IgYXBwXG4gICAqIGNvZGUgdGhhdCBjYWxscyBpdCwgc3VjaCBhcyBgcmVzLndyaXRlKGV2ZW50KTsgcmVzLmZsdXNoKClgIGluIGEgUGFnZXMgQVBJXG4gICAqIHJvdXRlLiBBIG5vLW9wOiB0aGUgc2luaydzIGd6aXAgc3RhZ2UgYWxyZWFkeSBzeW5jLWZsdXNoZXMgZXZlcnkgY2h1bmsuXG4gICAqL1xuICBwdWJsaWMgZmx1c2goKTogdm9pZCB7fVxuXG4gIC8vIC0tLSB0aGUgcmVzdCBvZiB0aGUgU2VydmVyUmVzcG9uc2Ugc3VyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgcHVibGljIGFkZFRyYWlsZXJzKCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJhZGRUcmFpbGVyc1wiKTtcbiAgfVxuICBwdWJsaWMgYXNzaWduU29ja2V0KCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJhc3NpZ25Tb2NrZXRcIik7XG4gIH1cbiAgcHVibGljIGRldGFjaFNvY2tldCgpOiBuZXZlciB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkKFwiZGV0YWNoU29ja2V0XCIpO1xuICB9XG4gIHB1YmxpYyB3cml0ZUNvbnRpbnVlKCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJ3cml0ZUNvbnRpbnVlXCIpO1xuICB9XG4gIHB1YmxpYyB3cml0ZUVhcmx5SGludHMoKTogbmV2ZXIge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZChcIndyaXRlRWFybHlIaW50c1wiKTtcbiAgfVxuICBwdWJsaWMgd3JpdGVQcm9jZXNzaW5nKCk6IG5ldmVyIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoXCJ3cml0ZVByb2Nlc3NpbmdcIik7XG4gIH1cbn1cblxuLyoqXG4gKiBgU2hpbVNlcnZlclJlc3BvbnNlYCBpcyBzdHJ1Y3R1cmFsbHkgYSBgU2VydmVyUmVzcG9uc2VgIGZvciBldmVyeXRoaW5nIE5leHQuanNcbiAqIHRvdWNoZXMsIGJ1dCBub3Qgbm9taW5hbGx5IG9uZSAobm8gc29ja2V0LCBubyB0cmFpbGVycykuIFRoZSBlbnRyeXBvaW50XG4gKiBzaWduYXR1cmUgd2FudHMgdGhlIHJlYWwgdHlwZSwgc28gdGhlIGNhc3QgaXMgY2VudHJhbGl6ZWQgaGVyZSB3aXRoIHRoZVxuICogcmVhc29uaW5nIGF0dGFjaGVkIHJhdGhlciB0aGFuIHJlcGVhdGVkIGF0IGVhY2ggY2FsbCBzaXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNTZXJ2ZXJSZXNwb25zZShyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSk6IFNlcnZlclJlc3BvbnNlIHtcbiAgcmV0dXJuIHJlcyBhcyB1bmtub3duIGFzIFNlcnZlclJlc3BvbnNlO1xufVxuIl19
@@ -64,6 +64,16 @@ describe("ShimServerResponse head", () => {
64
64
  await finished(res);
65
65
  expect(res.finished).toBe(true);
66
66
  });
67
+ it("accepts res.flush() at any point, as `compression` does under next start", async () => {
68
+ const res = new response_1.ShimServerResponse();
69
+ const out = collect(res);
70
+ res.flush();
71
+ res.write("data: 1\n\n");
72
+ res.flush();
73
+ res.end();
74
+ await finished(res);
75
+ expect(out.body()).toBe("data: 1\n\n");
76
+ });
67
77
  });
68
78
  describe("ShimServerResponse headers", () => {
69
79
  it("keeps set-cookie out of the flat map", () => {
@@ -175,4 +185,4 @@ describe("unsupported ServerResponse methods", () => {
175
185
  expect(() => res[method]()).toThrow(`res.${method}()`);
176
186
  });
177
187
  });
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h0dHAvcmVzcG9uc2UudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUE2RTtBQUU3RSxpRUFBaUU7QUFDakUsU0FBUyxPQUFPLENBQUMsR0FBdUI7SUFJdEMsSUFBSSxJQUE4QixDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN2QyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUNoQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0tBQ3BELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBdUI7SUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO0lBQ3ZDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVwQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDMUIsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFO1lBQ3hDLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1YsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNWLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtRQUM5RSxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUNqQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDMUMsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1FBQzlELE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsOERBQThEO1FBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtJQUM1QyxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMxQixVQUFVLEVBQUUsR0FBRztZQUNmLGFBQWEsRUFBRSxPQUFPO1lBQ3RCLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7WUFDL0IsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7UUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxjQUFjLEVBQUUsWUFBWTtZQUM1QixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztZQUM5QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDWSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbkMsY0FBYyxFQUFFLFlBQVk7WUFDNUIsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLHdEQUF3RDtRQUN4RCw0REFBNEQ7UUFDNUQsNENBQTRDO0tBQzdDLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQy9DLE1BQU0sQ0FBQyxJQUFBLHdCQUFhLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtRQUNqRSxNQUFNLENBQ0osSUFBQSx3QkFBYSxFQUFDLENBQUMsNENBQTRDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ3pFLENBQUMsT0FBTyxDQUFDLENBQUMsNENBQTRDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7UUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLHdEQUF3RCxDQUFDO1FBQ3hFLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBOEIsQ0FBQztRQUNuQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQ2xELEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQzFFLGdDQUFnQyxFQUNoQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ1QsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFHakMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc3BvbnNlSGVhZCwgU2hpbVNlcnZlclJlc3BvbnNlLCBzZXRDb29raWVMaXN0IH0gZnJvbSBcIi4vcmVzcG9uc2VcIjtcblxuLyoqIENvbGxlY3RzIHRoZSBoZWFkIGFuZCB0aGUgYm9keSBieXRlcyB0aGUgd2F5IGEgc2luayB3b3VsZC4gKi9cbmZ1bmN0aW9uIGNvbGxlY3QocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpOiB7XG4gIGhlYWQ6ICgpID0+IFJlc3BvbnNlSGVhZCB8IHVuZGVmaW5lZDtcbiAgYm9keTogKCkgPT4gc3RyaW5nO1xufSB7XG4gIGxldCBoZWFkOiBSZXNwb25zZUhlYWQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgcmVzLm9uY2UoXCJoZWFkXCIsICh2YWx1ZTogUmVzcG9uc2VIZWFkKSA9PiB7XG4gICAgaGVhZCA9IHZhbHVlO1xuICB9KTtcbiAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgcmV0dXJuIHtcbiAgICBoZWFkOiAoKSA9PiBoZWFkLFxuICAgIGJvZHk6ICgpID0+IEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZyhcInV0Zi04XCIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5pc2hlZChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcy5vbmNlKFwiZW5kXCIsIHJlc29sdmUpO1xuICAgIHJlcy5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICByZXMucmVzdW1lKCk7XG4gIH0pO1xufVxuXG5kZXNjcmliZShcIlNoaW1TZXJ2ZXJSZXNwb25zZSBoZWFkXCIsICgpID0+IHtcbiAgaXQoXCJlbWl0cyBzdGF0dXMgYW5kIGhlYWRlcnMgb25jZSwgb24gdGhlIGZpcnN0IGJvZHkgYnl0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCkpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgIHJlcy53cml0ZShcIjxwPmhpPC9wPlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCkpLnRvRXF1YWwoe1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgc3RhdHVzTWVzc2FnZTogXCJPS1wiLFxuICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0sXG4gICAgICBjb29raWVzOiBbXSxcbiAgICB9KTtcbiAgICByZXMuZW5kKCk7XG4gICAgYXdhaXQgZmluaXNoZWQocmVzKTtcbiAgICBleHBlY3Qoc2luay5ib2R5KCkpLnRvQmUoXCI8cD5oaTwvcD5cIik7XG4gIH0pO1xuXG4gIGl0KFwic3RpbGwgZW1pdHMgYSBoZWFkIGZvciBhbiBlbXB0eSBib2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3Qgc2luayA9IGNvbGxlY3QocmVzKTtcbiAgICByZXMuc3RhdHVzQ29kZSA9IDIwNDtcbiAgICByZXMuZW5kKCk7XG4gICAgYXdhaXQgZmluaXNoZWQocmVzKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LnN0YXR1c0NvZGUpLnRvQmUoMjA0KTtcbiAgfSk7XG5cbiAgaXQoXCJpcyBpZGVtcG90ZW50LCBzbyBhbiBleHBsaWNpdCBmbHVzaEhlYWRlcnMoKSBwbHVzIGEgd3JpdGUgZW1pdHMgb25jZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IGhlYWRzOiBSZXNwb25zZUhlYWRbXSA9IFtdO1xuICAgIHJlcy5vbihcImhlYWRcIiwgKGhlYWQ6IFJlc3BvbnNlSGVhZCkgPT4gaGVhZHMucHVzaChoZWFkKSk7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIHJlcy53cml0ZShcImFcIik7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIGV4cGVjdChoZWFkcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChyZXMuaGVhZGVyc1NlbnQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVwb3J0cyBgZmluaXNoZWRgIG9uY2UgZW5kZWQsIHdoaWNoIE5vZGVOZXh0UmVzcG9uc2Uuc2VudCByZWFkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbGxlY3QocmVzKTtcbiAgICBleHBlY3QocmVzLmZpbmlzaGVkKS50b0JlKGZhbHNlKTtcbiAgICByZXMuZW5kKFwieFwiKTtcbiAgICBhd2FpdCBmaW5pc2hlZChyZXMpO1xuICAgIGV4cGVjdChyZXMuZmluaXNoZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiU2hpbVNlcnZlclJlc3BvbnNlIGhlYWRlcnNcIiwgKCkgPT4ge1xuICBpdChcImtlZXBzIHNldC1jb29raWUgb3V0IG9mIHRoZSBmbGF0IG1hcFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLmFwcGVuZEhlYWRlcihcIlNldC1Db29raWVcIiwgXCJhPTE7IFBhdGg9L1wiKTtcbiAgICByZXMuYXBwZW5kSGVhZGVyKFwiU2V0LUNvb2tpZVwiLCBcImI9MjsgUGF0aD0vXCIpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJYLU90aGVyXCIsIFwia2VlcFwiKTtcbiAgICByZXMuZmx1c2hIZWFkZXJzKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpPy5jb29raWVzKS50b0VxdWFsKFtcImE9MTsgUGF0aD0vXCIsIFwiYj0yOyBQYXRoPS9cIl0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQoKT8uaGVhZGVycykudG9FcXVhbCh7IFwieC1vdGhlclwiOiBcImtlZXBcIiB9KTtcbiAgfSk7XG5cbiAgaXQoXCJqb2lucyBvdGhlciByZXBlYXRlZCBoZWFkZXJzIHdpdGggYSBjb21tYVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLnNldEhlYWRlcihcIlZhcnlcIiwgW1wiQWNjZXB0XCIsIFwiQ29va2llXCJdKTtcbiAgICByZXMuZmx1c2hIZWFkZXJzKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpPy5oZWFkZXJzLnZhcnkpLnRvQmUoXCJBY2NlcHQsIENvb2tpZVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ0YWtlcyB0aGUgbGFzdCBvZiBtdWx0aXBsZSBMb2NhdGlvbiB2YWx1ZXMgYW5kIHdhcm5zXCIsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3Qgc2luayA9IGNvbGxlY3QocmVzKTtcbiAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICByZXMuc2V0SGVhZGVyKFwiTG9jYXRpb25cIiwgW1wiL2ZpcnN0XCIsIFwiL3NlY29uZFwiXSk7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIC8vIENvbW1hLWpvaW5pbmcgd291bGQgcHJvZHVjZSBhIFVSTCB0aGF0IHJlc29sdmVzIHRvIG5vdGhpbmcuXG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpPy5oZWFkZXJzLmxvY2F0aW9uKS50b0JlKFwiL3NlY29uZFwiKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJpcyBjYXNlLWluc2Vuc2l0aXZlIGFuZCBzdXBwb3J0cyB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIEFQSVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJYLUFcIiwgXCIxXCIpO1xuICAgIGV4cGVjdChyZXMuZ2V0SGVhZGVyKFwieC1hXCIpKS50b0JlKFwiMVwiKTtcbiAgICBleHBlY3QocmVzLmhhc0hlYWRlcihcIlgtQVwiKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QocmVzLmdldEhlYWRlck5hbWVzKCkpLnRvRXF1YWwoW1wieC1hXCJdKTtcbiAgICBleHBlY3QocmVzLmdldEhlYWRlcnMoKSkudG9FcXVhbCh7IFwieC1hXCI6IFwiMVwiIH0pO1xuICAgIHJlcy5yZW1vdmVIZWFkZXIoXCJYLUFcIik7XG4gICAgZXhwZWN0KHJlcy5oYXNIZWFkZXIoXCJ4LWFcIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlNoaW1TZXJ2ZXJSZXNwb25zZS53cml0ZUhlYWRcIiwgKCkgPT4ge1xuICBpdChcImFjY2VwdHMgYSBzdGF0dXMgbWVzc2FnZSBwbHVzIGEgaGVhZGVyIG9iamVjdFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLndyaXRlSGVhZCgzMDEsIFwiTW92ZWRcIiwgeyBMb2NhdGlvbjogXCIvdGhlcmVcIiB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCkpLnRvRXF1YWwoe1xuICAgICAgc3RhdHVzQ29kZTogMzAxLFxuICAgICAgc3RhdHVzTWVzc2FnZTogXCJNb3ZlZFwiLFxuICAgICAgaGVhZGVyczogeyBsb2NhdGlvbjogXCIvdGhlcmVcIiB9LFxuICAgICAgY29va2llczogW10sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgZXZlcnkgdmFsdWUgb2YgYSBuYW1lIHRoZSBmbGF0IGFycmF5IGZvcm0gcmVwZWF0c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLnNldEhlYWRlcihcIlNldC1Db29raWVcIiwgXCJzdGFsZT0xXCIpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJYLUFcIiwgXCJzdGFsZVwiKTtcbiAgICByZXMud3JpdGVIZWFkKDIwMCwgW1wiU2V0LUNvb2tpZVwiLCBcImE9MVwiLCBcIlNldC1Db29raWVcIiwgXCJiPTJcIiwgXCJYLUFcIiwgXCIxXCJdKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LmNvb2tpZXMpLnRvRXF1YWwoW1wiYT0xXCIsIFwiYj0yXCJdKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LmhlYWRlcnNbXCJ4LWFcIl0pLnRvQmUoXCIxXCIpO1xuICB9KTtcblxuICBpdChcImFjY2VwdHMgdGhlIGZsYXQgZXZlbi9vZGQgYXJyYXkgZm9ybVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLndyaXRlSGVhZCgyMDAsIFtcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW5cIiwgXCJYLUJcIiwgXCIyXCJdKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LmhlYWRlcnMpLnRvRXF1YWwoe1xuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluXCIsXG4gICAgICBcIngtYlwiOiBcIjJcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIHRoZSB0dXBsZSBhcnJheSBmb3JtXCIsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3Qgc2luayA9IGNvbGxlY3QocmVzKTtcbiAgICByZXMud3JpdGVIZWFkKDIwMCwgW1xuICAgICAgW1wiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpblwiXSxcbiAgICAgIFtcIlgtQlwiLCBcIjJcIl0sXG4gICAgXSBhcyB1bmtub3duIGFzIHN0cmluZ1tdW10pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQoKT8uaGVhZGVycykudG9FcXVhbCh7XG4gICAgICBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvcGxhaW5cIixcbiAgICAgIFwieC1iXCI6IFwiMlwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInNldENvb2tpZUxpc3RcIiwgKCkgPT4ge1xuICBpdC5lYWNoKFtcbiAgICBcInRva2VuPXg7IGV4cGlyZXM9V2VkLCAyMSBPY3QgMjAyNiAwNzoyODowMCBHTVQ7IFBhdGg9L1wiLFxuICAgIFwidG9rZW49eDsgRXhwaXJlcz1XZWRuZXNkYXksIDIxLU9jdC0yNiAwNzoyODowMCBHTVQ7IFBhdGg9L1wiLFxuICAgIFwiYT0xOyBFeHBpcmVzPVRodSwgMDEgSmFuIDIwMjYgMDA6MDA6MDAgR01UXCIsXG4gIF0pKFwia2VlcHMgYSBzaW5nbGUgY29va2llIHdob2xlOiAlc1wiLCAoY29va2llKSA9PiB7XG4gICAgZXhwZWN0KHNldENvb2tpZUxpc3QoY29va2llKSkudG9FcXVhbChbY29va2llXSk7XG4gIH0pO1xuXG4gIGl0KFwidHJlYXRzIGVhY2ggYXJyYXkgZW50cnkgYXMgb25lIGNvb2tpZSBhbmQgZHJvcHMgZW1wdGllc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgc2V0Q29va2llTGlzdChbXCJhPTE7IGV4cGlyZXM9V2VkLCAyMSBPY3QgMjAyNiAwNzoyODowMCBHTVRcIiwgXCJiPTJcIiwgXCJcIl0pLFxuICAgICkudG9FcXVhbChbXCJhPTE7IGV4cGlyZXM9V2VkLCAyMSBPY3QgMjAyNiAwNzoyODowMCBHTVRcIiwgXCJiPTJcIl0pO1xuICB9KTtcblxuICBpdChcImVtaXRzIGEgbG93ZXJjYXNlLWV4cGlyZXMgY29va2llIGFzIG9uZSBTZXQtQ29va2llIGxpbmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBjb29raWUgPSBcInRva2VuPXg7IGV4cGlyZXM9V2VkLCAyMSBPY3QgMjAyNiAwNzoyODowMCBHTVQ7IFBhdGg9L1wiO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJTZXQtQ29va2llXCIsIGNvb2tpZSk7XG4gICAgbGV0IGhlYWQ6IFJlc3BvbnNlSGVhZCB8IHVuZGVmaW5lZDtcbiAgICByZXMub24oXCJoZWFkXCIsIChoOiBSZXNwb25zZUhlYWQpID0+IChoZWFkID0gaCkpO1xuICAgIHJlcy5mbHVzaEhlYWRlcnMoKTtcbiAgICBleHBlY3QoaGVhZD8uY29va2llcykudG9FcXVhbChbY29va2llXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwidW5zdXBwb3J0ZWQgU2VydmVyUmVzcG9uc2UgbWV0aG9kc1wiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1wiYWRkVHJhaWxlcnNcIiwgXCJhc3NpZ25Tb2NrZXRcIiwgXCJ3cml0ZUNvbnRpbnVlXCIsIFwid3JpdGVFYXJseUhpbnRzXCJdKShcbiAgICBcInRocm93cyBhIG5hbWVkIGVycm9yIGZyb20gJXMoKVwiLFxuICAgIChtZXRob2QpID0+IHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKSBhcyB1bmtub3duIGFzIFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICAoKSA9PiB2b2lkXG4gICAgICA+O1xuICAgICAgZXhwZWN0KCgpID0+IHJlc1ttZXRob2RdKCkpLnRvVGhyb3coYHJlcy4ke21ldGhvZH0oKWApO1xuICAgIH0sXG4gICk7XG59KTtcbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h0dHAvcmVzcG9uc2UudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUE2RTtBQUU3RSxpRUFBaUU7QUFDakUsU0FBUyxPQUFPLENBQUMsR0FBdUI7SUFJdEMsSUFBSSxJQUE4QixDQUFDO0lBQ25DLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQW1CLEVBQUUsRUFBRTtRQUN2QyxJQUFJLEdBQUcsS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDSCxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RELE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSTtRQUNoQixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0tBQ3BELENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsR0FBdUI7SUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDZixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO0lBQ3ZDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVwQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDMUIsVUFBVSxFQUFFLEdBQUc7WUFDZixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFO1lBQ3hDLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1YsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNWLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtRQUM5RSxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUNqQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQWtCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNmLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtFQUFrRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2hGLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDYixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDeEYsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNaLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNWLE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7SUFDMUMsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsR0FBRyxFQUFFO1FBQzlELE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNqRCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsOERBQThEO1FBQzlELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0RCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakQsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtJQUM1QyxFQUFFLENBQUMsK0NBQStDLEVBQUUsR0FBRyxFQUFFO1FBQ3ZELE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMxQixVQUFVLEVBQUUsR0FBRztZQUNmLGFBQWEsRUFBRSxPQUFPO1lBQ3RCLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUU7WUFDL0IsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7UUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixHQUFHLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN2QyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNuQyxjQUFjLEVBQUUsWUFBWTtZQUM1QixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtRQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLDZCQUFrQixFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pCLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztZQUM5QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7U0FDWSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbkMsY0FBYyxFQUFFLFlBQVk7WUFDNUIsS0FBSyxFQUFFLEdBQUc7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUU7SUFDN0IsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLHdEQUF3RDtRQUN4RCw0REFBNEQ7UUFDNUQsNENBQTRDO0tBQzdDLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQy9DLE1BQU0sQ0FBQyxJQUFBLHdCQUFhLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRTtRQUNqRSxNQUFNLENBQ0osSUFBQSx3QkFBYSxFQUFDLENBQUMsNENBQTRDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQ3pFLENBQUMsT0FBTyxDQUFDLENBQUMsNENBQTRDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5REFBeUQsRUFBRSxHQUFHLEVBQUU7UUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLHdEQUF3RCxDQUFDO1FBQ3hFLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksSUFBOEIsQ0FBQztRQUNuQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRCxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkIsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO0lBQ2xELEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQzFFLGdDQUFnQyxFQUNoQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ1QsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFHakMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc3BvbnNlSGVhZCwgU2hpbVNlcnZlclJlc3BvbnNlLCBzZXRDb29raWVMaXN0IH0gZnJvbSBcIi4vcmVzcG9uc2VcIjtcblxuLyoqIENvbGxlY3RzIHRoZSBoZWFkIGFuZCB0aGUgYm9keSBieXRlcyB0aGUgd2F5IGEgc2luayB3b3VsZC4gKi9cbmZ1bmN0aW9uIGNvbGxlY3QocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpOiB7XG4gIGhlYWQ6ICgpID0+IFJlc3BvbnNlSGVhZCB8IHVuZGVmaW5lZDtcbiAgYm9keTogKCkgPT4gc3RyaW5nO1xufSB7XG4gIGxldCBoZWFkOiBSZXNwb25zZUhlYWQgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgcmVzLm9uY2UoXCJoZWFkXCIsICh2YWx1ZTogUmVzcG9uc2VIZWFkKSA9PiB7XG4gICAgaGVhZCA9IHZhbHVlO1xuICB9KTtcbiAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bms6IEJ1ZmZlcikgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgcmV0dXJuIHtcbiAgICBoZWFkOiAoKSA9PiBoZWFkLFxuICAgIGJvZHk6ICgpID0+IEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZyhcInV0Zi04XCIpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5pc2hlZChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcy5vbmNlKFwiZW5kXCIsIHJlc29sdmUpO1xuICAgIHJlcy5vbmNlKFwiZXJyb3JcIiwgcmVqZWN0KTtcbiAgICByZXMucmVzdW1lKCk7XG4gIH0pO1xufVxuXG5kZXNjcmliZShcIlNoaW1TZXJ2ZXJSZXNwb25zZSBoZWFkXCIsICgpID0+IHtcbiAgaXQoXCJlbWl0cyBzdGF0dXMgYW5kIGhlYWRlcnMgb25jZSwgb24gdGhlIGZpcnN0IGJvZHkgYnl0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCkpLnRvQmVVbmRlZmluZWQoKTtcblxuICAgIHJlcy53cml0ZShcIjxwPmhpPC9wPlwiKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCkpLnRvRXF1YWwoe1xuICAgICAgc3RhdHVzQ29kZTogMjAwLFxuICAgICAgc3RhdHVzTWVzc2FnZTogXCJPS1wiLFxuICAgICAgaGVhZGVyczogeyBcImNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0sXG4gICAgICBjb29raWVzOiBbXSxcbiAgICB9KTtcbiAgICByZXMuZW5kKCk7XG4gICAgYXdhaXQgZmluaXNoZWQocmVzKTtcbiAgICBleHBlY3Qoc2luay5ib2R5KCkpLnRvQmUoXCI8cD5oaTwvcD5cIik7XG4gIH0pO1xuXG4gIGl0KFwic3RpbGwgZW1pdHMgYSBoZWFkIGZvciBhbiBlbXB0eSBib2R5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3Qgc2luayA9IGNvbGxlY3QocmVzKTtcbiAgICByZXMuc3RhdHVzQ29kZSA9IDIwNDtcbiAgICByZXMuZW5kKCk7XG4gICAgYXdhaXQgZmluaXNoZWQocmVzKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LnN0YXR1c0NvZGUpLnRvQmUoMjA0KTtcbiAgfSk7XG5cbiAgaXQoXCJpcyBpZGVtcG90ZW50LCBzbyBhbiBleHBsaWNpdCBmbHVzaEhlYWRlcnMoKSBwbHVzIGEgd3JpdGUgZW1pdHMgb25jZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IGhlYWRzOiBSZXNwb25zZUhlYWRbXSA9IFtdO1xuICAgIHJlcy5vbihcImhlYWRcIiwgKGhlYWQ6IFJlc3BvbnNlSGVhZCkgPT4gaGVhZHMucHVzaChoZWFkKSk7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIHJlcy53cml0ZShcImFcIik7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIGV4cGVjdChoZWFkcykudG9IYXZlTGVuZ3RoKDEpO1xuICAgIGV4cGVjdChyZXMuaGVhZGVyc1NlbnQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwicmVwb3J0cyBgZmluaXNoZWRgIG9uY2UgZW5kZWQsIHdoaWNoIE5vZGVOZXh0UmVzcG9uc2Uuc2VudCByZWFkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbGxlY3QocmVzKTtcbiAgICBleHBlY3QocmVzLmZpbmlzaGVkKS50b0JlKGZhbHNlKTtcbiAgICByZXMuZW5kKFwieFwiKTtcbiAgICBhd2FpdCBmaW5pc2hlZChyZXMpO1xuICAgIGV4cGVjdChyZXMuZmluaXNoZWQpLnRvQmUodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyByZXMuZmx1c2goKSBhdCBhbnkgcG9pbnQsIGFzIGBjb21wcmVzc2lvbmAgZG9lcyB1bmRlciBuZXh0IHN0YXJ0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3Qgb3V0ID0gY29sbGVjdChyZXMpO1xuICAgIHJlcy5mbHVzaCgpO1xuICAgIHJlcy53cml0ZShcImRhdGE6IDFcXG5cXG5cIik7XG4gICAgcmVzLmZsdXNoKCk7XG4gICAgcmVzLmVuZCgpO1xuICAgIGF3YWl0IGZpbmlzaGVkKHJlcyk7XG4gICAgZXhwZWN0KG91dC5ib2R5KCkpLnRvQmUoXCJkYXRhOiAxXFxuXFxuXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlNoaW1TZXJ2ZXJSZXNwb25zZSBoZWFkZXJzXCIsICgpID0+IHtcbiAgaXQoXCJrZWVwcyBzZXQtY29va2llIG91dCBvZiB0aGUgZmxhdCBtYXBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBzaW5rID0gY29sbGVjdChyZXMpO1xuICAgIHJlcy5hcHBlbmRIZWFkZXIoXCJTZXQtQ29va2llXCIsIFwiYT0xOyBQYXRoPS9cIik7XG4gICAgcmVzLmFwcGVuZEhlYWRlcihcIlNldC1Db29raWVcIiwgXCJiPTI7IFBhdGg9L1wiKTtcbiAgICByZXMuc2V0SGVhZGVyKFwiWC1PdGhlclwiLCBcImtlZXBcIik7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQoKT8uY29va2llcykudG9FcXVhbChbXCJhPTE7IFBhdGg9L1wiLCBcImI9MjsgUGF0aD0vXCJdKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LmhlYWRlcnMpLnRvRXF1YWwoeyBcIngtb3RoZXJcIjogXCJrZWVwXCIgfSk7XG4gIH0pO1xuXG4gIGl0KFwiam9pbnMgb3RoZXIgcmVwZWF0ZWQgaGVhZGVycyB3aXRoIGEgY29tbWFcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBzaW5rID0gY29sbGVjdChyZXMpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJWYXJ5XCIsIFtcIkFjY2VwdFwiLCBcIkNvb2tpZVwiXSk7XG4gICAgcmVzLmZsdXNoSGVhZGVycygpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQoKT8uaGVhZGVycy52YXJ5KS50b0JlKFwiQWNjZXB0LCBDb29raWVcIik7XG4gIH0pO1xuXG4gIGl0KFwidGFrZXMgdGhlIGxhc3Qgb2YgbXVsdGlwbGUgTG9jYXRpb24gdmFsdWVzIGFuZCB3YXJuc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgcmVzLnNldEhlYWRlcihcIkxvY2F0aW9uXCIsIFtcIi9maXJzdFwiLCBcIi9zZWNvbmRcIl0pO1xuICAgIHJlcy5mbHVzaEhlYWRlcnMoKTtcbiAgICAvLyBDb21tYS1qb2luaW5nIHdvdWxkIHByb2R1Y2UgYSBVUkwgdGhhdCByZXNvbHZlcyB0byBub3RoaW5nLlxuICAgIGV4cGVjdChzaW5rLmhlYWQoKT8uaGVhZGVycy5sb2NhdGlvbikudG9CZShcIi9zZWNvbmRcIik7XG4gICAgZXhwZWN0KHdhcm4pLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwiaXMgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgc3VwcG9ydHMgdGhlIHJlc3Qgb2YgdGhlIGhlYWRlciBBUElcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICByZXMuc2V0SGVhZGVyKFwiWC1BXCIsIFwiMVwiKTtcbiAgICBleHBlY3QocmVzLmdldEhlYWRlcihcIngtYVwiKSkudG9CZShcIjFcIik7XG4gICAgZXhwZWN0KHJlcy5oYXNIZWFkZXIoXCJYLUFcIikpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHJlcy5nZXRIZWFkZXJOYW1lcygpKS50b0VxdWFsKFtcIngtYVwiXSk7XG4gICAgZXhwZWN0KHJlcy5nZXRIZWFkZXJzKCkpLnRvRXF1YWwoeyBcIngtYVwiOiBcIjFcIiB9KTtcbiAgICByZXMucmVtb3ZlSGVhZGVyKFwiWC1BXCIpO1xuICAgIGV4cGVjdChyZXMuaGFzSGVhZGVyKFwieC1hXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJTaGltU2VydmVyUmVzcG9uc2Uud3JpdGVIZWFkXCIsICgpID0+IHtcbiAgaXQoXCJhY2NlcHRzIGEgc3RhdHVzIG1lc3NhZ2UgcGx1cyBhIGhlYWRlciBvYmplY3RcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBzaW5rID0gY29sbGVjdChyZXMpO1xuICAgIHJlcy53cml0ZUhlYWQoMzAxLCBcIk1vdmVkXCIsIHsgTG9jYXRpb246IFwiL3RoZXJlXCIgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDMwMSxcbiAgICAgIHN0YXR1c01lc3NhZ2U6IFwiTW92ZWRcIixcbiAgICAgIGhlYWRlcnM6IHsgbG9jYXRpb246IFwiL3RoZXJlXCIgfSxcbiAgICAgIGNvb2tpZXM6IFtdLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGV2ZXJ5IHZhbHVlIG9mIGEgbmFtZSB0aGUgZmxhdCBhcnJheSBmb3JtIHJlcGVhdHNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBzaW5rID0gY29sbGVjdChyZXMpO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJTZXQtQ29va2llXCIsIFwic3RhbGU9MVwiKTtcbiAgICByZXMuc2V0SGVhZGVyKFwiWC1BXCIsIFwic3RhbGVcIik7XG4gICAgcmVzLndyaXRlSGVhZCgyMDAsIFtcIlNldC1Db29raWVcIiwgXCJhPTFcIiwgXCJTZXQtQ29va2llXCIsIFwiYj0yXCIsIFwiWC1BXCIsIFwiMVwiXSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpPy5jb29raWVzKS50b0VxdWFsKFtcImE9MVwiLCBcImI9MlwiXSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpPy5oZWFkZXJzW1wieC1hXCJdKS50b0JlKFwiMVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIHRoZSBmbGF0IGV2ZW4vb2RkIGFycmF5IGZvcm1cIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBzaW5rID0gY29sbGVjdChyZXMpO1xuICAgIHJlcy53cml0ZUhlYWQoMjAwLCBbXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3BsYWluXCIsIFwiWC1CXCIsIFwiMlwiXSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZCgpPy5oZWFkZXJzKS50b0VxdWFsKHtcbiAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpblwiLFxuICAgICAgXCJ4LWJcIjogXCIyXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyB0aGUgdHVwbGUgYXJyYXkgZm9ybVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IHNpbmsgPSBjb2xsZWN0KHJlcyk7XG4gICAgcmVzLndyaXRlSGVhZCgyMDAsIFtcbiAgICAgIFtcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW5cIl0sXG4gICAgICBbXCJYLUJcIiwgXCIyXCJdLFxuICAgIF0gYXMgdW5rbm93biBhcyBzdHJpbmdbXVtdKTtcbiAgICBleHBlY3Qoc2luay5oZWFkKCk/LmhlYWRlcnMpLnRvRXF1YWwoe1xuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluXCIsXG4gICAgICBcIngtYlwiOiBcIjJcIixcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJzZXRDb29raWVMaXN0XCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgXCJ0b2tlbj14OyBleHBpcmVzPVdlZCwgMjEgT2N0IDIwMjYgMDc6Mjg6MDAgR01UOyBQYXRoPS9cIixcbiAgICBcInRva2VuPXg7IEV4cGlyZXM9V2VkbmVzZGF5LCAyMS1PY3QtMjYgMDc6Mjg6MDAgR01UOyBQYXRoPS9cIixcbiAgICBcImE9MTsgRXhwaXJlcz1UaHUsIDAxIEphbiAyMDI2IDAwOjAwOjAwIEdNVFwiLFxuICBdKShcImtlZXBzIGEgc2luZ2xlIGNvb2tpZSB3aG9sZTogJXNcIiwgKGNvb2tpZSkgPT4ge1xuICAgIGV4cGVjdChzZXRDb29raWVMaXN0KGNvb2tpZSkpLnRvRXF1YWwoW2Nvb2tpZV0pO1xuICB9KTtcblxuICBpdChcInRyZWF0cyBlYWNoIGFycmF5IGVudHJ5IGFzIG9uZSBjb29raWUgYW5kIGRyb3BzIGVtcHRpZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHNldENvb2tpZUxpc3QoW1wiYT0xOyBleHBpcmVzPVdlZCwgMjEgT2N0IDIwMjYgMDc6Mjg6MDAgR01UXCIsIFwiYj0yXCIsIFwiXCJdKSxcbiAgICApLnRvRXF1YWwoW1wiYT0xOyBleHBpcmVzPVdlZCwgMjEgT2N0IDIwMjYgMDc6Mjg6MDAgR01UXCIsIFwiYj0yXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJlbWl0cyBhIGxvd2VyY2FzZS1leHBpcmVzIGNvb2tpZSBhcyBvbmUgU2V0LUNvb2tpZSBsaW5lXCIsICgpID0+IHtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3QgY29va2llID0gXCJ0b2tlbj14OyBleHBpcmVzPVdlZCwgMjEgT2N0IDIwMjYgMDc6Mjg6MDAgR01UOyBQYXRoPS9cIjtcbiAgICByZXMuc2V0SGVhZGVyKFwiU2V0LUNvb2tpZVwiLCBjb29raWUpO1xuICAgIGxldCBoZWFkOiBSZXNwb25zZUhlYWQgfCB1bmRlZmluZWQ7XG4gICAgcmVzLm9uKFwiaGVhZFwiLCAoaDogUmVzcG9uc2VIZWFkKSA9PiAoaGVhZCA9IGgpKTtcbiAgICByZXMuZmx1c2hIZWFkZXJzKCk7XG4gICAgZXhwZWN0KGhlYWQ/LmNvb2tpZXMpLnRvRXF1YWwoW2Nvb2tpZV0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInVuc3VwcG9ydGVkIFNlcnZlclJlc3BvbnNlIG1ldGhvZHNcIiwgKCkgPT4ge1xuICBpdC5lYWNoKFtcImFkZFRyYWlsZXJzXCIsIFwiYXNzaWduU29ja2V0XCIsIFwid3JpdGVDb250aW51ZVwiLCBcIndyaXRlRWFybHlIaW50c1wiXSkoXG4gICAgXCJ0aHJvd3MgYSBuYW1lZCBlcnJvciBmcm9tICVzKClcIixcbiAgICAobWV0aG9kKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCkgYXMgdW5rbm93biBhcyBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgKCkgPT4gdm9pZFxuICAgICAgPjtcbiAgICAgIGV4cGVjdCgoKSA9PiByZXNbbWV0aG9kXSgpKS50b1Rocm93KGByZXMuJHttZXRob2R9KClgKTtcbiAgICB9LFxuICApO1xufSk7XG4iXX0=
@@ -76,11 +76,15 @@ function pipeToSink(req, res, sink, options) {
76
76
  const stages = [];
77
77
  const gzip = shouldGzip(req, res, head, options);
78
78
  if (gzip) {
79
- const compressor = (0, node_zlib_1.createGzip)();
80
- // Next.js calls `res.flush()` after each chunk it writes
81
- // (`next/dist/server/pipe-readable.js`); without forwarding it, streamed
82
- // HTML sits in zlib's buffer and the response arrives all at once.
83
- res.flush = () => compressor.flush(node_zlib_1.constants.Z_SYNC_FLUSH);
79
+ // A sync flush on every chunk, so that each one reaches the client as
80
+ // soon as it is written rather than sitting in zlib's buffer until the
81
+ // next. This has to be zlib's own per-write flag: forwarding Next.js's
82
+ // `res.flush()` (`next/dist/server/pipe-readable.js`) to
83
+ // `compressor.flush()` queued the flush in zlib *ahead of* the chunk
84
+ // whenever backpressure held that chunk in `res`'s buffer, so the last
85
+ // chunk before a pause stayed in zlib - a `<Suspense>` fallback arrived
86
+ // only with the slow boundary it was standing in for (issue #321).
87
+ const compressor = (0, node_zlib_1.createGzip)({ flush: node_zlib_1.constants.Z_SYNC_FLUSH });
84
88
  stages.push(compressor);
85
89
  }
86
90
  if (sink.padEmptyBody) {
@@ -185,4 +189,4 @@ function padEmptyBody() {
185
189
  },
186
190
  });
187
191
  }
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h0dHAvc2luay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStGQSxnQ0F5REM7QUFpQ0Qsa0NBc0JDO0FBL01EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILDZDQUFrRDtBQUNsRCxtREFBZ0Q7QUFDaEQseUNBQWtEO0FBa0NsRDs7OztHQUlHO0FBQ0gsTUFBTSxZQUFZLEdBQ2hCLDhGQUE4RixDQUFDO0FBRWpHOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdkQsa0RBQWtEO0FBQ2xELE1BQU0sWUFBWSxHQUFHLHFDQUFxQyxDQUFDO0FBTzNEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsR0FBd0IsRUFDeEIsR0FBdUIsRUFDdkIsSUFBa0IsRUFDbEIsT0FBb0I7SUFFcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsNEVBQTRFO1FBQzVFLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQWtCLEVBQUUs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c0NvbnRlbnQiOlsiLyoqXG4gKiBDb25uZWN0aW5nIGEge0BsaW5rIFNoaW1TZXJ2ZXJSZXNwb25zZX0gdG8gdGhlIGJ5dGVzLW91dCBzaWRlIG9mIGEgc2hlbGwsIGFuZFxuICogdGhlIG9uZSB0aGluZyB0aGF0IGhhcyB0byBoYXBwZW4gb24gdGhlIHdheTogZ3ppcC5cbiAqXG4gKiBUaGlzIGxpdmVzIGluIHNoYXJlZCBydW50aW1lIGNvZGUgcmF0aGVyIHRoYW4gaW4gdGhlIExhbWJkYSBzaGVsbCBvbiBwdXJwb3NlLlxuICogTmVpdGhlciBtYW5hZ2VkIGxheWVyIGNhbiBjb21wcmVzcyBhICpzdHJlYW1lZCogcmVzcG9uc2U6XG4gKlxuICogLSBBUEkgR2F0ZXdheSdzIGBtaW5Db21wcmVzc2lvblNpemVgIGlzIHNldCAoYHNyYy9uZXh0anMtYXBpLnRzYCkgYnV0IGluZXJ0LFxuICogICBiZWNhdXNlIGNkay1uZXh0anMgYWxzbyBzZXRzIGBSZXNwb25zZVRyYW5zZmVyTW9kZS5TVFJFQU1gLCBhbmQgU1RSRUFNIGRyb3BzXG4gKiAgIGNvbnRlbnQgZW5jb2Rpbmcgb3V0cmlnaHQg4oCUIFwiSWYgeW91IHdhbnQgdG8gY29tcHJlc3MgeW91ciBpbnRlZ3JhdGlvblxuICogICByZXNwb25zZSwgZG8gdGhpcyBpbiB5b3VyIGludGVncmF0aW9uXCIuXG4gKiAtIENsb3VkRnJvbnQgcmVxdWlyZXMgdGhlIG9yaWdpbiB0byBzZW5kIGBDb250ZW50LUxlbmd0aGAsIHdoaWNoIGEgc3RyZWFtZWRcbiAqICAgcmVzcG9uc2UgYnkgZGVmaW5pdGlvbiBkb2VzIG5vdC4gSXQgc3RpbGwgY29tcHJlc3NlcyBub24tc3RyZWFtZWQgcmVzcG9uc2VzXG4gKiAgIGFuZCBTMyBhc3NldHMsIHNvIHRoZSBnYXAgaXMgZXhhY3RseSBzdHJlYW1lZCBIVE1MIGFuZCBSU0MgcGF5bG9hZHMg4oCUIHRoZVxuICogICBsYXJnZXN0IHRleHQgcmVzcG9uc2VzIHdlIHNlcnZlLlxuICpcbiAqIFVudGlsIHRoZSBjb250YWluZXIgcGF0aCB3YXMgZHJvcHBlZCwgTGFtYmRhIFdlYiBBZGFwdGVyIGRpZCB0aGlzIGZvciB1cywgd2hpY2hcbiAqIGlzIHdoeSBub3RoaW5nIGluIHRoZSBvbGQgY29kZSBtZW50aW9ucyBpdC4gKipEb24ndCBcImZpeFwiIHRoZSBBUEkgR2F0ZXdheSBvclxuICogQ2xvdWRGcm9udCBzZXR0aW5ncyBleHBlY3RpbmcgdGhlbSB0byB0YWtlIG92ZXIuKipcbiAqXG4gKiBnemlwIHJhdGhlciB0aGFuIGJyb3RsaTogYnJvdGxpJ3Mgc3RyZWFtaW5nIHRocm91Z2hwdXQgYXQgZGVmYXVsdCBxdWFsaXR5IGlzXG4gKiBwb29yLCBhbmQgQ2xvdWRGcm9udCBwcmVmZXJzIGBicmAgb25seSB3aGVuIHRoZSBvcmlnaW4gZGlkbid0IGFscmVhZHkgZW5jb2RlIOKAlFxuICogd2hpY2ggc3RvcHMgYXBwbHlpbmcgdGhlIG1vbWVudCB3ZSBzZXQgYGNvbnRlbnQtZW5jb2RpbmdgIG91cnNlbHZlcy5cbiAqL1xuaW1wb3J0IHsgVHJhbnNmb3JtLCBXcml0YWJsZSB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHsgcGlwZWxpbmUgfSBmcm9tIFwibm9kZTpzdHJlYW0vcHJvbWlzZXNcIjtcbmltcG9ydCB7IGNvbnN0YW50cywgY3JlYXRlR3ppcCB9IGZyb20gXCJub2RlOnpsaWJcIjtcbmltcG9ydCB0eXBlIHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc3BvbnNlSGVhZCwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vcmVzcG9uc2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZVNpbmsge1xuICAvKipcbiAgICogU2V0IGJ5IHRoZSBMYW1iZGEgc2luaywgZm9yIGJvdGggaW50ZWdyYXRpb25zOiBhIHN0cmVhbWVkIExhbWJkYSByZXNwb25zZVxuICAgKiB3aXRoIHplcm8gcGF5bG9hZCBieXRlcyBhZnRlciB0aGUgbWV0YWRhdGEgZGVsaW1pdGVyIGlzIG5vdCByZWNvZ25pemVkIGFzIGFcbiAgICogbWV0YWRhdGEgcmVzcG9uc2UgYXQgYWxsLCBzbyBhIHNpbmdsZSBzcGFjZSBpcyB3cml0dGVuIGluc3RlYWQgb2Ygbm90aGluZy5cbiAgICpcbiAgICogQVBJIEdhdGV3YXkgYW5zd2VycyA1MDIuIEEgRnVuY3Rpb24gVVJMIGlzIHdvcnNlIGJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdFxuICAgKiB3b3JrZWQ6IHRoZSBwcmVsdWRlIGlzIGRpc2NhcmRlZCBhbmQgdGhlIHJlc3BvbnNlIGFycml2ZXMgYXMgYSBiYXJlXG4gICAqIGAyMDAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYCB3aXRoIGFuIGVtcHR5IGJvZHksIG5vbmUgb2YgdGhlIGFwcCdzIGhlYWRlcnMsXG4gICAqIGFuZCBhbiBIVFRQLzIgc3RyZWFtIHRoYXQgZG9lcyBub3QgY2xvc2UgY2xlYW5seSDigJQgd2hhdGV2ZXIgdGhlIHJlYWwgc3RhdHVzXG4gICAqIHdhcy4gTWVhc3VyZWQgYWdhaW5zdCBhIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGRlcGxveW1lbnQ6IGBIRUFEYCBvbiBhIDQwNFxuICAgKiBwYWdlIGFuc3dlcmVkIGAyMDBgLCBhbmQgYSBzZXJ2ZXIgYWN0aW9uIHdob3NlIHJlcGx5IGlzIGVtcHR5IChhbiBhY3Rpb24gdGhhdFxuICAgKiBvbmx5IGByZWRpcmVjdCgpYHMsIHdoaWNoIE5leHQuanMgYW5zd2VycyB3aXRoIGB4LWFjdGlvbi1yZWRpcmVjdGAgYW5kIG5vXG4gICAqIGJvZHkpIGxvc3QgdGhlIHJlZGlyZWN0IGhlYWRlciBhbmQgc28gbmV2ZXIgbmF2aWdhdGVkLlxuICAgKlxuICAgKiBUaGUgcHJlLWFkYXB0ZXIgaW1hZ2UgaGFuZGxlciBjYXJyaWVkIHRoZSBzYW1lIHdvcmthcm91bmQgZm9yIDMwNHMuIFJGQyA5MTEwXG4gICAqIGZvcmJpZHMgYSBib2R5IG9uIDIwNC8zMDQsIGFuZCBhIHNwYWNlIHRlY2huaWNhbGx5IHZpb2xhdGVzIHRoYXQsIGJ1dCBsb3NpbmdcbiAgICogdGhlIHN0YXR1cyBlbnRpcmVseSBpcyB0aGUgd29yc2UgZmFpbHVyZSDigJQgYW5kIG9uIHRoZSBDbG91ZEZyb250IHBhdGggYVxuICAgKiBjb25kaXRpb25hbCByZXF1ZXN0IGNhbm5vdCByZWFjaCB0aGUgb3JpZ2luIGFueXdheSwgYmVjYXVzZSBgaWYtbm9uZS1tYXRjaGBcbiAgICogaXMgbm90IGluIHRoZSBkeW5hbWljIGNhY2hlIHBvbGljeSdzIGhlYWRlciBhbGxvd2xpc3QuIFRoZSBjb250YWluZXIgc2lua1xuICAgKiB3cml0ZXMgdG8gYSByZWFsIGBTZXJ2ZXJSZXNwb25zZWAgYW5kIGRvZXMgbm90IHNldCB0aGlzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFkRW1wdHlCb2R5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENhbGxlZCBleGFjdGx5IG9uY2UsIGJlZm9yZSBhbnkgYm9keSBieXRlLCB3aXRoIHRoZSBmaW5hbCBoZWFkLiBSZXR1cm5zIHRoZVxuICAgKiBzdHJlYW0gdGhlIGJvZHkgaXMgd3JpdHRlbiB0bzsge0BsaW5rIHBpcGVUb1Npbmt9IGVuZHMgaXQuXG4gICAqL1xuICBiZWdpbihoZWFkOiBSZXNwb25zZUhlYWQpOiBXcml0YWJsZTtcbn1cblxuLyoqXG4gKiBDb250ZW50IHR5cGVzIHdvcnRoIGNvbXByZXNzaW5nLiBFdmVyeXRoaW5nIE5leHQgc3RyZWFtcyBhcyBIVE1MIG9yIGFuIFJTQ1xuICogcGF5bG9hZCBpcyBgdGV4dC8qYDsgaW1hZ2VzIGFuZCBmb250cyBhcmUgYWxyZWFkeSBjb21wcmVzc2VkLCBhbmQgZ3ppcHBpbmcgYW5cbiAqIG9wdGltaXplZCBBVklGIGp1c3QgYnVybnMgQ1BVLlxuICovXG5jb25zdCBDT01QUkVTU0lCTEUgPVxuICAvXig/OnRleHRcXC98YXBwbGljYXRpb25cXC8oPzpqc29ufGphdmFzY3JpcHR8eG1sfG1hbmlmZXN0fHJzc1xcK3htbHxhdG9tXFwreG1sKXxpbWFnZVxcL3N2Z1xcK3htbCkvO1xuXG4vKipcbiAqIFN0YXR1c2VzIHdob3NlIGJvZHkgbXVzdCBub3QgYmUgY29tcHJlc3NlZDogMjA0IGFuZCAzMDQgaGF2ZSBub25lLCBhbmQgYSAyMDYnc1xuICogYm9keSBpcyBhIGJ5dGUgcmFuZ2Ugb2YgdGhlICp1bmNvbXByZXNzZWQqIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIDIwNiBpcyByZWFjaGFibGUg4oCUIGBzZXJ2ZVN0YXRpY0ZpbGVgIGlzIGBzZW5kYCB1bmRlcm5lYXRoLCB3aGljaCBhZHZlcnRpc2VzXG4gKiBgQWNjZXB0LVJhbmdlczogYnl0ZXNgIGFuZCBob25vcnMgYFJhbmdlYCBvbiB0aGUgc3RhdGljIEhUTUwgdGhlIHJ1bnRpbWUgc2VydmVzXG4gKiBpdHNlbGYuIEd6aXBwaW5nIG9uZSBwcm9kdWNlZCBhIHJlc3BvbnNlIHdob3NlIGBDb250ZW50LVJhbmdlYCBzdGlsbCBkZXNjcmliZWRcbiAqIHRoZSB1bmNvbXByZXNzZWQgc2xpY2UgKGB3aXRoR3ppcEhlYWRlcnNgIGRyb3BzIGBjb250ZW50LWxlbmd0aGAgYnV0IGNhbm5vdFxuICogcmVzdGF0ZSBhIHJhbmdlKSwgc28gdGhlIGNsaWVudCBnb3QgYnl0ZXMgdGhhdCBkaWQgbm90IG1hdGNoIHdoYXQgaXQgYXNrZWQgZm9yLlxuICovXG5jb25zdCBVTkNPTVBSRVNTQUJMRV9TVEFUVVMgPSBuZXcgU2V0KFsyMDQsIDIwNiwgMzA0XSk7XG5cbi8qKiBgY29tcHJlc3Npb25gJ3Mgb3duIHRlc3QgZm9yIHRoZSBkaXJlY3RpdmUuICovXG5jb25zdCBOT19UUkFOU0ZPUk0gPSAvKD86XnwsKVxccyo/bm8tdHJhbnNmb3JtXFxzKj8oPzosfCQpL2k7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZU9wdGlvbnMge1xuICAvKiogYG5leHQuY29uZmlnYCBgY29tcHJlc3NgLiAqL1xuICByZWFkb25seSBjb21wcmVzczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQaXBlIGByZXNgIGludG8gYHNpbmtgLCBnemlwcGluZyB3aGVuIHRoYXQgaXMgYm90aCBhbGxvd2VkIGFuZCB1c2VmdWwuXG4gKlxuICogUmVzb2x2ZXMgd2hlbiB0aGUgc2luaydzIHN0cmVhbSBoYXMgZmluaXNoZWQsIHdoaWNoIGZvciBMYW1iZGEgaXMgdGhlIHBvaW50IHRoZVxuICogY2xpZW50IGhhcyB0aGUgd2hvbGUgcmVzcG9uc2UuIE11c3QgYmUgY2FsbGVkICpiZWZvcmUqIGFueXRoaW5nIHdyaXRlcyB0b1xuICogYHJlc2AsIGJlY2F1c2UgaXQgc3Vic2NyaWJlcyB0byB0aGUgb25lLXNob3QgYFwiaGVhZFwiYCBldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGVUb1NpbmsoXG4gIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgcmVzOiBTaGltU2VydmVyUmVzcG9uc2UsXG4gIHNpbms6IFJlc3BvbnNlU2luayxcbiAgb3B0aW9uczogUGlwZU9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBsZXQgcGlwaW5nID0gZmFsc2U7XG4gICAgcmVzLm9uY2UoXCJlcnJvclwiLCByZWplY3QpO1xuICAgIC8vIERlc3Ryb3llZCBiZWZvcmUgdGhlIGhlYWQgd2VudCBvdXQsIGFuZCB3aXRob3V0IGFuIGVycm9yOiBhIGNsaWVudCB0aGF0XG4gICAgLy8gZGlzY29ubmVjdGVkIGJlZm9yZSB0aGUgZmlyc3QgYnl0ZSwgd2hpY2ggYGhhbmRsZSgpYCBhbnN3ZXJzIHdpdGhcbiAgICAvLyBgcmVzLmRlc3Ryb3koKWAuIGBUcmFuc2Zvcm0uZGVzdHJveSgpYCB3aXRoIG5vIGFyZ3VtZW50IGVtaXRzIG9ubHlcbiAgICAvLyBgXCJjbG9zZVwiYCwgYW5kIHRoZSBwaXBlbGluZSBiZWxvdyBuZXZlciBzdGFydGVkLCBzbyBub3RoaW5nIGVsc2UgY2FuIGV2ZXJcbiAgICAvLyBzZXR0bGUgdGhpcyBwcm9taXNlIOKAlCBsZWF2aW5nIGBoYW5kbGUoKWAgYXdhaXRpbmcgaXQgZm9yZXZlciwgaXRzXG4gICAgLy8gYHdhaXRVbnRpbGAgd29yayAoSVNSIHJldmFsaWRhdGlvbiwgY2FjaGUgd3JpdGVzKSBuZXZlciBmbHVzaGVkIGFuZCB0aGVcbiAgICAvLyBpbi1mbGlnaHQgcmVuZGVyJ3MgY2xvc3VyZSByZXRhaW5lZCBmb3IgdGhlIGxpZmUgb2YgdGhlIHByb2Nlc3MuXG4gICAgcmVzLm9uY2UoXCJjbG9zZVwiLCAoKSA9PiB7XG4gICAgICBpZiAoIXBpcGluZykge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzLm9uY2UoXCJoZWFkXCIsIChoZWFkOiBSZXNwb25zZUhlYWQpID0+IHtcbiAgICAgIHBpcGluZyA9IHRydWU7XG4gICAgICBjb25zdCBzdGFnZXM6IEFycmF5PFRyYW5zZm9ybSB8IFdyaXRhYmxlPiA9IFtdO1xuXG4gICAgICBjb25zdCBnemlwID0gc2hvdWxkR3ppcChyZXEsIHJlcywgaGVhZCwgb3B0aW9ucyk7XG4gICAgICBpZiAoZ3ppcCkge1xuICAgICAgICBjb25zdCBjb21wcmVzc29yID0gY3JlYXRlR3ppcCgpO1xuICAgICAgICAvLyBOZXh0LmpzIGNhbGxzIGByZXMuZmx1c2goKWAgYWZ0ZXIgZWFjaCBjaHVuayBpdCB3cml0ZXNcbiAgICAgICAgLy8gKGBuZXh0L2Rpc3Qvc2VydmVyL3BpcGUtcmVhZGFibGUuanNgKTsgd2l0aG91dCBmb3J3YXJkaW5nIGl0LCBzdHJlYW1lZFxuICAgICAgICAvLyBIVE1MIHNpdHMgaW4gemxpYidzIGJ1ZmZlciBhbmQgdGhlIHJlc3BvbnNlIGFycml2ZXMgYWxsIGF0IG9uY2UuXG4gICAgICAgIHJlcy5mbHVzaCA9ICgpID0+IGNvbXByZXNzb3IuZmx1c2goY29uc3RhbnRzLlpfU1lOQ19GTFVTSCk7XG4gICAgICAgIHN0YWdlcy5wdXNoKGNvbXByZXNzb3IpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbmsucGFkRW1wdHlCb2R5KSB7XG4gICAgICAgIHN0YWdlcy5wdXNoKHBhZEVtcHR5Qm9keSgpKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHN0YWdlcy5wdXNoKHNpbmsuYmVnaW4oZ3ppcCA/IHdpdGhHemlwSGVhZGVycyhoZWFkKSA6IGhlYWQpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIFRoaXMgcnVucyBpbnNpZGUgd2hpY2hldmVyIGByZXNgIGNhbGwgZmx1c2hlZCB0aGUgaGVhZCDigJQgdXN1YWxseSBhXG4gICAgICAgIC8vIGB3cml0ZSgpYCBmcm9tIGRlZXAgaW5zaWRlIE5leHQuanMg4oCUIHNvIGFuIGVzY2FwaW5nIHRocm93IGxhbmRzIHRoZXJlLFxuICAgICAgICAvLyB0aGUgcGlwZWxpbmUgYmVsb3cgbmV2ZXIgc3RhcnRzLCBhbmQgbm90aGluZyB3b3VsZCBzZXR0bGUgdGhpc1xuICAgICAgICAvLyBwcm9taXNlOiBgaGFuZGxlKClgIHdvdWxkIGhhbmcuIEEgc2luaydzIGB3cml0ZUhlYWRgIHJlamVjdGluZyBhXG4gICAgICAgIC8vIGhlYWRlciB2YWx1ZSBpcyBob3cgaXQgaGFwcGVucy4gRGVzdHJveWluZyBgcmVzYCBpcyB3aGF0IHN0b3BzIHRoZVxuICAgICAgICAvLyB3cml0ZXI7IHRoZSBgXCJlcnJvclwiYCB0aGF0IGVtaXRzIGlzIGEgbm8tb3AgYWZ0ZXIgdGhlIGByZWplY3RgLlxuICAgICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgICAgIHN0YWdlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXMuZGVzdHJveShlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBpcGVsaW5lKHJlcywgLi4uKHN0YWdlcyBhcyBbV3JpdGFibGVdKSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkR3ppcChcbiAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgaGVhZDogUmVzcG9uc2VIZWFkLFxuICBvcHRpb25zOiBQaXBlT3B0aW9ucyxcbik6IGJvb2xlYW4ge1xuICBpZiAoIW9wdGlvbnMuY29tcHJlc3MpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHJlcS5tZXRob2QgPT09IFwiSEVBRFwiIHx8IFVOQ09NUFJFU1NBQkxFX1NUQVRVUy5oYXMoaGVhZC5zdGF0dXNDb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBOZXh0LmpzIGVuY29kZXMgc29tZSByZXNwb25zZXMgaXRzZWxmOyBkb3VibGUtZW5jb2RpbmcgaXMgbm90IGEgdGhpbmcuXG4gIGlmIChyZXMuaGFzSGVhZGVyKFwiY29udGVudC1lbmNvZGluZ1wiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIUNPTVBSRVNTSUJMRS50ZXN0KGhlYWQuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA/PyBcIlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgcmVzcG9uc2UncyBvcHQtb3V0LCB3aGljaCBgbmV4dCBzdGFydGAncyBgY29tcHJlc3Npb25gIGhvbm9ycyB0b286IGFuXG4gIC8vIFNTRSBzdHJlYW0gc2V0cyBpdCBzbyB0aGF0IG5vdGhpbmcgYnVmZmVycyBpdHMgZXZlbnRzLlxuICBpZiAoTk9fVFJBTlNGT1JNLnRlc3QoaGVhZC5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSA/PyBcIlwiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gYWNjZXB0c0d6aXAocmVxLmhlYWRlcnNbXCJhY2NlcHQtZW5jb2RpbmdcIl0pO1xufVxuXG4vKipcbiAqIEEgYHE9MGAgb24gZ3ppcCBpcyBhIHJlZnVzYWwsIGFuZCBib3RoIGAqYCBmb3JtcyBoYXZlIHRvIGJlIGhvbm9yZWQsIHNvIHRoaXNcbiAqIHBhcnNlcyByYXRoZXIgdGhhbiBzdWJzdHJpbmctbWF0Y2hpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhY2NlcHRzR3ppcChoZWFkZXI6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmpvaW4oXCIsXCIpIDogaGVhZGVyO1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGxldCB3aWxkY2FyZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBwYXJ0IG9mIHZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgIGNvbnN0IFtyYXdOYW1lLCAuLi5wYXJhbXNdID0gcGFydC5zcGxpdChcIjtcIik7XG4gICAgY29uc3QgbmFtZSA9IHJhd05hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKG5hbWUgIT09IFwiZ3ppcFwiICYmIG5hbWUgIT09IFwiKlwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgcSA9IHBhcmFtc1xuICAgICAgLm1hcCgocCkgPT4gcC50cmltKCkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5maW5kKChwKSA9PiBwLnN0YXJ0c1dpdGgoXCJxPVwiKSk7XG4gICAgY29uc3QgYWNjZXB0ZWQgPSBxID09PSB1bmRlZmluZWQgfHwgTnVtYmVyKHEuc2xpY2UoMikpID4gMDtcbiAgICBpZiAobmFtZSA9PT0gXCJnemlwXCIpIHtcbiAgICAgIHJldHVybiBhY2NlcHRlZDtcbiAgICB9XG4gICAgd2lsZGNhcmQgPSBhY2NlcHRlZDtcbiAgfVxuICByZXR1cm4gd2lsZGNhcmQgPz8gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHdpdGhHemlwSGVhZGVycyhoZWFkOiBSZXNwb25zZUhlYWQpOiBSZXNwb25zZUhlYWQge1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIC4uLmhlYWQuaGVhZGVycyxcbiAgICBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJnemlwXCIsXG4gIH07XG4gIC8vIFRoZSBsZW5ndGggd2Ugd2VyZSB0b2xkIGlzIHRoZSB1bmNvbXByZXNzZWQgb25lLCBhbmQgd2UgZG8gbm90IGtub3cgdGhlXG4gIC8vIGNvbXByZXNzZWQgb25lIHVudGlsIHRoZSBzdHJlYW0gZW5kcy5cbiAgZGVsZXRlIGhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXTtcbiAgY29uc3QgdmFyeSA9IGhlYWRlcnMudmFyeTtcbiAgaWYgKCF2YXJ5KSB7XG4gICAgaGVhZGVycy52YXJ5ID0gXCJBY2NlcHQtRW5jb2RpbmdcIjtcbiAgfSBlbHNlIGlmICghL1xcYmFjY2VwdC1lbmNvZGluZ1xcYi9pLnRlc3QodmFyeSkpIHtcbiAgICBoZWFkZXJzLnZhcnkgPSBgJHt2YXJ5fSwgQWNjZXB0LUVuY29kaW5nYDtcbiAgfVxuICByZXR1cm4geyAuLi5oZWFkLCBoZWFkZXJzIH07XG59XG5cbi8qKiBTZWUge0BsaW5rIFJlc3BvbnNlU2luay5wYWRFbXB0eUJvZHl9LiAqL1xuZnVuY3Rpb24gcGFkRW1wdHlCb2R5KCk6IFRyYW5zZm9ybSB7XG4gIGxldCB3cm90ZVNvbWV0aGluZyA9IGZhbHNlO1xuICByZXR1cm4gbmV3IFRyYW5zZm9ybSh7XG4gICAgdHJhbnNmb3JtKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICB3cm90ZVNvbWV0aGluZyA9IHRydWU7XG4gICAgICBjYWxsYmFjayhudWxsLCBjaHVuayk7XG4gICAgfSxcbiAgICBmbHVzaChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2sobnVsbCwgd3JvdGVTb21ldGhpbmcgPyB1bmRlZmluZWQgOiBcIiBcIik7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ydW50aW1lL2h0dHAvc2luay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQStGQSxnQ0E2REM7QUFpQ0Qsa0NBc0JDO0FBbk5EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILDZDQUFrRDtBQUNsRCxtREFBZ0Q7QUFDaEQseUNBQWtEO0FBa0NsRDs7OztHQUlHO0FBQ0gsTUFBTSxZQUFZLEdBQ2hCLDhGQUE4RixDQUFDO0FBRWpHOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0scUJBQXFCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFdkQsa0RBQWtEO0FBQ2xELE1BQU0sWUFBWSxHQUFHLHFDQUFxQyxDQUFDO0FBTzNEOzs7Ozs7R0FNRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsR0FBd0IsRUFDeEIsR0FBdUIsRUFDdkIsSUFBa0IsRUFDbEIsT0FBb0I7SUFFcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDMUIsMEVBQTBFO1FBQzFFLG9FQUFvRTtRQUNwRSxxRUFBcUU7UUFDckUsNEVBQTRFO1FBQzVFLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsbUVBQW1FO1FBQ25FLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQWtCLEVBQUUs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Q0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbm5lY3RpbmcgYSB7QGxpbmsgU2hpbVNlcnZlclJlc3BvbnNlfSB0byB0aGUgYnl0ZXMtb3V0IHNpZGUgb2YgYSBzaGVsbCwgYW5kXG4gKiB0aGUgb25lIHRoaW5nIHRoYXQgaGFzIHRvIGhhcHBlbiBvbiB0aGUgd2F5OiBnemlwLlxuICpcbiAqIFRoaXMgbGl2ZXMgaW4gc2hhcmVkIHJ1bnRpbWUgY29kZSByYXRoZXIgdGhhbiBpbiB0aGUgTGFtYmRhIHNoZWxsIG9uIHB1cnBvc2UuXG4gKiBOZWl0aGVyIG1hbmFnZWQgbGF5ZXIgY2FuIGNvbXByZXNzIGEgKnN0cmVhbWVkKiByZXNwb25zZTpcbiAqXG4gKiAtIEFQSSBHYXRld2F5J3MgYG1pbkNvbXByZXNzaW9uU2l6ZWAgaXMgc2V0IChgc3JjL25leHRqcy1hcGkudHNgKSBidXQgaW5lcnQsXG4gKiAgIGJlY2F1c2UgY2RrLW5leHRqcyBhbHNvIHNldHMgYFJlc3BvbnNlVHJhbnNmZXJNb2RlLlNUUkVBTWAsIGFuZCBTVFJFQU0gZHJvcHNcbiAqICAgY29udGVudCBlbmNvZGluZyBvdXRyaWdodCDigJQgXCJJZiB5b3Ugd2FudCB0byBjb21wcmVzcyB5b3VyIGludGVncmF0aW9uXG4gKiAgIHJlc3BvbnNlLCBkbyB0aGlzIGluIHlvdXIgaW50ZWdyYXRpb25cIi5cbiAqIC0gQ2xvdWRGcm9udCByZXF1aXJlcyB0aGUgb3JpZ2luIHRvIHNlbmQgYENvbnRlbnQtTGVuZ3RoYCwgd2hpY2ggYSBzdHJlYW1lZFxuICogICByZXNwb25zZSBieSBkZWZpbml0aW9uIGRvZXMgbm90LiBJdCBzdGlsbCBjb21wcmVzc2VzIG5vbi1zdHJlYW1lZCByZXNwb25zZXNcbiAqICAgYW5kIFMzIGFzc2V0cywgc28gdGhlIGdhcCBpcyBleGFjdGx5IHN0cmVhbWVkIEhUTUwgYW5kIFJTQyBwYXlsb2FkcyDigJQgdGhlXG4gKiAgIGxhcmdlc3QgdGV4dCByZXNwb25zZXMgd2Ugc2VydmUuXG4gKlxuICogVW50aWwgdGhlIGNvbnRhaW5lciBwYXRoIHdhcyBkcm9wcGVkLCBMYW1iZGEgV2ViIEFkYXB0ZXIgZGlkIHRoaXMgZm9yIHVzLCB3aGljaFxuICogaXMgd2h5IG5vdGhpbmcgaW4gdGhlIG9sZCBjb2RlIG1lbnRpb25zIGl0LiAqKkRvbid0IFwiZml4XCIgdGhlIEFQSSBHYXRld2F5IG9yXG4gKiBDbG91ZEZyb250IHNldHRpbmdzIGV4cGVjdGluZyB0aGVtIHRvIHRha2Ugb3Zlci4qKlxuICpcbiAqIGd6aXAgcmF0aGVyIHRoYW4gYnJvdGxpOiBicm90bGkncyBzdHJlYW1pbmcgdGhyb3VnaHB1dCBhdCBkZWZhdWx0IHF1YWxpdHkgaXNcbiAqIHBvb3IsIGFuZCBDbG91ZEZyb250IHByZWZlcnMgYGJyYCBvbmx5IHdoZW4gdGhlIG9yaWdpbiBkaWRuJ3QgYWxyZWFkeSBlbmNvZGUg4oCUXG4gKiB3aGljaCBzdG9wcyBhcHBseWluZyB0aGUgbW9tZW50IHdlIHNldCBgY29udGVudC1lbmNvZGluZ2Agb3Vyc2VsdmVzLlxuICovXG5pbXBvcnQgeyBUcmFuc2Zvcm0sIFdyaXRhYmxlIH0gZnJvbSBcIm5vZGU6c3RyZWFtXCI7XG5pbXBvcnQgeyBwaXBlbGluZSB9IGZyb20gXCJub2RlOnN0cmVhbS9wcm9taXNlc1wiO1xuaW1wb3J0IHsgY29uc3RhbnRzLCBjcmVhdGVHemlwIH0gZnJvbSBcIm5vZGU6emxpYlwiO1xuaW1wb3J0IHR5cGUgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkLCBTaGltU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9yZXNwb25zZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlU2luayB7XG4gIC8qKlxuICAgKiBTZXQgYnkgdGhlIExhbWJkYSBzaW5rLCBmb3IgYm90aCBpbnRlZ3JhdGlvbnM6IGEgc3RyZWFtZWQgTGFtYmRhIHJlc3BvbnNlXG4gICAqIHdpdGggemVybyBwYXlsb2FkIGJ5dGVzIGFmdGVyIHRoZSBtZXRhZGF0YSBkZWxpbWl0ZXIgaXMgbm90IHJlY29nbml6ZWQgYXMgYVxuICAgKiBtZXRhZGF0YSByZXNwb25zZSBhdCBhbGwsIHNvIGEgc2luZ2xlIHNwYWNlIGlzIHdyaXR0ZW4gaW5zdGVhZCBvZiBub3RoaW5nLlxuICAgKlxuICAgKiBBUEkgR2F0ZXdheSBhbnN3ZXJzIDUwMi4gQSBGdW5jdGlvbiBVUkwgaXMgd29yc2UgYmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0XG4gICAqIHdvcmtlZDogdGhlIHByZWx1ZGUgaXMgZGlzY2FyZGVkIGFuZCB0aGUgcmVzcG9uc2UgYXJyaXZlcyBhcyBhIGJhcmVcbiAgICogYDIwMCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gIHdpdGggYW4gZW1wdHkgYm9keSwgbm9uZSBvZiB0aGUgYXBwJ3MgaGVhZGVycyxcbiAgICogYW5kIGFuIEhUVFAvMiBzdHJlYW0gdGhhdCBkb2VzIG5vdCBjbG9zZSBjbGVhbmx5IOKAlCB3aGF0ZXZlciB0aGUgcmVhbCBzdGF0dXNcbiAgICogd2FzLiBNZWFzdXJlZCBhZ2FpbnN0IGEgYE5leHRqc0dsb2JhbEZ1bmN0aW9uc2AgZGVwbG95bWVudDogYEhFQURgIG9uIGEgNDA0XG4gICAqIHBhZ2UgYW5zd2VyZWQgYDIwMGAsIGFuZCBhIHNlcnZlciBhY3Rpb24gd2hvc2UgcmVwbHkgaXMgZW1wdHkgKGFuIGFjdGlvbiB0aGF0XG4gICAqIG9ubHkgYHJlZGlyZWN0KClgcywgd2hpY2ggTmV4dC5qcyBhbnN3ZXJzIHdpdGggYHgtYWN0aW9uLXJlZGlyZWN0YCBhbmQgbm9cbiAgICogYm9keSkgbG9zdCB0aGUgcmVkaXJlY3QgaGVhZGVyIGFuZCBzbyBuZXZlciBuYXZpZ2F0ZWQuXG4gICAqXG4gICAqIFRoZSBwcmUtYWRhcHRlciBpbWFnZSBoYW5kbGVyIGNhcnJpZWQgdGhlIHNhbWUgd29ya2Fyb3VuZCBmb3IgMzA0cy4gUkZDIDkxMTBcbiAgICogZm9yYmlkcyBhIGJvZHkgb24gMjA0LzMwNCwgYW5kIGEgc3BhY2UgdGVjaG5pY2FsbHkgdmlvbGF0ZXMgdGhhdCwgYnV0IGxvc2luZ1xuICAgKiB0aGUgc3RhdHVzIGVudGlyZWx5IGlzIHRoZSB3b3JzZSBmYWlsdXJlIOKAlCBhbmQgb24gdGhlIENsb3VkRnJvbnQgcGF0aCBhXG4gICAqIGNvbmRpdGlvbmFsIHJlcXVlc3QgY2Fubm90IHJlYWNoIHRoZSBvcmlnaW4gYW55d2F5LCBiZWNhdXNlIGBpZi1ub25lLW1hdGNoYFxuICAgKiBpcyBub3QgaW4gdGhlIGR5bmFtaWMgY2FjaGUgcG9saWN5J3MgaGVhZGVyIGFsbG93bGlzdC4gVGhlIGNvbnRhaW5lciBzaW5rXG4gICAqIHdyaXRlcyB0byBhIHJlYWwgYFNlcnZlclJlc3BvbnNlYCBhbmQgZG9lcyBub3Qgc2V0IHRoaXMuXG4gICAqL1xuICByZWFkb25seSBwYWRFbXB0eUJvZHk/OiBib29sZWFuO1xuICAvKipcbiAgICogQ2FsbGVkIGV4YWN0bHkgb25jZSwgYmVmb3JlIGFueSBib2R5IGJ5dGUsIHdpdGggdGhlIGZpbmFsIGhlYWQuIFJldHVybnMgdGhlXG4gICAqIHN0cmVhbSB0aGUgYm9keSBpcyB3cml0dGVuIHRvOyB7QGxpbmsgcGlwZVRvU2lua30gZW5kcyBpdC5cbiAgICovXG4gIGJlZ2luKGhlYWQ6IFJlc3BvbnNlSGVhZCk6IFdyaXRhYmxlO1xufVxuXG4vKipcbiAqIENvbnRlbnQgdHlwZXMgd29ydGggY29tcHJlc3NpbmcuIEV2ZXJ5dGhpbmcgTmV4dCBzdHJlYW1zIGFzIEhUTUwgb3IgYW4gUlNDXG4gKiBwYXlsb2FkIGlzIGB0ZXh0LypgOyBpbWFnZXMgYW5kIGZvbnRzIGFyZSBhbHJlYWR5IGNvbXByZXNzZWQsIGFuZCBnemlwcGluZyBhblxuICogb3B0aW1pemVkIEFWSUYganVzdCBidXJucyBDUFUuXG4gKi9cbmNvbnN0IENPTVBSRVNTSUJMRSA9XG4gIC9eKD86dGV4dFxcL3xhcHBsaWNhdGlvblxcLyg/Ompzb258amF2YXNjcmlwdHx4bWx8bWFuaWZlc3R8cnNzXFwreG1sfGF0b21cXCt4bWwpfGltYWdlXFwvc3ZnXFwreG1sKS87XG5cbi8qKlxuICogU3RhdHVzZXMgd2hvc2UgYm9keSBtdXN0IG5vdCBiZSBjb21wcmVzc2VkOiAyMDQgYW5kIDMwNCBoYXZlIG5vbmUsIGFuZCBhIDIwNidzXG4gKiBib2R5IGlzIGEgYnl0ZSByYW5nZSBvZiB0aGUgKnVuY29tcHJlc3NlZCogcmVwcmVzZW50YXRpb24uXG4gKlxuICogMjA2IGlzIHJlYWNoYWJsZSDigJQgYHNlcnZlU3RhdGljRmlsZWAgaXMgYHNlbmRgIHVuZGVybmVhdGgsIHdoaWNoIGFkdmVydGlzZXNcbiAqIGBBY2NlcHQtUmFuZ2VzOiBieXRlc2AgYW5kIGhvbm9ycyBgUmFuZ2VgIG9uIHRoZSBzdGF0aWMgSFRNTCB0aGUgcnVudGltZSBzZXJ2ZXNcbiAqIGl0c2VsZi4gR3ppcHBpbmcgb25lIHByb2R1Y2VkIGEgcmVzcG9uc2Ugd2hvc2UgYENvbnRlbnQtUmFuZ2VgIHN0aWxsIGRlc2NyaWJlZFxuICogdGhlIHVuY29tcHJlc3NlZCBzbGljZSAoYHdpdGhHemlwSGVhZGVyc2AgZHJvcHMgYGNvbnRlbnQtbGVuZ3RoYCBidXQgY2Fubm90XG4gKiByZXN0YXRlIGEgcmFuZ2UpLCBzbyB0aGUgY2xpZW50IGdvdCBieXRlcyB0aGF0IGRpZCBub3QgbWF0Y2ggd2hhdCBpdCBhc2tlZCBmb3IuXG4gKi9cbmNvbnN0IFVOQ09NUFJFU1NBQkxFX1NUQVRVUyA9IG5ldyBTZXQoWzIwNCwgMjA2LCAzMDRdKTtcblxuLyoqIGBjb21wcmVzc2lvbmAncyBvd24gdGVzdCBmb3IgdGhlIGRpcmVjdGl2ZS4gKi9cbmNvbnN0IE5PX1RSQU5TRk9STSA9IC8oPzpefCwpXFxzKj9uby10cmFuc2Zvcm1cXHMqPyg/Oix8JCkvaTtcblxuZXhwb3J0IGludGVyZmFjZSBQaXBlT3B0aW9ucyB7XG4gIC8qKiBgbmV4dC5jb25maWdgIGBjb21wcmVzc2AuICovXG4gIHJlYWRvbmx5IGNvbXByZXNzOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBpcGUgYHJlc2AgaW50byBgc2lua2AsIGd6aXBwaW5nIHdoZW4gdGhhdCBpcyBib3RoIGFsbG93ZWQgYW5kIHVzZWZ1bC5cbiAqXG4gKiBSZXNvbHZlcyB3aGVuIHRoZSBzaW5rJ3Mgc3RyZWFtIGhhcyBmaW5pc2hlZCwgd2hpY2ggZm9yIExhbWJkYSBpcyB0aGUgcG9pbnQgdGhlXG4gKiBjbGllbnQgaGFzIHRoZSB3aG9sZSByZXNwb25zZS4gTXVzdCBiZSBjYWxsZWQgKmJlZm9yZSogYW55dGhpbmcgd3JpdGVzIHRvXG4gKiBgcmVzYCwgYmVjYXVzZSBpdCBzdWJzY3JpYmVzIHRvIHRoZSBvbmUtc2hvdCBgXCJoZWFkXCJgIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlwZVRvU2luayhcbiAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc2luazogUmVzcG9uc2VTaW5rLFxuICBvcHRpb25zOiBQaXBlT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBwaXBpbmcgPSBmYWxzZTtcbiAgICByZXMub25jZShcImVycm9yXCIsIHJlamVjdCk7XG4gICAgLy8gRGVzdHJveWVkIGJlZm9yZSB0aGUgaGVhZCB3ZW50IG91dCwgYW5kIHdpdGhvdXQgYW4gZXJyb3I6IGEgY2xpZW50IHRoYXRcbiAgICAvLyBkaXNjb25uZWN0ZWQgYmVmb3JlIHRoZSBmaXJzdCBieXRlLCB3aGljaCBgaGFuZGxlKClgIGFuc3dlcnMgd2l0aFxuICAgIC8vIGByZXMuZGVzdHJveSgpYC4gYFRyYW5zZm9ybS5kZXN0cm95KClgIHdpdGggbm8gYXJndW1lbnQgZW1pdHMgb25seVxuICAgIC8vIGBcImNsb3NlXCJgLCBhbmQgdGhlIHBpcGVsaW5lIGJlbG93IG5ldmVyIHN0YXJ0ZWQsIHNvIG5vdGhpbmcgZWxzZSBjYW4gZXZlclxuICAgIC8vIHNldHRsZSB0aGlzIHByb21pc2Ug4oCUIGxlYXZpbmcgYGhhbmRsZSgpYCBhd2FpdGluZyBpdCBmb3JldmVyLCBpdHNcbiAgICAvLyBgd2FpdFVudGlsYCB3b3JrIChJU1IgcmV2YWxpZGF0aW9uLCBjYWNoZSB3cml0ZXMpIG5ldmVyIGZsdXNoZWQgYW5kIHRoZVxuICAgIC8vIGluLWZsaWdodCByZW5kZXIncyBjbG9zdXJlIHJldGFpbmVkIGZvciB0aGUgbGlmZSBvZiB0aGUgcHJvY2Vzcy5cbiAgICByZXMub25jZShcImNsb3NlXCIsICgpID0+IHtcbiAgICAgIGlmICghcGlwaW5nKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXMub25jZShcImhlYWRcIiwgKGhlYWQ6IFJlc3BvbnNlSGVhZCkgPT4ge1xuICAgICAgcGlwaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHN0YWdlczogQXJyYXk8VHJhbnNmb3JtIHwgV3JpdGFibGU+ID0gW107XG5cbiAgICAgIGNvbnN0IGd6aXAgPSBzaG91bGRHemlwKHJlcSwgcmVzLCBoZWFkLCBvcHRpb25zKTtcbiAgICAgIGlmIChnemlwKSB7XG4gICAgICAgIC8vIEEgc3luYyBmbHVzaCBvbiBldmVyeSBjaHVuaywgc28gdGhhdCBlYWNoIG9uZSByZWFjaGVzIHRoZSBjbGllbnQgYXNcbiAgICAgICAgLy8gc29vbiBhcyBpdCBpcyB3cml0dGVuIHJhdGhlciB0aGFuIHNpdHRpbmcgaW4gemxpYidzIGJ1ZmZlciB1bnRpbCB0aGVcbiAgICAgICAgLy8gbmV4dC4gVGhpcyBoYXMgdG8gYmUgemxpYidzIG93biBwZXItd3JpdGUgZmxhZzogZm9yd2FyZGluZyBOZXh0LmpzJ3NcbiAgICAgICAgLy8gYHJlcy5mbHVzaCgpYCAoYG5leHQvZGlzdC9zZXJ2ZXIvcGlwZS1yZWFkYWJsZS5qc2ApIHRvXG4gICAgICAgIC8vIGBjb21wcmVzc29yLmZsdXNoKClgIHF1ZXVlZCB0aGUgZmx1c2ggaW4gemxpYiAqYWhlYWQgb2YqIHRoZSBjaHVua1xuICAgICAgICAvLyB3aGVuZXZlciBiYWNrcHJlc3N1cmUgaGVsZCB0aGF0IGNodW5rIGluIGByZXNgJ3MgYnVmZmVyLCBzbyB0aGUgbGFzdFxuICAgICAgICAvLyBjaHVuayBiZWZvcmUgYSBwYXVzZSBzdGF5ZWQgaW4gemxpYiAtIGEgYDxTdXNwZW5zZT5gIGZhbGxiYWNrIGFycml2ZWRcbiAgICAgICAgLy8gb25seSB3aXRoIHRoZSBzbG93IGJvdW5kYXJ5IGl0IHdhcyBzdGFuZGluZyBpbiBmb3IgKGlzc3VlICMzMjEpLlxuICAgICAgICBjb25zdCBjb21wcmVzc29yID0gY3JlYXRlR3ppcCh7IGZsdXNoOiBjb25zdGFudHMuWl9TWU5DX0ZMVVNIIH0pO1xuICAgICAgICBzdGFnZXMucHVzaChjb21wcmVzc29yKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaW5rLnBhZEVtcHR5Qm9keSkge1xuICAgICAgICBzdGFnZXMucHVzaChwYWRFbXB0eUJvZHkoKSk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBzdGFnZXMucHVzaChzaW5rLmJlZ2luKGd6aXAgPyB3aXRoR3ppcEhlYWRlcnMoaGVhZCkgOiBoZWFkKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBUaGlzIHJ1bnMgaW5zaWRlIHdoaWNoZXZlciBgcmVzYCBjYWxsIGZsdXNoZWQgdGhlIGhlYWQg4oCUIHVzdWFsbHkgYVxuICAgICAgICAvLyBgd3JpdGUoKWAgZnJvbSBkZWVwIGluc2lkZSBOZXh0LmpzIOKAlCBzbyBhbiBlc2NhcGluZyB0aHJvdyBsYW5kcyB0aGVyZSxcbiAgICAgICAgLy8gdGhlIHBpcGVsaW5lIGJlbG93IG5ldmVyIHN0YXJ0cywgYW5kIG5vdGhpbmcgd291bGQgc2V0dGxlIHRoaXNcbiAgICAgICAgLy8gcHJvbWlzZTogYGhhbmRsZSgpYCB3b3VsZCBoYW5nLiBBIHNpbmsncyBgd3JpdGVIZWFkYCByZWplY3RpbmcgYVxuICAgICAgICAvLyBoZWFkZXIgdmFsdWUgaXMgaG93IGl0IGhhcHBlbnMuIERlc3Ryb3lpbmcgYHJlc2AgaXMgd2hhdCBzdG9wcyB0aGVcbiAgICAgICAgLy8gd3JpdGVyOyB0aGUgYFwiZXJyb3JcImAgdGhhdCBlbWl0cyBpcyBhIG5vLW9wIGFmdGVyIHRoZSBgcmVqZWN0YC5cbiAgICAgICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgICAgICBzdGFnZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmVzLmRlc3Ryb3koZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBwaXBlbGluZShyZXMsIC4uLihzdGFnZXMgYXMgW1dyaXRhYmxlXSkpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZEd6aXAoXG4gIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgcmVzOiBTaGltU2VydmVyUmVzcG9uc2UsXG4gIGhlYWQ6IFJlc3BvbnNlSGVhZCxcbiAgb3B0aW9uczogUGlwZU9wdGlvbnMsXG4pOiBib29sZWFuIHtcbiAgaWYgKCFvcHRpb25zLmNvbXByZXNzKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChyZXEubWV0aG9kID09PSBcIkhFQURcIiB8fCBVTkNPTVBSRVNTQUJMRV9TVEFUVVMuaGFzKGhlYWQuc3RhdHVzQ29kZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gTmV4dC5qcyBlbmNvZGVzIHNvbWUgcmVzcG9uc2VzIGl0c2VsZjsgZG91YmxlLWVuY29kaW5nIGlzIG5vdCBhIHRoaW5nLlxuICBpZiAocmVzLmhhc0hlYWRlcihcImNvbnRlbnQtZW5jb2RpbmdcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCFDT01QUkVTU0lCTEUudGVzdChoZWFkLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPz8gXCJcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHJlc3BvbnNlJ3Mgb3B0LW91dCwgd2hpY2ggYG5leHQgc3RhcnRgJ3MgYGNvbXByZXNzaW9uYCBob25vcnMgdG9vOiBhblxuICAvLyBTU0Ugc3RyZWFtIHNldHMgaXQgc28gdGhhdCBub3RoaW5nIGJ1ZmZlcnMgaXRzIGV2ZW50cy5cbiAgaWYgKE5PX1RSQU5TRk9STS50ZXN0KGhlYWQuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0gPz8gXCJcIikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGFjY2VwdHNHemlwKHJlcS5oZWFkZXJzW1wiYWNjZXB0LWVuY29kaW5nXCJdKTtcbn1cblxuLyoqXG4gKiBBIGBxPTBgIG9uIGd6aXAgaXMgYSByZWZ1c2FsLCBhbmQgYm90aCBgKmAgZm9ybXMgaGF2ZSB0byBiZSBob25vcmVkLCBzbyB0aGlzXG4gKiBwYXJzZXMgcmF0aGVyIHRoYW4gc3Vic3RyaW5nLW1hdGNoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWNjZXB0c0d6aXAoaGVhZGVyOiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5qb2luKFwiLFwiKSA6IGhlYWRlcjtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgd2lsZGNhcmQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgcGFydCBvZiB2YWx1ZS5zcGxpdChcIixcIikpIHtcbiAgICBjb25zdCBbcmF3TmFtZSwgLi4ucGFyYW1zXSA9IHBhcnQuc3BsaXQoXCI7XCIpO1xuICAgIGNvbnN0IG5hbWUgPSByYXdOYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChuYW1lICE9PSBcImd6aXBcIiAmJiBuYW1lICE9PSBcIipcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHEgPSBwYXJhbXNcbiAgICAgIC5tYXAoKHApID0+IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAuZmluZCgocCkgPT4gcC5zdGFydHNXaXRoKFwicT1cIikpO1xuICAgIGNvbnN0IGFjY2VwdGVkID0gcSA9PT0gdW5kZWZpbmVkIHx8IE51bWJlcihxLnNsaWNlKDIpKSA+IDA7XG4gICAgaWYgKG5hbWUgPT09IFwiZ3ppcFwiKSB7XG4gICAgICByZXR1cm4gYWNjZXB0ZWQ7XG4gICAgfVxuICAgIHdpbGRjYXJkID0gYWNjZXB0ZWQ7XG4gIH1cbiAgcmV0dXJuIHdpbGRjYXJkID8/IGZhbHNlO1xufVxuXG5mdW5jdGlvbiB3aXRoR3ppcEhlYWRlcnMoaGVhZDogUmVzcG9uc2VIZWFkKTogUmVzcG9uc2VIZWFkIHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAuLi5oZWFkLmhlYWRlcnMsXG4gICAgXCJjb250ZW50LWVuY29kaW5nXCI6IFwiZ3ppcFwiLFxuICB9O1xuICAvLyBUaGUgbGVuZ3RoIHdlIHdlcmUgdG9sZCBpcyB0aGUgdW5jb21wcmVzc2VkIG9uZSwgYW5kIHdlIGRvIG5vdCBrbm93IHRoZVxuICAvLyBjb21wcmVzc2VkIG9uZSB1bnRpbCB0aGUgc3RyZWFtIGVuZHMuXG4gIGRlbGV0ZSBoZWFkZXJzW1wiY29udGVudC1sZW5ndGhcIl07XG4gIGNvbnN0IHZhcnkgPSBoZWFkZXJzLnZhcnk7XG4gIGlmICghdmFyeSkge1xuICAgIGhlYWRlcnMudmFyeSA9IFwiQWNjZXB0LUVuY29kaW5nXCI7XG4gIH0gZWxzZSBpZiAoIS9cXGJhY2NlcHQtZW5jb2RpbmdcXGIvaS50ZXN0KHZhcnkpKSB7XG4gICAgaGVhZGVycy52YXJ5ID0gYCR7dmFyeX0sIEFjY2VwdC1FbmNvZGluZ2A7XG4gIH1cbiAgcmV0dXJuIHsgLi4uaGVhZCwgaGVhZGVycyB9O1xufVxuXG4vKiogU2VlIHtAbGluayBSZXNwb25zZVNpbmsucGFkRW1wdHlCb2R5fS4gKi9cbmZ1bmN0aW9uIHBhZEVtcHR5Qm9keSgpOiBUcmFuc2Zvcm0ge1xuICBsZXQgd3JvdGVTb21ldGhpbmcgPSBmYWxzZTtcbiAgcmV0dXJuIG5ldyBUcmFuc2Zvcm0oe1xuICAgIHRyYW5zZm9ybShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgd3JvdGVTb21ldGhpbmcgPSB0cnVlO1xuICAgICAgY2FsbGJhY2sobnVsbCwgY2h1bmspO1xuICAgIH0sXG4gICAgZmx1c2goY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHdyb3RlU29tZXRoaW5nID8gdW5kZWZpbmVkIDogXCIgXCIpO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const node_crypto_1 = require("node:crypto");
3
4
  const node_stream_1 = require("node:stream");
4
5
  const node_zlib_1 = require("node:zlib");
5
6
  const request_1 = require("./request");
@@ -63,18 +64,50 @@ describe("pipeToSink compression", () => {
63
64
  });
64
65
  expect(sink.head?.headers.vary).toBe("Cookie, Accept-Encoding");
65
66
  });
66
- it("forwards res.flush() to the compressor so streamed HTML is not buffered", async () => {
67
- const seen = [];
68
- const sink = await run((res) => {
69
- res.setHeader("Content-Type", "text/html");
70
- res.write("<html>");
71
- // Next.js does exactly this after every chunk (`pipe-readable.js`).
72
- res.flush?.();
73
- seen.push(1);
74
- res.end("</html>");
75
- });
76
- expect(seen).toEqual([1]);
77
- expect((0, node_zlib_1.gunzipSync)(sink.body).toString("utf-8")).toBe("<html></html>");
67
+ // Issue #321. Next.js writes each RSC/HTML chunk and then waits for `drain`
68
+ // (`pipe-readable.js`). Under backpressure a chunk sits in `res`'s buffer
69
+ // while earlier ones compress, and a flush issued at write time ran ahead of
70
+ // it, so the last chunk before a pause - a `<Suspense>` fallback - stayed in
71
+ // zlib until the slow boundary resolved.
72
+ it("delivers every written chunk before a pause, even under backpressure", async () => {
73
+ const chunks = [];
74
+ const slowSink = {
75
+ begin: () => new node_stream_1.Writable({
76
+ write(chunk, _encoding, callback) {
77
+ chunks.push(Buffer.from(chunk));
78
+ setImmediate(callback);
79
+ },
80
+ }),
81
+ };
82
+ const res = new response_1.ShimServerResponse();
83
+ const done = (0, sink_1.pipeToSink)(requestWith({ "accept-encoding": "gzip" }), res, slowSink, { compress: true });
84
+ res.setHeader("Content-Type", "text/x-component");
85
+ // Hex compresses about 2:1, so each chunk is still larger than `res`'s own
86
+ // 16 KiB buffer, and every write after the first meets backpressure.
87
+ const body = (0, node_crypto_1.randomBytes)(50_000).toString("hex");
88
+ let written = 0;
89
+ for (const size of [40_000, 30_000, 30_000]) {
90
+ // `pipe-readable.js`, verbatim apart from the types.
91
+ const ok = res.write(body.slice(written, written + size));
92
+ const flushable = res;
93
+ if ("flush" in flushable && typeof flushable.flush === "function") {
94
+ flushable.flush();
95
+ }
96
+ if (!ok) {
97
+ await new Promise((resolve) => res.once("drain", resolve));
98
+ }
99
+ written += size;
100
+ }
101
+ const soFar = () => (0, node_zlib_1.gunzipSync)(Buffer.concat(chunks), {
102
+ finishFlush: node_zlib_1.constants.Z_SYNC_FLUSH,
103
+ }).toString("utf-8");
104
+ for (let i = 0; i < 50 && soFar().length < body.length; i++) {
105
+ await new Promise((resolve) => setTimeout(resolve, 10));
106
+ }
107
+ expect(soFar()).toBe(body);
108
+ res.end();
109
+ await done;
110
+ expect((0, node_zlib_1.gunzipSync)(Buffer.concat(chunks)).toString("utf-8")).toBe(body);
78
111
  });
79
112
  it.each([
80
113
  ["an incompressible content type", { "content-type": "image/avif" }],
@@ -254,4 +287,4 @@ describe("acceptsGzip", () => {
254
287
  expect((0, sink_1.acceptsGzip)(["br", "gzip"])).toBe(true);
255
288
  });
256
289
  });
257
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bnRpbWUvaHR0cC9zaW5rLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBdUM7QUFDdkMseUNBQXVDO0FBQ3ZDLHVDQUFnRDtBQUNoRCx5Q0FBOEQ7QUFDOUQsaUNBQStEO0FBRS9ELE1BQU0sY0FBYztJQUlpQjtJQUg1QixJQUFJLENBQWdCO0lBQ1gsTUFBTSxHQUFhLEVBQUUsQ0FBQztJQUV0QyxZQUFtQyxlQUFlLEtBQUs7UUFBcEIsaUJBQVksR0FBWixZQUFZLENBQVE7SUFBRyxDQUFDO0lBRXBELEtBQUssQ0FBQyxJQUFrQjtRQUM3QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxzQkFBUSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVE7Z0JBQzlCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoQyxRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsT0FBK0IsRUFDL0IsTUFBTSxHQUFHLEtBQUs7SUFFZCxPQUFPLElBQUksNkJBQW1CLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFRRCxpRkFBaUY7QUFDakYsS0FBSyxVQUFVLEdBQUcsQ0FDaEIsS0FBd0MsRUFDeEMsVUFBb0IsRUFBRTtJQUV0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QUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUUsR0FBRyxFQUFFO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLGtCQUFXLEVBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IGd1bnppcFN5bmMgfSBmcm9tIFwibm9kZTp6bGliXCI7XG5pbXBvcnQgeyBTaGltSW5jb21pbmdNZXNzYWdlIH0gZnJvbSBcIi4vcmVxdWVzdFwiO1xuaW1wb3J0IHsgUmVzcG9uc2VIZWFkLCBTaGltU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9yZXNwb25zZVwiO1xuaW1wb3J0IHsgYWNjZXB0c0d6aXAsIHBpcGVUb1NpbmssIFJlc3BvbnNlU2luayB9IGZyb20gXCIuL3NpbmtcIjtcblxuY2xhc3MgQ29sbGVjdGluZ1NpbmsgaW1wbGVtZW50cyBSZXNwb25zZVNpbmsge1xuICBwdWJsaWMgaGVhZD86IFJlc3BvbnNlSGVhZDtcbiAgcHVibGljIHJlYWRvbmx5IGNodW5rczogQnVmZmVyW10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHBhZEVtcHR5Qm9keSA9IGZhbHNlKSB7fVxuXG4gIHB1YmxpYyBiZWdpbihoZWFkOiBSZXNwb25zZUhlYWQpOiBXcml0YWJsZSB7XG4gICAgdGhpcy5oZWFkID0gaGVhZDtcbiAgICBjb25zdCBjaHVua3MgPSB0aGlzLmNodW5rcztcbiAgICByZXR1cm4gbmV3IFdyaXRhYmxlKHtcbiAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBib2R5KCk6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQodGhpcy5jaHVua3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RXaXRoKFxuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBtZXRob2QgPSBcIkdFVFwiLFxuKTogU2hpbUluY29taW5nTWVzc2FnZSB7XG4gIHJldHVybiBuZXcgU2hpbUluY29taW5nTWVzc2FnZSh7IG1ldGhvZCwgdXJsOiBcIi9cIiwgaGVhZGVycyB9KTtcbn1cblxuaW50ZXJmYWNlIFBpcGVDYXNlIHtcbiAgcmVhZG9ubHkgcmVxPzogU2hpbUluY29taW5nTWVzc2FnZTtcbiAgcmVhZG9ubHkgY29tcHJlc3M/OiBib29sZWFuO1xuICByZWFkb25seSBwYWRFbXB0eUJvZHk/OiBib29sZWFuO1xufVxuXG4vKiogUnVucyBvbmUgcmVzcG9uc2UgdGhyb3VnaCB0aGUgc2luayBhbmQgcmVzb2x2ZXMgb25jZSB0aGUgc2luayBpcyBmaW5pc2hlZC4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bihcbiAgd3JpdGU6IChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gdm9pZCxcbiAgb3B0aW9uczogUGlwZUNhc2UgPSB7fSxcbik6IFByb21pc2U8Q29sbGVjdGluZ1Npbms+IHtcbiAgY29uc3QgcmVxID0gb3B0aW9ucy5yZXEgPz8gcmVxdWVzdFdpdGgoeyBcImFjY2VwdC1lbmNvZGluZ1wiOiBcImd6aXBcIiB9KTtcbiAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICBjb25zdCBzaW5rID0gbmV3IENvbGxlY3RpbmdTaW5rKG9wdGlvbnMucGFkRW1wdHlCb2R5KTtcbiAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsocmVxLCByZXMsIHNpbmssIHtcbiAgICBjb21wcmVzczogb3B0aW9ucy5jb21wcmVzcyA/PyB0cnVlLFxuICB9KTtcbiAgd3JpdGUocmVzKTtcbiAgYXdhaXQgZG9uZTtcbiAgcmV0dXJuIHNpbms7XG59XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBjb21wcmVzc2lvblwiLCAoKSA9PiB7XG4gIGl0KFwiZ3ppcHMgY29tcHJlc3NpYmxlIGNvbnRlbnQgd2hlbiB0aGUgY2xpZW50IGFjY2VwdHMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4ge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LUxlbmd0aFwiLCBcIjEzXCIpO1xuICAgICAgcmVzLmVuZChcIjxwPmhlbGxvPC9wPlwiKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZShcImd6aXBcIik7XG4gICAgLy8gVGhlIGxlbmd0aCB3ZSB3ZXJlIHRvbGQgaXMgdGhlIHVuY29tcHJlc3NlZCBvbmUgYW5kIHRoZSBjb21wcmVzc2VkIG9uZSBpc1xuICAgIC8vIG5vdCBrbm93biB1bnRpbCB0aGUgc3RyZWFtIGVuZHMuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVycy52YXJ5KS50b0JlKFwiQWNjZXB0LUVuY29kaW5nXCIpO1xuICAgIGV4cGVjdChndW56aXBTeW5jKHNpbmsuYm9keSkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIjxwPmhlbGxvPC9wPlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBlbmRzIHRvIGFuIGV4aXN0aW5nIHZhcnkgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiVmFyeVwiLCBcIkNvb2tpZVwiKTtcbiAgICAgIHJlcy5lbmQoXCJ4XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMudmFyeSkudG9CZShcIkNvb2tpZSwgQWNjZXB0LUVuY29kaW5nXCIpO1xuICB9KTtcblxuICBpdChcImZvcndhcmRzIHJlcy5mbHVzaCgpIHRvIHRoZSBjb21wcmVzc29yIHNvIHN0cmVhbWVkIEhUTUwgaXMgbm90IGJ1ZmZlcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZWVuOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4ge1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICAgIHJlcy53cml0ZShcIjxodG1sPlwiKTtcbiAgICAgIC8vIE5leHQuanMgZG9lcyBleGFjdGx5IHRoaXMgYWZ0ZXIgZXZlcnkgY2h1bmsgKGBwaXBlLXJlYWRhYmxlLmpzYCkuXG4gICAgICByZXMuZmx1c2g/LigpO1xuICAgICAgc2Vlbi5wdXNoKDEpO1xuICAgICAgcmVzLmVuZChcIjwvaHRtbD5cIik7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNlZW4pLnRvRXF1YWwoWzFdKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCI8aHRtbD48L2h0bWw+XCIpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJhbiBpbmNvbXByZXNzaWJsZSBjb250ZW50IHR5cGVcIiwgeyBcImNvbnRlbnQtdHlwZVwiOiBcImltYWdlL2F2aWZcIiB9XSxcbiAgICBbXCJhbiBhbHJlYWR5LWVuY29kZWQgYm9keVwiLCB7IFwiY29udGVudC1lbmNvZGluZ1wiOiBcImJyXCIgfV0sXG4gICAgW1xuICAgICAgXCJhIHJlc3BvbnNlIHRoYXQgb3B0cyBvdXQgd2l0aCBuby10cmFuc2Zvcm1cIixcbiAgICAgIHtcbiAgICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L2V2ZW50LXN0cmVhbVwiLFxuICAgICAgICBcImNhY2hlLWNvbnRyb2xcIjogXCJuby1jYWNoZSwgbm8tdHJhbnNmb3JtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pKFwiZG9lcyBub3QgZ3ppcCAlc1wiLCBhc3luYyAoX25hbWUsIGhlYWRlcnMpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkge1xuICAgICAgICByZXMuc2V0SGVhZGVyKG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS5ub3QudG9CZShcImd6aXBcIik7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIGEgMjA2LCB3aG9zZSBib2R5IGlzIGEgcmFuZ2Ugb2YgdGhlIHN0b3JlZCBieXRlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gVGhlIG9uZSB1bmNvbXByZXNzYWJsZSBzdGF0dXMgdGhhdCBjYXJyaWVzIGEgYm9keS4gYGNvbnRlbnQtcmFuZ2VgIGNvdW50c1xuICAgIC8vIGJ5dGVzIG9mIHRoZSByZXByZXNlbnRhdGlvbiB0aGUgY2xpZW50IGFza2VkIGZvciwgc28gZ3ppcHBpbmcgdGhlIHNsaWNlXG4gICAgLy8gbWFrZXMgdGhlIHJhbmdlIG1lYW5pbmdsZXNzIC0gYW5kIGEgY2xpZW50IHN0aXRjaGluZyByYW5nZXMgdG9nZXRoZXJcbiAgICAvLyAodmlkZW8sIGEgcmVzdW1lZCBkb3dubG9hZCkgY2Fubm90IHVzZSBpdC5cbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zdGF0dXNDb2RlID0gMjA2O1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW5cIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1SYW5nZVwiLCBcImJ5dGVzIDAtMy8xMDAwXCIpO1xuICAgICAgcmVzLmVuZChcImJvZHlcIik7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJib2R5XCIpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGd6aXAgd2hlbiB0aGUgY2xpZW50IGRpZCBub3Qgb2ZmZXIgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgcmVxOiByZXF1ZXN0V2l0aCh7fSkgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIHdoZW4gbmV4dC5jb25maWcgc2V0cyBjb21wcmVzczogZmFsc2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgY29tcHJlc3M6IGZhbHNlIH0sXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbXCJhIEhFQUQgcmVxdWVzdFwiLCB7IG1ldGhvZDogXCJIRUFEXCIsIHN0YXR1czogMjAwIH1dLFxuICAgIFtcImEgMjA0XCIsIHsgbWV0aG9kOiBcIkdFVFwiLCBzdGF0dXM6IDIwNCB9XSxcbiAgICBbXCJhIDMwNFwiLCB7IG1ldGhvZDogXCJHRVRcIiwgc3RhdHVzOiAzMDQgfV0sXG4gIF0pKFwiZG9lcyBub3QgZ3ppcCAlc1wiLCBhc3luYyAoX25hbWUsIHsgbWV0aG9kLCBzdGF0dXMgfSkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gc3RhdHVzO1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9LFxuICAgICAgeyByZXE6IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSwgbWV0aG9kKSB9LFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwaXBlVG9TaW5rIGVtcHR5LWJvZHkgcGFkZGluZ1wiLCAoKSA9PiB7XG4gIGl0KFwid3JpdGVzIGEgc2luZ2xlIHNwYWNlIHdoZW4gdGhlIHNpbmsgYXNrcyBmb3IgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXNDb2RlID0gMzA0O1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9LFxuICAgICAgeyBwYWRFbXB0eUJvZHk6IHRydWUgfSxcbiAgICApO1xuICAgIC8vIFplcm8gcGF5bG9hZCBieXRlcyBhZnRlciB0aGUgcHJlbHVkZSBtYWtlcyBBUEkgR2F0ZXdheSBhbnN3ZXIgNTAyLCBhbmRcbiAgICAvLyBtYWtlcyBhIEZ1bmN0aW9uIFVSTCBkcm9wIHRoZSBwcmVsdWRlIGFuZCBhbnN3ZXIgYSBiYXJlXG4gICAgLy8gYDIwMCBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gLlxuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIiBcIik7XG4gIH0pO1xuXG4gIGl0KFwicGFkcyBhIEhFQUQgcmVzcG9uc2UsIHdob3NlIGJvZHkgaXMgZW1wdHkgYnkgZGVmaW5pdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bihcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvaHRtbDsgY2hhcnNldD11dGYtOFwiKTtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtbGVuZ3RoXCIsIFwiNTc5OFwiKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgcGFkRW1wdHlCb2R5OiB0cnVlLFxuICAgICAgICByZXE6IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSwgXCJIRUFEXCIpLFxuICAgICAgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcIiBcIik7XG4gICAgLy8gVGhlIGhlYWQgc3RpbGwgZGVzY3JpYmVzIHdoYXQgYSBHRVQgd291bGQgcmV0dXJuOyB0aGUgcGFkZGluZyBieXRlIGlzIG5vdFxuICAgIC8vIGEgYm9keSBhbmQgdGhlIGludGVncmF0aW9uIG92ZXJ3cml0ZXMgYGNvbnRlbnQtbGVuZ3RoYCB3aXRoIDAuXG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtbGVuZ3RoXCJdKS50b0JlKFwiNTc5OFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSBub24tZW1wdHkgYm9keSBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiByZXMuZW5kKFwicmVhbFwiKSwge1xuICAgICAgcGFkRW1wdHlCb2R5OiB0cnVlLFxuICAgICAgY29tcHJlc3M6IGZhbHNlLFxuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcInJlYWxcIik7XG4gIH0pO1xuXG4gIGl0KFwic2VuZHMgbm90aGluZyBmb3IgYW4gZW1wdHkgYm9keSB3aGVuIHRoZSBzaW5rIGRvZXMgbm90IGFza1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiB7XG4gICAgICByZXMuc3RhdHVzQ29kZSA9IDMwNDtcbiAgICAgIHJlcy5lbmQoKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5ib2R5KS50b0hhdmVMZW5ndGgoMCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBsaWZlY3ljbGVcIiwgKCkgPT4ge1xuICAvKipcbiAgICogYGhhbmRsZSgpYCBhd2FpdHMgdGhpcyBwcm9taXNlIGJlZm9yZSBpdCBmbHVzaGVzIGB3YWl0VW50aWxgIHdvcmsg4oCUIElTUlxuICAgKiByZXZhbGlkYXRpb24sIGNhY2hlIHdyaXRlcyDigJQgYW5kIGJlZm9yZSB0aGUgcmVxdWVzdCdzIGNsb3N1cmVzIGNhbiBiZVxuICAgKiBjb2xsZWN0ZWQuIEEgY2xpZW50IHRoYXQgZGlzY29ubmVjdHMgYmVmb3JlIHRoZSBmaXJzdCBieXRlIGRlc3Ryb3lzIHRoZVxuICAgKiByZXNwb25zZSB3aXRob3V0IGFuIGVycm9yLCB3aGljaCBlbWl0cyBvbmx5IGBcImNsb3NlXCJgOiB0aGUgcGlwZWxpbmUgbmV2ZXJcbiAgICogc3RhcnRlZCwgc28gbm90aGluZyBlbHNlIGNhbiBzZXR0bGUgdGhlIHByb21pc2UgYW5kIHRoZSBhd2FpdCBuZXZlciByZXR1cm5lZC5cbiAgICovXG4gIGl0KFwic2V0dGxlcyB3aGVuIHRoZSByZXNwb25zZSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBoZWFkIGdvZXMgb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXEgPSByZXF1ZXN0V2l0aCh7fSk7XG4gICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKHJlcSwgcmVzLCBuZXcgQ29sbGVjdGluZ1NpbmsoKSwge1xuICAgICAgY29tcHJlc3M6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXMuZGVzdHJveSgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlc29sdmVzLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgLy8gVGhlIG5vcm1hbCBwYXRoIGhhcyB0byBrZWVwIHNldHRsaW5nIG9uIHRoZSBwaXBlbGluZSwgbm90IG9uIGBcImNsb3NlXCJgOiB0aGVcbiAgLy8gYm9keSBtdXN0IGJlIGZ1bGx5IGZsdXNoZWQgaW50byB0aGUgc2luayBieSB0aGUgdGltZSB0aGlzIHJlc29sdmVzLlxuICBpdChcInN0aWxsIHNldHRsZXMgb24gdGhlIHBpcGVsaW5lIG9uY2UgdGhlIGhlYWQgaGFzIGdvbmUgb3V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiY29udGVudC10eXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgICAgICAgcmVzLmVuZChcImJvZHlcIik7XG4gICAgICB9LFxuICAgICAgeyBjb21wcmVzczogZmFsc2UgfSxcbiAgICApO1xuXG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZygpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHdoZW4gdGhlIHJlc3BvbnNlIGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBkb25lID0gcGlwZVRvU2luayhyZXEsIHJlcywgbmV3IENvbGxlY3RpbmdTaW5rKCksIHtcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmVzLmRlc3Ryb3kobmV3IEVycm9yKFwiYm9vbVwiKSk7XG5cbiAgICBhd2FpdCBleHBlY3QoZG9uZSkucmVqZWN0cy50b1Rocm93KFwiYm9vbVwiKTtcbiAgfSk7XG5cbiAgLy8gQSBzaW5rIHRoYXQgY2Fubm90IHRha2UgdGhlIGhlYWQg4oCUIGB3cml0ZUhlYWRgIHJlamVjdGluZyBhIGhlYWRlciB2YWx1ZSBpc1xuICAvLyB0aGUgcmVhbCBjYXNlIOKAlCB0aHJvd3MgZnJvbSBpbnNpZGUgdGhlIGBcImhlYWRcImAgbGlzdGVuZXIsIHdoZXJlIG5vdGhpbmdcbiAgLy8gZWxzZSB3b3VsZCBjYXRjaCBpdCBhbmQgdGhlIHBpcGVsaW5lIG5ldmVyIHN0YXJ0cy5cbiAgaXQuZWFjaChbXG4gICAgW1wid3JpdGVzIGEgYm9keVwiLCAocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpID0+IHJlcy5lbmQoXCJib2R5XCIpXSxcbiAgICBbXCJlbmRzIGVtcHR5XCIsIChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gcmVzLmVuZCgpXSxcbiAgICBbXCJmbHVzaGVzIGl0cyBoZWFkIGZpcnN0XCIsIChyZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSkgPT4gcmVzLndyaXRlSGVhZCgyMDApXSxcbiAgXSkoXG4gICAgXCJyZWplY3RzIGFuZCBkZXN0cm95cyB0aGUgcmVzcG9uc2Ugd2hlbiBiZWdpbigpIHRocm93cyBhbmQgdGhlIHJlc3BvbnNlICVzXCIsXG4gICAgYXN5bmMgKF9uYW1lLCB3cml0ZSkgPT4ge1xuICAgICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgICAgY29uc3QgcmVzID0gbmV3IFNoaW1TZXJ2ZXJSZXNwb25zZSgpO1xuICAgICAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsoXG4gICAgICAgIHJlcSxcbiAgICAgICAgcmVzLFxuICAgICAgICB7XG4gICAgICAgICAgYmVnaW4oKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgaGVhZFwiKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7IGNvbXByZXNzOiBmYWxzZSB9LFxuICAgICAgKTtcblxuICAgICAgd3JpdGUocmVzKTtcblxuICAgICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlamVjdHMudG9UaHJvdyhcImJhZCBoZWFkXCIpO1xuICAgICAgZXhwZWN0KHJlcy5kZXN0cm95ZWQpLnRvQmUodHJ1ZSk7XG4gICAgfSxcbiAgKTtcbn0pO1xuXG5kZXNjcmliZShcImFjY2VwdHNHemlwXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wiZ3ppcFwiLCB0cnVlXSxcbiAgICBbXCJnemlwLCBkZWZsYXRlLCBiclwiLCB0cnVlXSxcbiAgICBbXCJHWklQO3E9MC41XCIsIHRydWVdLFxuICAgIFtcImd6aXA7cT0wXCIsIGZhbHNlXSxcbiAgICBbXCIqXCIsIHRydWVdLFxuICAgIFtcIio7cT0wXCIsIGZhbHNlXSxcbiAgICAvLyBBbiBleHBsaWNpdCBnemlwIHByZWZlcmVuY2Ugd2lucyBvdmVyIHRoZSB3aWxkY2FyZCwgaW4gZWl0aGVyIG9yZGVyLlxuICAgIFtcIio7cT0wLCBnemlwXCIsIHRydWVdLFxuICAgIFtcImd6aXA7cT0wLCAqXCIsIGZhbHNlXSxcbiAgICBbXCJiciwgZGVmbGF0ZVwiLCBmYWxzZV0sXG4gICAgW1wiXCIsIGZhbHNlXSxcbiAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gIF0pKFwiJXMg4oaSICVzXCIsIChoZWFkZXIsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGFjY2VwdHNHemlwKGhlYWRlcikpLnRvQmUoZXhwZWN0ZWQpO1xuICB9KTtcblxuICBpdChcImpvaW5zIGEgcmVwZWF0ZWQgaGVhZGVyIGJlZm9yZSBwYXJzaW5nXCIsICgpID0+IHtcbiAgICBleHBlY3QoYWNjZXB0c0d6aXAoW1wiYnJcIiwgXCJnemlwXCJdKSkudG9CZSh0cnVlKTtcbiAgfSk7XG59KTtcbiJdfQ==
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luay50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3J1bnRpbWUvaHR0cC9zaW5rLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2Q0FBMEM7QUFDMUMsNkNBQXVDO0FBQ3ZDLHlDQUFtRTtBQUNuRSx1Q0FBZ0Q7QUFDaEQseUNBQThEO0FBQzlELGlDQUErRDtBQUUvRCxNQUFNLGNBQWM7SUFJaUI7SUFINUIsSUFBSSxDQUFnQjtJQUNYLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFFdEMsWUFBbUMsZUFBZSxLQUFLO1FBQXBCLGlCQUFZLEdBQVosWUFBWSxDQUFRO0lBQUcsQ0FBQztJQUVwRCxLQUFLLENBQUMsSUFBa0I7UUFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixPQUFPLElBQUksc0JBQVEsQ0FBQztZQUNsQixLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRO2dCQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDaEMsUUFBUSxFQUFFLENBQUM7WUFDYixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBRUQsU0FBUyxXQUFXLENBQ2xCLE9BQStCLEVBQy9CLE1BQU0sR0FBRyxLQUFLO0lBRWQsT0FBTyxJQUFJLDZCQUFtQixDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBUUQsaUZBQWlGO0FBQ2pGLEtBQUssVUFBVSxHQUFHLENBQ2hCLEtBQXdDLEVBQ3hDLFVBQW9CLEVBQUU7SUFFdEIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztJQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBQSxpQkFBVSxFQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO1FBQ3RDLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUk7S0FDbkMsQ0FBQyxDQUFDO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxJQUFJLENBQUM7SUFDWCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzdCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLDBCQUEwQixDQUFDLENBQUM7WUFDMUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN0QyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsNEVBQTRFO1FBQzVFLG1DQUFtQztRQUNuQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzdELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsSUFBQSxzQkFBVSxFQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDcEUsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCw0RUFBNEU7SUFDNUUsMEVBQTBFO0lBQzFFLDZFQUE2RTtJQUM3RSw2RUFBNkU7SUFDN0UseUNBQXlDO0lBQ3pDLEVBQUUsQ0FBQyxzRUFBc0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNwRixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDNUIsTUFBTSxRQUFRLEdBQWlCO1lBQzdCLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FDVixJQUFJLHNCQUFRLENBQUM7Z0JBQ1gsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUTtvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekIsQ0FBQzthQUNGLENBQUM7U0FDTCxDQUFDO1FBQ0YsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFDckIsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFDMUMsR0FBRyxFQUNILFFBQVEsRUFDUixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDbkIsQ0FBQztRQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDbEQsMkVBQTJFO1FBQzNFLHFFQUFxRTtRQUNyRSxNQUFNLElBQUksR0FBRyxJQUFBLHlCQUFXLEVBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzVDLHFEQUFxRDtZQUNyRCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sU0FBUyxHQUFHLEdBQXFDLENBQUM7WUFDeEQsSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLE9BQU8sU0FBUyxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDbEUsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3BCLENBQUM7WUFDRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM3RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQztRQUNsQixDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBVyxFQUFFLENBQ3pCLElBQUEsc0JBQVUsRUFBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2hDLFdBQVcsRUFBRSxxQkFBYSxDQUFDLFlBQVk7U0FDeEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEtBQUssRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFDRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLENBQUM7UUFDWCxNQUFNLENBQUMsSUFBQSxzQkFBVSxFQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsQ0FBQztRQUNwRSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDekQ7WUFDRSw0Q0FBNEM7WUFDNUM7Z0JBQ0UsY0FBYyxFQUFFLG1CQUFtQjtnQkFDbkMsZUFBZSxFQUFFLHdCQUF3QjthQUMxQztTQUNGO0tBQ0YsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDOUMsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDOUUsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSx1RUFBdUU7UUFDdkUsNkNBQTZDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDN0IsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7WUFDckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDNUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUNqRCxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDOUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQ3BCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUMzQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xCLENBQUMsRUFDRCxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FDekIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ25FLE1BQU0sSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQixDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQ3BCLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7S0FDMUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtRQUN6RCxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLEdBQUcsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNaLENBQUMsRUFDRCxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUM1RCxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNqRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFLEdBQUcsRUFBRTtJQUM3QyxFQUFFLENBQUMsaURBQWlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDL0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQ3BCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNyQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixDQUFDLEVBQ0QsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQ3ZCLENBQUM7UUFDRix5RUFBeUU7UUFDekUsMERBQTBEO1FBQzFELGtDQUFrQztRQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDdkUsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQ3BCLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDTixHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO1lBQzFELEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDeEMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1osQ0FBQyxFQUNEO1lBQ0UsWUFBWSxFQUFFLElBQUk7WUFDbEIsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQztTQUN4RCxDQUNGLENBQUM7UUFDRixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsNEVBQTRFO1FBQzVFLGlFQUFpRTtRQUNqRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3QyxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDMUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUNyQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDOzs7Ozs7T0FNRztJQUNILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMvRSxNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksY0FBYyxFQUFFLEVBQUU7WUFDdEQsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFZCxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCw4RUFBOEU7SUFDOUUsc0VBQXNFO0lBQ3RFLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN4RSxNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQzVDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUNwQixDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDaEQsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLElBQUksNkJBQWtCLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksR0FBRyxJQUFBLGlCQUFVLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLGNBQWMsRUFBRSxFQUFFO1lBQ3RELFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBRS9CLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsQ0FBQyxDQUFDLENBQUM7SUFFSCw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLHFEQUFxRDtJQUNyRCxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ04sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUF1QixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELENBQUMsWUFBWSxFQUFFLENBQUMsR0FBdUIsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RELENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxHQUF1QixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzVFLENBQUMsQ0FDQSwyRUFBMkUsRUFDM0UsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNyQixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSw2QkFBa0IsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUEsaUJBQVUsRUFDckIsR0FBRyxFQUNILEdBQUcsRUFDSDtZQUNFLEtBQUs7Z0JBQ0gsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDO1NBQ0YsRUFDRCxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FDcEIsQ0FBQztRQUVGLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVYLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUNGLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFO0lBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDTixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDZCxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQztRQUMzQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7UUFDcEIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1FBQ25CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztRQUNYLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUNoQix1RUFBdUU7UUFDdkUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO1FBQ3JCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQztRQUN0QixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO1FBQ1gsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO0tBQ25CLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDakMsTUFBTSxDQUFDLElBQUEsa0JBQVcsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxDQUFDLElBQUEsa0JBQVcsRUFBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gXCJub2RlOmNyeXB0b1wiO1xuaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tIFwibm9kZTpzdHJlYW1cIjtcbmltcG9ydCB7IGNvbnN0YW50cyBhcyB6bGliQ29uc3RhbnRzLCBndW56aXBTeW5jIH0gZnJvbSBcIm5vZGU6emxpYlwiO1xuaW1wb3J0IHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL3JlcXVlc3RcIjtcbmltcG9ydCB7IFJlc3BvbnNlSGVhZCwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vcmVzcG9uc2VcIjtcbmltcG9ydCB7IGFjY2VwdHNHemlwLCBwaXBlVG9TaW5rLCBSZXNwb25zZVNpbmsgfSBmcm9tIFwiLi9zaW5rXCI7XG5cbmNsYXNzIENvbGxlY3RpbmdTaW5rIGltcGxlbWVudHMgUmVzcG9uc2VTaW5rIHtcbiAgcHVibGljIGhlYWQ/OiBSZXNwb25zZUhlYWQ7XG4gIHB1YmxpYyByZWFkb25seSBjaHVua3M6IEJ1ZmZlcltdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBwYWRFbXB0eUJvZHkgPSBmYWxzZSkge31cblxuICBwdWJsaWMgYmVnaW4oaGVhZDogUmVzcG9uc2VIZWFkKTogV3JpdGFibGUge1xuICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG4gICAgY29uc3QgY2h1bmtzID0gdGhpcy5jaHVua3M7XG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZSh7XG4gICAgICB3cml0ZShjaHVuaywgX2VuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYm9keSgpOiBCdWZmZXIge1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KHRoaXMuY2h1bmtzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0V2l0aChcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgbWV0aG9kID0gXCJHRVRcIixcbik6IFNoaW1JbmNvbWluZ01lc3NhZ2Uge1xuICByZXR1cm4gbmV3IFNoaW1JbmNvbWluZ01lc3NhZ2UoeyBtZXRob2QsIHVybDogXCIvXCIsIGhlYWRlcnMgfSk7XG59XG5cbmludGVyZmFjZSBQaXBlQ2FzZSB7XG4gIHJlYWRvbmx5IHJlcT86IFNoaW1JbmNvbWluZ01lc3NhZ2U7XG4gIHJlYWRvbmx5IGNvbXByZXNzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGFkRW1wdHlCb2R5PzogYm9vbGVhbjtcbn1cblxuLyoqIFJ1bnMgb25lIHJlc3BvbnNlIHRocm91Z2ggdGhlIHNpbmsgYW5kIHJlc29sdmVzIG9uY2UgdGhlIHNpbmsgaXMgZmluaXNoZWQuICovXG5hc3luYyBmdW5jdGlvbiBydW4oXG4gIHdyaXRlOiAocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpID0+IHZvaWQsXG4gIG9wdGlvbnM6IFBpcGVDYXNlID0ge30sXG4pOiBQcm9taXNlPENvbGxlY3RpbmdTaW5rPiB7XG4gIGNvbnN0IHJlcSA9IG9wdGlvbnMucmVxID8/IHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSk7XG4gIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgY29uc3Qgc2luayA9IG5ldyBDb2xsZWN0aW5nU2luayhvcHRpb25zLnBhZEVtcHR5Qm9keSk7XG4gIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKHJlcSwgcmVzLCBzaW5rLCB7XG4gICAgY29tcHJlc3M6IG9wdGlvbnMuY29tcHJlc3MgPz8gdHJ1ZSxcbiAgfSk7XG4gIHdyaXRlKHJlcyk7XG4gIGF3YWl0IGRvbmU7XG4gIHJldHVybiBzaW5rO1xufVxuXG5kZXNjcmliZShcInBpcGVUb1NpbmsgY29tcHJlc3Npb25cIiwgKCkgPT4ge1xuICBpdChcImd6aXBzIGNvbXByZXNzaWJsZSBjb250ZW50IHdoZW4gdGhlIGNsaWVudCBhY2NlcHRzIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKChyZXMpID0+IHtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIiwgXCIxM1wiKTtcbiAgICAgIHJlcy5lbmQoXCI8cD5oZWxsbzwvcD5cIik7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmUoXCJnemlwXCIpO1xuICAgIC8vIFRoZSBsZW5ndGggd2Ugd2VyZSB0b2xkIGlzIHRoZSB1bmNvbXByZXNzZWQgb25lIGFuZCB0aGUgY29tcHJlc3NlZCBvbmUgaXNcbiAgICAvLyBub3Qga25vd24gdW50aWwgdGhlIHN0cmVhbSBlbmRzLlxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnMudmFyeSkudG9CZShcIkFjY2VwdC1FbmNvZGluZ1wiKTtcbiAgICBleHBlY3QoZ3VuemlwU3luYyhzaW5rLmJvZHkpLnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCI8cD5oZWxsbzwvcD5cIik7XG4gIH0pO1xuXG4gIGl0KFwiYXBwZW5kcyB0byBhbiBleGlzdGluZyB2YXJ5IHJhdGhlciB0aGFuIHJlcGxhY2luZyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiB7XG4gICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgcmVzLnNldEhlYWRlcihcIlZhcnlcIiwgXCJDb29raWVcIik7XG4gICAgICByZXMuZW5kKFwieFwiKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzLnZhcnkpLnRvQmUoXCJDb29raWUsIEFjY2VwdC1FbmNvZGluZ1wiKTtcbiAgfSk7XG5cbiAgLy8gSXNzdWUgIzMyMS4gTmV4dC5qcyB3cml0ZXMgZWFjaCBSU0MvSFRNTCBjaHVuayBhbmQgdGhlbiB3YWl0cyBmb3IgYGRyYWluYFxuICAvLyAoYHBpcGUtcmVhZGFibGUuanNgKS4gVW5kZXIgYmFja3ByZXNzdXJlIGEgY2h1bmsgc2l0cyBpbiBgcmVzYCdzIGJ1ZmZlclxuICAvLyB3aGlsZSBlYXJsaWVyIG9uZXMgY29tcHJlc3MsIGFuZCBhIGZsdXNoIGlzc3VlZCBhdCB3cml0ZSB0aW1lIHJhbiBhaGVhZCBvZlxuICAvLyBpdCwgc28gdGhlIGxhc3QgY2h1bmsgYmVmb3JlIGEgcGF1c2UgLSBhIGA8U3VzcGVuc2U+YCBmYWxsYmFjayAtIHN0YXllZCBpblxuICAvLyB6bGliIHVudGlsIHRoZSBzbG93IGJvdW5kYXJ5IHJlc29sdmVkLlxuICBpdChcImRlbGl2ZXJzIGV2ZXJ5IHdyaXR0ZW4gY2h1bmsgYmVmb3JlIGEgcGF1c2UsIGV2ZW4gdW5kZXIgYmFja3ByZXNzdXJlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gICAgY29uc3Qgc2xvd1Npbms6IFJlc3BvbnNlU2luayA9IHtcbiAgICAgIGJlZ2luOiAoKSA9PlxuICAgICAgICBuZXcgV3JpdGFibGUoe1xuICAgICAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGNhbGxiYWNrKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBkb25lID0gcGlwZVRvU2luayhcbiAgICAgIHJlcXVlc3RXaXRoKHsgXCJhY2NlcHQtZW5jb2RpbmdcIjogXCJnemlwXCIgfSksXG4gICAgICByZXMsXG4gICAgICBzbG93U2luayxcbiAgICAgIHsgY29tcHJlc3M6IHRydWUgfSxcbiAgICApO1xuICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3gtY29tcG9uZW50XCIpO1xuICAgIC8vIEhleCBjb21wcmVzc2VzIGFib3V0IDI6MSwgc28gZWFjaCBjaHVuayBpcyBzdGlsbCBsYXJnZXIgdGhhbiBgcmVzYCdzIG93blxuICAgIC8vIDE2IEtpQiBidWZmZXIsIGFuZCBldmVyeSB3cml0ZSBhZnRlciB0aGUgZmlyc3QgbWVldHMgYmFja3ByZXNzdXJlLlxuICAgIGNvbnN0IGJvZHkgPSByYW5kb21CeXRlcyg1MF8wMDApLnRvU3RyaW5nKFwiaGV4XCIpO1xuICAgIGxldCB3cml0dGVuID0gMDtcbiAgICBmb3IgKGNvbnN0IHNpemUgb2YgWzQwXzAwMCwgMzBfMDAwLCAzMF8wMDBdKSB7XG4gICAgICAvLyBgcGlwZS1yZWFkYWJsZS5qc2AsIHZlcmJhdGltIGFwYXJ0IGZyb20gdGhlIHR5cGVzLlxuICAgICAgY29uc3Qgb2sgPSByZXMud3JpdGUoYm9keS5zbGljZSh3cml0dGVuLCB3cml0dGVuICsgc2l6ZSkpO1xuICAgICAgY29uc3QgZmx1c2hhYmxlID0gcmVzIGFzIHVua25vd24gYXMgeyBmbHVzaD86IHVua25vd24gfTtcbiAgICAgIGlmIChcImZsdXNoXCIgaW4gZmx1c2hhYmxlICYmIHR5cGVvZiBmbHVzaGFibGUuZmx1c2ggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBmbHVzaGFibGUuZmx1c2goKTtcbiAgICAgIH1cbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlcy5vbmNlKFwiZHJhaW5cIiwgcmVzb2x2ZSkpO1xuICAgICAgfVxuICAgICAgd3JpdHRlbiArPSBzaXplO1xuICAgIH1cbiAgICBjb25zdCBzb0ZhciA9ICgpOiBzdHJpbmcgPT5cbiAgICAgIGd1bnppcFN5bmMoQnVmZmVyLmNvbmNhdChjaHVua3MpLCB7XG4gICAgICAgIGZpbmlzaEZsdXNoOiB6bGliQ29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgIH0pLnRvU3RyaW5nKFwidXRmLThcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MCAmJiBzb0ZhcigpLmxlbmd0aCA8IGJvZHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgfVxuICAgIGV4cGVjdChzb0ZhcigpKS50b0JlKGJvZHkpO1xuICAgIHJlcy5lbmQoKTtcbiAgICBhd2FpdCBkb25lO1xuICAgIGV4cGVjdChndW56aXBTeW5jKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShib2R5KTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXG4gICAgW1wiYW4gaW5jb21wcmVzc2libGUgY29udGVudCB0eXBlXCIsIHsgXCJjb250ZW50LXR5cGVcIjogXCJpbWFnZS9hdmlmXCIgfV0sXG4gICAgW1wiYW4gYWxyZWFkeS1lbmNvZGVkIGJvZHlcIiwgeyBcImNvbnRlbnQtZW5jb2RpbmdcIjogXCJiclwiIH1dLFxuICAgIFtcbiAgICAgIFwiYSByZXNwb25zZSB0aGF0IG9wdHMgb3V0IHdpdGggbm8tdHJhbnNmb3JtXCIsXG4gICAgICB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwidGV4dC9ldmVudC1zdHJlYW1cIixcbiAgICAgICAgXCJjYWNoZS1jb250cm9sXCI6IFwibm8tY2FjaGUsIG5vLXRyYW5zZm9ybVwiLFxuICAgICAgfSxcbiAgICBdLFxuICBdKShcImRvZXMgbm90IGd6aXAgJXNcIiwgYXN5bmMgKF9uYW1lLCBoZWFkZXJzKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgICAgcmVzLnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXMuZW5kKFwiYm9keVwiKTtcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkubm90LnRvQmUoXCJnemlwXCIpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcImJvZHlcIik7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgZ3ppcCBhIDIwNiwgd2hvc2UgYm9keSBpcyBhIHJhbmdlIG9mIHRoZSBzdG9yZWQgYnl0ZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFRoZSBvbmUgdW5jb21wcmVzc2FibGUgc3RhdHVzIHRoYXQgY2FycmllcyBhIGJvZHkuIGBjb250ZW50LXJhbmdlYCBjb3VudHNcbiAgICAvLyBieXRlcyBvZiB0aGUgcmVwcmVzZW50YXRpb24gdGhlIGNsaWVudCBhc2tlZCBmb3IsIHNvIGd6aXBwaW5nIHRoZSBzbGljZVxuICAgIC8vIG1ha2VzIHRoZSByYW5nZSBtZWFuaW5nbGVzcyAtIGFuZCBhIGNsaWVudCBzdGl0Y2hpbmcgcmFuZ2VzIHRvZ2V0aGVyXG4gICAgLy8gKHZpZGVvLCBhIHJlc3VtZWQgZG93bmxvYWQpIGNhbm5vdCB1c2UgaXQuXG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bigocmVzKSA9PiB7XG4gICAgICByZXMuc3RhdHVzQ29kZSA9IDIwNjtcbiAgICAgIHJlcy5zZXRIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJ0ZXh0L3BsYWluXCIpO1xuICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtUmFuZ2VcIiwgXCJieXRlcyAwLTMvMTAwMFwiKTtcbiAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgIH0pO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgZXhwZWN0KHNpbmsuYm9keS50b1N0cmluZyhcInV0Zi04XCIpKS50b0JlKFwiYm9keVwiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCBnemlwIHdoZW4gdGhlIGNsaWVudCBkaWQgbm90IG9mZmVyIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICByZXMuZW5kKFwiYm9keVwiKTtcbiAgICAgIH0sXG4gICAgICB7IHJlcTogcmVxdWVzdFdpdGgoe30pIH0sXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5oZWFkPy5oZWFkZXJzW1wiY29udGVudC1lbmNvZGluZ1wiXSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoXCJ1dGYtOFwiKSkudG9CZShcImJvZHlcIik7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgZ3ppcCB3aGVuIG5leHQuY29uZmlnIHNldHMgY29tcHJlc3M6IGZhbHNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9odG1sXCIpO1xuICAgICAgICByZXMuZW5kKFwiYm9keVwiKTtcbiAgICAgIH0sXG4gICAgICB7IGNvbXByZXNzOiBmYWxzZSB9LFxuICAgICk7XG4gICAgZXhwZWN0KHNpbmsuaGVhZD8uaGVhZGVyc1tcImNvbnRlbnQtZW5jb2RpbmdcIl0pLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXG4gICAgW1wiYSBIRUFEIHJlcXVlc3RcIiwgeyBtZXRob2Q6IFwiSEVBRFwiLCBzdGF0dXM6IDIwMCB9XSxcbiAgICBbXCJhIDIwNFwiLCB7IG1ldGhvZDogXCJHRVRcIiwgc3RhdHVzOiAyMDQgfV0sXG4gICAgW1wiYSAzMDRcIiwgeyBtZXRob2Q6IFwiR0VUXCIsIHN0YXR1czogMzA0IH1dLFxuICBdKShcImRvZXMgbm90IGd6aXAgJXNcIiwgYXN5bmMgKF9uYW1lLCB7IG1ldGhvZCwgc3RhdHVzIH0pID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvaHRtbFwiKTtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSxcbiAgICAgIHsgcmVxOiByZXF1ZXN0V2l0aCh7IFwiYWNjZXB0LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0sIG1ldGhvZCkgfSxcbiAgICApO1xuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWVuY29kaW5nXCJdKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlwZVRvU2luayBlbXB0eS1ib2R5IHBhZGRpbmdcIiwgKCkgPT4ge1xuICBpdChcIndyaXRlcyBhIHNpbmdsZSBzcGFjZSB3aGVuIHRoZSBzaW5rIGFza3MgZm9yIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzaW5rID0gYXdhaXQgcnVuKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDMwNDtcbiAgICAgICAgcmVzLmVuZCgpO1xuICAgICAgfSxcbiAgICAgIHsgcGFkRW1wdHlCb2R5OiB0cnVlIH0sXG4gICAgKTtcbiAgICAvLyBaZXJvIHBheWxvYWQgYnl0ZXMgYWZ0ZXIgdGhlIHByZWx1ZGUgbWFrZXMgQVBJIEdhdGV3YXkgYW5zd2VyIDUwMiwgYW5kXG4gICAgLy8gbWFrZXMgYSBGdW5jdGlvbiBVUkwgZHJvcCB0aGUgcHJlbHVkZSBhbmQgYW5zd2VyIGEgYmFyZVxuICAgIC8vIGAyMDAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtYC5cbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCIgXCIpO1xuICB9KTtcblxuICBpdChcInBhZHMgYSBIRUFEIHJlc3BvbnNlLCB3aG9zZSBib2R5IGlzIGVtcHR5IGJ5IGRlZmluaXRpb25cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oXG4gICAgICAocmVzKSA9PiB7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJjb250ZW50LXR5cGVcIiwgXCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLThcIik7XG4gICAgICAgIHJlcy5zZXRIZWFkZXIoXCJjb250ZW50LWxlbmd0aFwiLCBcIjU3OThcIik7XG4gICAgICAgIHJlcy5lbmQoKTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHBhZEVtcHR5Qm9keTogdHJ1ZSxcbiAgICAgICAgcmVxOiByZXF1ZXN0V2l0aCh7IFwiYWNjZXB0LWVuY29kaW5nXCI6IFwiZ3ppcFwiIH0sIFwiSEVBRFwiKSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCIgXCIpO1xuICAgIC8vIFRoZSBoZWFkIHN0aWxsIGRlc2NyaWJlcyB3aGF0IGEgR0VUIHdvdWxkIHJldHVybjsgdGhlIHBhZGRpbmcgYnl0ZSBpcyBub3RcbiAgICAvLyBhIGJvZHkgYW5kIHRoZSBpbnRlZ3JhdGlvbiBvdmVyd3JpdGVzIGBjb250ZW50LWxlbmd0aGAgd2l0aCAwLlxuICAgIGV4cGVjdChzaW5rLmhlYWQ/LmhlYWRlcnNbXCJjb250ZW50LWxlbmd0aFwiXSkudG9CZShcIjU3OThcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgbm9uLWVtcHR5IGJvZHkgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4gcmVzLmVuZChcInJlYWxcIiksIHtcbiAgICAgIHBhZEVtcHR5Qm9keTogdHJ1ZSxcbiAgICAgIGNvbXByZXNzOiBmYWxzZSxcbiAgICB9KTtcbiAgICBleHBlY3Qoc2luay5ib2R5LnRvU3RyaW5nKFwidXRmLThcIikpLnRvQmUoXCJyZWFsXCIpO1xuICB9KTtcblxuICBpdChcInNlbmRzIG5vdGhpbmcgZm9yIGFuIGVtcHR5IGJvZHkgd2hlbiB0aGUgc2luayBkb2VzIG5vdCBhc2tcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNpbmsgPSBhd2FpdCBydW4oKHJlcykgPT4ge1xuICAgICAgcmVzLnN0YXR1c0NvZGUgPSAzMDQ7XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSk7XG4gICAgZXhwZWN0KHNpbmsuYm9keSkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInBpcGVUb1NpbmsgbGlmZWN5Y2xlXCIsICgpID0+IHtcbiAgLyoqXG4gICAqIGBoYW5kbGUoKWAgYXdhaXRzIHRoaXMgcHJvbWlzZSBiZWZvcmUgaXQgZmx1c2hlcyBgd2FpdFVudGlsYCB3b3JrIOKAlCBJU1JcbiAgICogcmV2YWxpZGF0aW9uLCBjYWNoZSB3cml0ZXMg4oCUIGFuZCBiZWZvcmUgdGhlIHJlcXVlc3QncyBjbG9zdXJlcyBjYW4gYmVcbiAgICogY29sbGVjdGVkLiBBIGNsaWVudCB0aGF0IGRpc2Nvbm5lY3RzIGJlZm9yZSB0aGUgZmlyc3QgYnl0ZSBkZXN0cm95cyB0aGVcbiAgICogcmVzcG9uc2Ugd2l0aG91dCBhbiBlcnJvciwgd2hpY2ggZW1pdHMgb25seSBgXCJjbG9zZVwiYDogdGhlIHBpcGVsaW5lIG5ldmVyXG4gICAqIHN0YXJ0ZWQsIHNvIG5vdGhpbmcgZWxzZSBjYW4gc2V0dGxlIHRoZSBwcm9taXNlIGFuZCB0aGUgYXdhaXQgbmV2ZXIgcmV0dXJuZWQuXG4gICAqL1xuICBpdChcInNldHRsZXMgd2hlbiB0aGUgcmVzcG9uc2UgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgaGVhZCBnb2VzIG91dFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVxID0gcmVxdWVzdFdpdGgoe30pO1xuICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICBjb25zdCBkb25lID0gcGlwZVRvU2luayhyZXEsIHJlcywgbmV3IENvbGxlY3RpbmdTaW5rKCksIHtcbiAgICAgIGNvbXByZXNzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmVzLmRlc3Ryb3koKTtcblxuICAgIGF3YWl0IGV4cGVjdChkb25lKS5yZXNvbHZlcy50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIC8vIFRoZSBub3JtYWwgcGF0aCBoYXMgdG8ga2VlcCBzZXR0bGluZyBvbiB0aGUgcGlwZWxpbmUsIG5vdCBvbiBgXCJjbG9zZVwiYDogdGhlXG4gIC8vIGJvZHkgbXVzdCBiZSBmdWxseSBmbHVzaGVkIGludG8gdGhlIHNpbmsgYnkgdGhlIHRpbWUgdGhpcyByZXNvbHZlcy5cbiAgaXQoXCJzdGlsbCBzZXR0bGVzIG9uIHRoZSBwaXBlbGluZSBvbmNlIHRoZSBoZWFkIGhhcyBnb25lIG91dFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2luayA9IGF3YWl0IHJ1bihcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcihcImNvbnRlbnQtdHlwZVwiLCBcInRleHQvcGxhaW5cIik7XG4gICAgICAgIHJlcy5lbmQoXCJib2R5XCIpO1xuICAgICAgfSxcbiAgICAgIHsgY29tcHJlc3M6IGZhbHNlIH0sXG4gICAgKTtcblxuICAgIGV4cGVjdChzaW5rLmJvZHkudG9TdHJpbmcoKSkudG9CZShcImJvZHlcIik7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB3aGVuIHRoZSByZXNwb25zZSBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3RXaXRoKHt9KTtcbiAgICBjb25zdCByZXMgPSBuZXcgU2hpbVNlcnZlclJlc3BvbnNlKCk7XG4gICAgY29uc3QgZG9uZSA9IHBpcGVUb1NpbmsocmVxLCByZXMsIG5ldyBDb2xsZWN0aW5nU2luaygpLCB7XG4gICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHJlcy5kZXN0cm95KG5ldyBFcnJvcihcImJvb21cIikpO1xuXG4gICAgYXdhaXQgZXhwZWN0KGRvbmUpLnJlamVjdHMudG9UaHJvdyhcImJvb21cIik7XG4gIH0pO1xuXG4gIC8vIEEgc2luayB0aGF0IGNhbm5vdCB0YWtlIHRoZSBoZWFkIOKAlCBgd3JpdGVIZWFkYCByZWplY3RpbmcgYSBoZWFkZXIgdmFsdWUgaXNcbiAgLy8gdGhlIHJlYWwgY2FzZSDigJQgdGhyb3dzIGZyb20gaW5zaWRlIHRoZSBgXCJoZWFkXCJgIGxpc3RlbmVyLCB3aGVyZSBub3RoaW5nXG4gIC8vIGVsc2Ugd291bGQgY2F0Y2ggaXQgYW5kIHRoZSBwaXBlbGluZSBuZXZlciBzdGFydHMuXG4gIGl0LmVhY2goW1xuICAgIFtcIndyaXRlcyBhIGJvZHlcIiwgKHJlczogU2hpbVNlcnZlclJlc3BvbnNlKSA9PiByZXMuZW5kKFwiYm9keVwiKV0sXG4gICAgW1wiZW5kcyBlbXB0eVwiLCAocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpID0+IHJlcy5lbmQoKV0sXG4gICAgW1wiZmx1c2hlcyBpdHMgaGVhZCBmaXJzdFwiLCAocmVzOiBTaGltU2VydmVyUmVzcG9uc2UpID0+IHJlcy53cml0ZUhlYWQoMjAwKV0sXG4gIF0pKFxuICAgIFwicmVqZWN0cyBhbmQgZGVzdHJveXMgdGhlIHJlc3BvbnNlIHdoZW4gYmVnaW4oKSB0aHJvd3MgYW5kIHRoZSByZXNwb25zZSAlc1wiLFxuICAgIGFzeW5jIChfbmFtZSwgd3JpdGUpID0+IHtcbiAgICAgIGNvbnN0IHJlcSA9IHJlcXVlc3RXaXRoKHt9KTtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBTaGltU2VydmVyUmVzcG9uc2UoKTtcbiAgICAgIGNvbnN0IGRvbmUgPSBwaXBlVG9TaW5rKFxuICAgICAgICByZXEsXG4gICAgICAgIHJlcyxcbiAgICAgICAge1xuICAgICAgICAgIGJlZ2luKCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmFkIGhlYWRcIik7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBjb21wcmVzczogZmFsc2UgfSxcbiAgICAgICk7XG5cbiAgICAgIHdyaXRlKHJlcyk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChkb25lKS5yZWplY3RzLnRvVGhyb3coXCJiYWQgaGVhZFwiKTtcbiAgICAgIGV4cGVjdChyZXMuZGVzdHJveWVkKS50b0JlKHRydWUpO1xuICAgIH0sXG4gICk7XG59KTtcblxuZGVzY3JpYmUoXCJhY2NlcHRzR3ppcFwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1xuICAgIFtcImd6aXBcIiwgdHJ1ZV0sXG4gICAgW1wiZ3ppcCwgZGVmbGF0ZSwgYnJcIiwgdHJ1ZV0sXG4gICAgW1wiR1pJUDtxPTAuNVwiLCB0cnVlXSxcbiAgICBbXCJnemlwO3E9MFwiLCBmYWxzZV0sXG4gICAgW1wiKlwiLCB0cnVlXSxcbiAgICBbXCIqO3E9MFwiLCBmYWxzZV0sXG4gICAgLy8gQW4gZXhwbGljaXQgZ3ppcCBwcmVmZXJlbmNlIHdpbnMgb3ZlciB0aGUgd2lsZGNhcmQsIGluIGVpdGhlciBvcmRlci5cbiAgICBbXCIqO3E9MCwgZ3ppcFwiLCB0cnVlXSxcbiAgICBbXCJnemlwO3E9MCwgKlwiLCBmYWxzZV0sXG4gICAgW1wiYnIsIGRlZmxhdGVcIiwgZmFsc2VdLFxuICAgIFtcIlwiLCBmYWxzZV0sXG4gICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICBdKShcIiVzIOKGkiAlc1wiLCAoaGVhZGVyLCBleHBlY3RlZCkgPT4ge1xuICAgIGV4cGVjdChhY2NlcHRzR3ppcChoZWFkZXIpKS50b0JlKGV4cGVjdGVkKTtcbiAgfSk7XG5cbiAgaXQoXCJqb2lucyBhIHJlcGVhdGVkIGhlYWRlciBiZWZvcmUgcGFyc2luZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGFjY2VwdHNHemlwKFtcImJyXCIsIFwiZ3ppcFwiXSkpLnRvQmUodHJ1ZSk7XG4gIH0pO1xufSk7XG4iXX0=