@anansi/core 0.16.6 → 0.16.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/2.chunk.js +20 -0
- package/dist/client.js +233 -285
- package/dist/package.json +1 -0
- package/dist/server.js +358 -496
- package/lib/floodSpouts.js +4 -8
- package/lib/index.d.ts +8 -8
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -18
- package/lib/index.server.d.ts +10 -10
- package/lib/index.server.d.ts.map +1 -1
- package/lib/index.server.js +9 -22
- package/lib/laySpouts.d.ts +2 -2
- package/lib/laySpouts.d.ts.map +1 -1
- package/lib/laySpouts.js +6 -11
- package/lib/scripts/getProxyMiddlewares.js +1 -1
- package/lib/scripts/getWebpackConfig.d.ts +3 -0
- package/lib/scripts/getWebpackConfig.d.ts.map +1 -0
- package/lib/scripts/getWebpackConfig.js +22 -0
- package/lib/scripts/index.d.ts +2 -2
- package/lib/scripts/index.d.ts.map +1 -1
- package/lib/scripts/index.js +3 -3
- package/lib/scripts/package.json +1 -0
- package/lib/scripts/serve.d.ts +1 -1
- package/lib/scripts/serve.d.ts.map +1 -1
- package/lib/scripts/serve.js +8 -6
- package/lib/scripts/startDevserver.d.ts +1 -1
- package/lib/scripts/startDevserver.d.ts.map +1 -1
- package/lib/scripts/startDevserver.js +4 -6
- package/lib/spouts/DocumentComponent.d.ts +1 -1
- package/lib/spouts/DocumentComponent.d.ts.map +1 -1
- package/lib/spouts/DocumentComponent.js +14 -21
- package/lib/spouts/antd.server.d.ts +1 -1
- package/lib/spouts/antd.server.d.ts.map +1 -1
- package/lib/spouts/antd.server.js +8 -14
- package/lib/spouts/app.js +2 -7
- package/lib/spouts/app.server.d.ts +1 -1
- package/lib/spouts/app.server.d.ts.map +1 -1
- package/lib/spouts/app.server.js +2 -7
- package/lib/spouts/csp.js +2 -6
- package/lib/spouts/document.d.ts +1 -1
- package/lib/spouts/document.d.ts.map +1 -1
- package/lib/spouts/document.js +2 -6
- package/lib/spouts/document.server.d.ts +2 -2
- package/lib/spouts/document.server.d.ts.map +1 -1
- package/lib/spouts/document.server.js +10 -12
- package/lib/spouts/json.d.ts +1 -1
- package/lib/spouts/json.d.ts.map +1 -1
- package/lib/spouts/json.js +2 -6
- package/lib/spouts/json.server.d.ts +1 -1
- package/lib/spouts/json.server.d.ts.map +1 -1
- package/lib/spouts/json.server.js +6 -12
- package/lib/spouts/prefetch.server.d.ts +1 -1
- package/lib/spouts/prefetch.server.d.ts.map +1 -1
- package/lib/spouts/prefetch.server.js +2 -6
- package/lib/spouts/restHooks.d.ts +1 -1
- package/lib/spouts/restHooks.d.ts.map +1 -1
- package/lib/spouts/restHooks.js +6 -12
- package/lib/spouts/restHooks.provider.js +2 -7
- package/lib/spouts/restHooks.server.d.ts +1 -1
- package/lib/spouts/restHooks.server.d.ts.map +1 -1
- package/lib/spouts/restHooks.server.js +7 -13
- package/lib/spouts/router.d.ts +1 -1
- package/lib/spouts/router.d.ts.map +1 -1
- package/lib/spouts/router.js +9 -14
- package/lib/spouts/router.server.d.ts +1 -1
- package/lib/spouts/router.server.d.ts.map +1 -1
- package/lib/spouts/router.server.js +9 -14
- package/lib/spouts/types.js +1 -3
- package/package.json +14 -11
- package/src/index.server.ts +10 -10
- package/src/index.ts +8 -8
- package/src/laySpouts.tsx +2 -2
- package/src/scripts/getWebpackConfig.ts +22 -0
- package/src/scripts/index.ts +2 -2
- package/src/scripts/package.json +1 -0
- package/src/scripts/serve.ts +15 -12
- package/src/scripts/startDevserver.ts +5 -8
- package/src/spouts/DocumentComponent.tsx +3 -7
- package/src/spouts/antd.server.tsx +1 -1
- package/src/spouts/app.server.tsx +1 -1
- package/src/spouts/document.server.tsx +12 -4
- package/src/spouts/document.tsx +1 -2
- package/src/spouts/json.server.tsx +1 -1
- package/src/spouts/json.tsx +1 -1
- package/src/spouts/prefetch.server.tsx +1 -1
- package/src/spouts/restHooks.server.tsx +1 -1
- package/src/spouts/restHooks.tsx +2 -2
- package/src/spouts/router.server.tsx +1 -1
- package/src/spouts/router.tsx +1 -1
- package/dist/client.js.map +0 -1
- package/dist/server.js.map +0 -1
package/dist/server.js
CHANGED
|
@@ -1,23 +1,156 @@
|
|
|
1
1
|
/******/ (() => { // webpackBootstrap
|
|
2
|
-
/******/
|
|
2
|
+
/******/ "use strict";
|
|
3
|
+
/******/ var __webpack_modules__ = ([
|
|
4
|
+
/* 0 */,
|
|
5
|
+
/* 1 */,
|
|
6
|
+
/* 2 */
|
|
7
|
+
/***/ ((module) => {
|
|
8
|
+
|
|
9
|
+
module.exports = require("@rest-hooks/react");
|
|
10
|
+
|
|
11
|
+
/***/ }),
|
|
12
|
+
/* 3 */
|
|
13
|
+
/***/ ((module) => {
|
|
14
|
+
|
|
15
|
+
module.exports = require("@rest-hooks/ssr");
|
|
3
16
|
|
|
4
|
-
/***/
|
|
5
|
-
|
|
17
|
+
/***/ }),
|
|
18
|
+
/* 4 */
|
|
19
|
+
/***/ ((module) => {
|
|
20
|
+
|
|
21
|
+
module.exports = require("@ant-design/cssinjs");
|
|
22
|
+
|
|
23
|
+
/***/ })
|
|
24
|
+
/******/ ]);
|
|
25
|
+
/************************************************************************/
|
|
26
|
+
/******/ // The module cache
|
|
27
|
+
/******/ var __webpack_module_cache__ = {};
|
|
28
|
+
/******/
|
|
29
|
+
/******/ // The require function
|
|
30
|
+
/******/ function __webpack_require__(moduleId) {
|
|
31
|
+
/******/ // Check if module is in cache
|
|
32
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
33
|
+
/******/ if (cachedModule !== undefined) {
|
|
34
|
+
/******/ return cachedModule.exports;
|
|
35
|
+
/******/ }
|
|
36
|
+
/******/ // Create a new module (and put it into the cache)
|
|
37
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
38
|
+
/******/ // no module.id needed
|
|
39
|
+
/******/ // no module.loaded needed
|
|
40
|
+
/******/ exports: {}
|
|
41
|
+
/******/ };
|
|
42
|
+
/******/
|
|
43
|
+
/******/ // Execute the module function
|
|
44
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
45
|
+
/******/
|
|
46
|
+
/******/ // Return the exports of the module
|
|
47
|
+
/******/ return module.exports;
|
|
48
|
+
/******/ }
|
|
49
|
+
/******/
|
|
50
|
+
/************************************************************************/
|
|
51
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
52
|
+
/******/ (() => {
|
|
53
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
54
|
+
/******/ __webpack_require__.n = (module) => {
|
|
55
|
+
/******/ var getter = module && module.__esModule ?
|
|
56
|
+
/******/ () => (module['default']) :
|
|
57
|
+
/******/ () => (module);
|
|
58
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
59
|
+
/******/ return getter;
|
|
60
|
+
/******/ };
|
|
61
|
+
/******/ })();
|
|
62
|
+
/******/
|
|
63
|
+
/******/ /* webpack/runtime/create fake namespace object */
|
|
64
|
+
/******/ (() => {
|
|
65
|
+
/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
|
|
66
|
+
/******/ var leafPrototypes;
|
|
67
|
+
/******/ // create a fake namespace object
|
|
68
|
+
/******/ // mode & 1: value is a module id, require it
|
|
69
|
+
/******/ // mode & 2: merge all properties of value into the ns
|
|
70
|
+
/******/ // mode & 4: return value when already ns object
|
|
71
|
+
/******/ // mode & 16: return value when it's Promise-like
|
|
72
|
+
/******/ // mode & 8|1: behave like require
|
|
73
|
+
/******/ __webpack_require__.t = function(value, mode) {
|
|
74
|
+
/******/ if(mode & 1) value = this(value);
|
|
75
|
+
/******/ if(mode & 8) return value;
|
|
76
|
+
/******/ if(typeof value === 'object' && value) {
|
|
77
|
+
/******/ if((mode & 4) && value.__esModule) return value;
|
|
78
|
+
/******/ if((mode & 16) && typeof value.then === 'function') return value;
|
|
79
|
+
/******/ }
|
|
80
|
+
/******/ var ns = Object.create(null);
|
|
81
|
+
/******/ __webpack_require__.r(ns);
|
|
82
|
+
/******/ var def = {};
|
|
83
|
+
/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
|
|
84
|
+
/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
|
|
85
|
+
/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
|
|
86
|
+
/******/ }
|
|
87
|
+
/******/ def['default'] = () => (value);
|
|
88
|
+
/******/ __webpack_require__.d(ns, def);
|
|
89
|
+
/******/ return ns;
|
|
90
|
+
/******/ };
|
|
91
|
+
/******/ })();
|
|
92
|
+
/******/
|
|
93
|
+
/******/ /* webpack/runtime/define property getters */
|
|
94
|
+
/******/ (() => {
|
|
95
|
+
/******/ // define getter functions for harmony exports
|
|
96
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
97
|
+
/******/ for(var key in definition) {
|
|
98
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
99
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
100
|
+
/******/ }
|
|
101
|
+
/******/ }
|
|
102
|
+
/******/ };
|
|
103
|
+
/******/ })();
|
|
104
|
+
/******/
|
|
105
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
106
|
+
/******/ (() => {
|
|
107
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
108
|
+
/******/ })();
|
|
109
|
+
/******/
|
|
110
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
111
|
+
/******/ (() => {
|
|
112
|
+
/******/ // define __esModule on exports
|
|
113
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
114
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
115
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
116
|
+
/******/ }
|
|
117
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
118
|
+
/******/ };
|
|
119
|
+
/******/ })();
|
|
120
|
+
/******/
|
|
121
|
+
/************************************************************************/
|
|
122
|
+
var __webpack_exports__ = {};
|
|
123
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
124
|
+
(() => {
|
|
125
|
+
// ESM COMPAT FLAG
|
|
126
|
+
__webpack_require__.r(__webpack_exports__);
|
|
127
|
+
|
|
128
|
+
// EXPORTS
|
|
129
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
130
|
+
"JSONSpout": () => (/* reexport */ JSONSpout),
|
|
131
|
+
"antdSpout": () => (/* reexport */ antdSpout),
|
|
132
|
+
"appSpout": () => (/* reexport */ app_server),
|
|
133
|
+
"documentSpout": () => (/* reexport */ DocumentSpout),
|
|
134
|
+
"laySpouts": () => (/* reexport */ laySpouts),
|
|
135
|
+
"prefetchSpout": () => (/* reexport */ prefetchSpout),
|
|
136
|
+
"restHooksSpout": () => (/* reexport */ restHooksSpout),
|
|
137
|
+
"routerSpout": () => (/* reexport */ routerSpout)
|
|
138
|
+
});
|
|
6
139
|
|
|
7
|
-
|
|
140
|
+
;// CONCATENATED MODULE: external "crypto"
|
|
141
|
+
const external_crypto_namespaceObject = require("crypto");
|
|
142
|
+
var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_namespaceObject);
|
|
143
|
+
;// CONCATENATED MODULE: external "react-dom/server"
|
|
144
|
+
const server_namespaceObject = require("react-dom/server");
|
|
145
|
+
;// CONCATENATED MODULE: ./src/laySpouts.tsx
|
|
8
146
|
|
|
9
147
|
|
|
10
|
-
var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
11
|
-
exports.__esModule = true;
|
|
12
|
-
exports["default"] = laySpouts;
|
|
13
|
-
var _crypto = _interopRequireDefault(__webpack_require__("crypto"));
|
|
14
|
-
var _server = __webpack_require__("react-dom/server");
|
|
15
148
|
function laySpouts(spouts, {
|
|
16
149
|
timeoutMS = 10000,
|
|
17
150
|
onError
|
|
18
151
|
} = {}) {
|
|
19
152
|
const render = async (clientManifest, req, res) => {
|
|
20
|
-
const nonce =
|
|
153
|
+
const nonce = external_crypto_default().randomBytes(16).toString('base64');
|
|
21
154
|
try {
|
|
22
155
|
const {
|
|
23
156
|
app
|
|
@@ -31,7 +164,7 @@ function laySpouts(spouts, {
|
|
|
31
164
|
const {
|
|
32
165
|
pipe,
|
|
33
166
|
abort
|
|
34
|
-
} = (0,
|
|
167
|
+
} = (0,server_namespaceObject.renderToPipeableStream)(app, {
|
|
35
168
|
nonce,
|
|
36
169
|
//bootstrapScripts: assets.filter(asset => asset.endsWith('.js')),
|
|
37
170
|
onShellReady() {
|
|
@@ -64,22 +197,29 @@ function laySpouts(spouts, {
|
|
|
64
197
|
};
|
|
65
198
|
return render;
|
|
66
199
|
}
|
|
200
|
+
;// CONCATENATED MODULE: external "react"
|
|
201
|
+
const external_react_namespaceObject = require("react");
|
|
202
|
+
var external_react_default = /*#__PURE__*/__webpack_require__.n(external_react_namespaceObject);
|
|
203
|
+
;// CONCATENATED MODULE: ./src/spouts/csp.ts
|
|
204
|
+
// TODO: memoize this
|
|
205
|
+
function buildPolicy(policyObj) {
|
|
206
|
+
return Object.keys(policyObj).map(key => {
|
|
207
|
+
const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key];
|
|
67
208
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
exports["default"] = Document;
|
|
79
|
-
var _react = _interopRequireDefault(__webpack_require__("react"));
|
|
80
|
-
var _csp = __webpack_require__("./src/spouts/csp.ts");
|
|
209
|
+
// move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
|
|
210
|
+
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
|
|
211
|
+
if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
|
|
212
|
+
const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
|
|
213
|
+
return `${key} ${newVal}`;
|
|
214
|
+
}
|
|
215
|
+
return `${key} ${val}`;
|
|
216
|
+
}).join('; ');
|
|
217
|
+
}
|
|
218
|
+
;// CONCATENATED MODULE: ./src/spouts/DocumentComponent.tsx
|
|
81
219
|
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/DocumentComponent.tsx",
|
|
82
220
|
_process$env$WEBPACK_;
|
|
221
|
+
|
|
222
|
+
|
|
83
223
|
function Document({
|
|
84
224
|
assets,
|
|
85
225
|
head,
|
|
@@ -98,107 +238,111 @@ function Document({
|
|
|
98
238
|
const policy = {
|
|
99
239
|
...csPolicy
|
|
100
240
|
};
|
|
101
|
-
if (nonce
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
241
|
+
if (nonce) {
|
|
242
|
+
if (typeof policy['script-src'] === 'string') {
|
|
243
|
+
policy['script-src'] = [policy['script-src'], `'nonce-${nonce}'`];
|
|
244
|
+
} else {
|
|
245
|
+
policy['script-src'] = [...policy['script-src'], `'nonce-${nonce}'`];
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
cspMeta = /*#__PURE__*/external_react_default().createElement("meta", {
|
|
105
249
|
httpEquiv: "Content-Security-Policy",
|
|
106
|
-
content:
|
|
250
|
+
content: buildPolicy(policy),
|
|
107
251
|
__self: this,
|
|
108
252
|
__source: {
|
|
109
253
|
fileName: _jsxFileName,
|
|
110
|
-
lineNumber:
|
|
254
|
+
lineNumber: 43,
|
|
111
255
|
columnNumber: 7
|
|
112
256
|
}
|
|
113
257
|
});
|
|
114
258
|
}
|
|
115
|
-
return /*#__PURE__*/
|
|
259
|
+
return /*#__PURE__*/external_react_default().createElement("html", {
|
|
116
260
|
__self: this,
|
|
117
261
|
__source: {
|
|
118
262
|
fileName: _jsxFileName,
|
|
119
|
-
lineNumber:
|
|
263
|
+
lineNumber: 47,
|
|
120
264
|
columnNumber: 5
|
|
121
265
|
}
|
|
122
|
-
}, /*#__PURE__*/
|
|
266
|
+
}, /*#__PURE__*/external_react_default().createElement("head", {
|
|
123
267
|
__self: this,
|
|
124
268
|
__source: {
|
|
125
269
|
fileName: _jsxFileName,
|
|
126
|
-
lineNumber:
|
|
270
|
+
lineNumber: 48,
|
|
127
271
|
columnNumber: 7
|
|
128
272
|
}
|
|
129
|
-
}, /*#__PURE__*/
|
|
273
|
+
}, /*#__PURE__*/external_react_default().createElement("meta", {
|
|
130
274
|
charSet: charSet,
|
|
131
275
|
__self: this,
|
|
132
276
|
__source: {
|
|
133
277
|
fileName: _jsxFileName,
|
|
134
|
-
lineNumber:
|
|
278
|
+
lineNumber: 49,
|
|
135
279
|
columnNumber: 9
|
|
136
280
|
}
|
|
137
|
-
}), cspMeta, head, extraStyle, assets.map((asset, i) => /*#__PURE__*/
|
|
281
|
+
}), cspMeta, head, extraStyle, assets.map((asset, i) => /*#__PURE__*/external_react_default().createElement("link", {
|
|
138
282
|
key: i,
|
|
139
283
|
rel: "preload",
|
|
140
284
|
...asset,
|
|
141
285
|
__self: this,
|
|
142
286
|
__source: {
|
|
143
287
|
fileName: _jsxFileName,
|
|
144
|
-
lineNumber:
|
|
288
|
+
lineNumber: 54,
|
|
145
289
|
columnNumber: 11
|
|
146
290
|
}
|
|
147
|
-
})), /*#__PURE__*/
|
|
291
|
+
})), /*#__PURE__*/external_react_default().createElement("title", {
|
|
148
292
|
__self: this,
|
|
149
293
|
__source: {
|
|
150
294
|
fileName: _jsxFileName,
|
|
151
|
-
lineNumber:
|
|
295
|
+
lineNumber: 56,
|
|
152
296
|
columnNumber: 9
|
|
153
297
|
}
|
|
154
|
-
}, title)), /*#__PURE__*/
|
|
298
|
+
}, title)), /*#__PURE__*/external_react_default().createElement("body", {
|
|
155
299
|
__self: this,
|
|
156
300
|
__source: {
|
|
157
301
|
fileName: _jsxFileName,
|
|
158
|
-
lineNumber:
|
|
302
|
+
lineNumber: 58,
|
|
159
303
|
columnNumber: 7
|
|
160
304
|
}
|
|
161
|
-
}, /*#__PURE__*/
|
|
305
|
+
}, /*#__PURE__*/external_react_default().createElement("div", {
|
|
162
306
|
id: rootId,
|
|
163
307
|
__self: this,
|
|
164
308
|
__source: {
|
|
165
309
|
fileName: _jsxFileName,
|
|
166
|
-
lineNumber:
|
|
310
|
+
lineNumber: 59,
|
|
167
311
|
columnNumber: 9
|
|
168
312
|
}
|
|
169
313
|
}, children), scripts, assets.filter(({
|
|
170
314
|
href
|
|
171
315
|
}) => href.endsWith('.js')).map(({
|
|
172
316
|
href
|
|
173
|
-
}, i) => /*#__PURE__*/
|
|
317
|
+
}, i) => /*#__PURE__*/external_react_default().createElement("script", {
|
|
174
318
|
key: i,
|
|
175
319
|
src: href,
|
|
176
320
|
async: true,
|
|
177
321
|
__self: this,
|
|
178
322
|
__source: {
|
|
179
323
|
fileName: _jsxFileName,
|
|
180
|
-
lineNumber:
|
|
324
|
+
lineNumber: 64,
|
|
181
325
|
columnNumber: 13
|
|
182
326
|
}
|
|
183
327
|
}))));
|
|
184
328
|
}
|
|
185
329
|
Document.defaultProps = {
|
|
186
|
-
head: /*#__PURE__*/
|
|
330
|
+
head: /*#__PURE__*/external_react_default().createElement((external_react_default()).Fragment, null, /*#__PURE__*/external_react_default().createElement("meta", {
|
|
187
331
|
name: "viewport",
|
|
188
332
|
content: "width=device-width, initial-scale=1",
|
|
189
|
-
__self:
|
|
333
|
+
__self: undefined,
|
|
190
334
|
__source: {
|
|
191
335
|
fileName: _jsxFileName,
|
|
192
|
-
lineNumber:
|
|
336
|
+
lineNumber: 73,
|
|
193
337
|
columnNumber: 7
|
|
194
338
|
}
|
|
195
|
-
}), /*#__PURE__*/
|
|
339
|
+
}), /*#__PURE__*/external_react_default().createElement("link", {
|
|
196
340
|
rel: "shortcut icon",
|
|
197
341
|
href: `${(_process$env$WEBPACK_ = process.env.WEBPACK_PUBLIC_PATH) != null ? _process$env$WEBPACK_ : '/'}favicon.ico`,
|
|
198
|
-
__self:
|
|
342
|
+
__self: undefined,
|
|
199
343
|
__source: {
|
|
200
344
|
fileName: _jsxFileName,
|
|
201
|
-
lineNumber:
|
|
345
|
+
lineNumber: 74,
|
|
202
346
|
columnNumber: 7
|
|
203
347
|
}
|
|
204
348
|
})),
|
|
@@ -206,130 +350,13 @@ Document.defaultProps = {
|
|
|
206
350
|
rootId: 'anansi-root',
|
|
207
351
|
scripts: null
|
|
208
352
|
};
|
|
353
|
+
;// CONCATENATED MODULE: ./src/spouts/document.server.tsx
|
|
354
|
+
var document_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
|
|
209
355
|
|
|
210
|
-
/***/ }),
|
|
211
|
-
|
|
212
|
-
/***/ "./src/spouts/antd.server.tsx":
|
|
213
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
214
|
-
|
|
215
|
-
"use strict";
|
|
216
356
|
|
|
217
|
-
|
|
218
|
-
var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
219
|
-
exports.__esModule = true;
|
|
220
|
-
exports["default"] = antdSpout;
|
|
221
|
-
var _interopRequireWildcard2 = _interopRequireDefault(__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js"));
|
|
222
|
-
var _react = _interopRequireDefault(__webpack_require__("react"));
|
|
223
|
-
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/antd.server.tsx";
|
|
224
|
-
function antdSpout() {
|
|
225
|
-
return next => async props => {
|
|
226
|
-
var _nextProps$scripts;
|
|
227
|
-
const {
|
|
228
|
-
createCache,
|
|
229
|
-
extractStyle,
|
|
230
|
-
StyleProvider
|
|
231
|
-
} = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(__webpack_require__("@ant-design/cssinjs")));
|
|
232
|
-
const cache = createCache();
|
|
233
|
-
const nextProps = await next(props);
|
|
234
|
-
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
235
|
-
const AntdSheets = () => {
|
|
236
|
-
return /*#__PURE__*/_react.default.createElement("script", {
|
|
237
|
-
dangerouslySetInnerHTML: {
|
|
238
|
-
__html: `</script>${extractStyle(cache)}<script>`
|
|
239
|
-
},
|
|
240
|
-
__self: this,
|
|
241
|
-
__source: {
|
|
242
|
-
fileName: _jsxFileName,
|
|
243
|
-
lineNumber: 28,
|
|
244
|
-
columnNumber: 9
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
};
|
|
248
|
-
// unfortunately we have to inject this after the entire content has streamed in or it doesn't correctly populate
|
|
249
|
-
// see: https://github.com/ant-design/cssinjs/issues/79
|
|
250
|
-
scripts.push( /*#__PURE__*/_react.default.createElement(AntdSheets, {
|
|
251
|
-
__self: this,
|
|
252
|
-
__source: {
|
|
253
|
-
fileName: _jsxFileName,
|
|
254
|
-
lineNumber: 37,
|
|
255
|
-
columnNumber: 18
|
|
256
|
-
}
|
|
257
|
-
}));
|
|
258
|
-
return {
|
|
259
|
-
...nextProps,
|
|
260
|
-
app: /*#__PURE__*/_react.default.createElement(StyleProvider, {
|
|
261
|
-
cache: cache,
|
|
262
|
-
__self: this,
|
|
263
|
-
__source: {
|
|
264
|
-
fileName: _jsxFileName,
|
|
265
|
-
lineNumber: 41,
|
|
266
|
-
columnNumber: 12
|
|
267
|
-
}
|
|
268
|
-
}, nextProps.app),
|
|
269
|
-
scripts
|
|
270
|
-
};
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
/***/ }),
|
|
275
|
-
|
|
276
|
-
/***/ "./src/spouts/app.server.tsx":
|
|
277
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
278
|
-
|
|
279
|
-
"use strict";
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
exports.__esModule = true;
|
|
283
|
-
exports["default"] = void 0;
|
|
284
|
-
const appSpout = app => props => Promise.resolve({
|
|
285
|
-
...props,
|
|
286
|
-
app
|
|
287
|
-
});
|
|
288
|
-
var _default = appSpout;
|
|
289
|
-
exports["default"] = _default;
|
|
290
|
-
|
|
291
|
-
/***/ }),
|
|
292
|
-
|
|
293
|
-
/***/ "./src/spouts/csp.ts":
|
|
294
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
295
|
-
|
|
296
|
-
"use strict";
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
exports.__esModule = true;
|
|
300
|
-
exports.buildPolicy = buildPolicy;
|
|
301
|
-
// TODO: memoize this
|
|
302
|
-
function buildPolicy(policyObj) {
|
|
303
|
-
return Object.keys(policyObj).map(key => {
|
|
304
|
-
const val = Array.isArray(policyObj[key]) ? [...new Set(policyObj[key]).values()].filter(v => v).join(' ') : policyObj[key];
|
|
305
|
-
|
|
306
|
-
// move strict dynamic to the end of the policy if it exists to be backwards compatible with csp2
|
|
307
|
-
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#strict-dynamic
|
|
308
|
-
if (typeof val === 'string' && val.includes("'strict-dynamic'")) {
|
|
309
|
-
const newVal = `${val.replace(/\s?'strict-dynamic'\s?/gi, ' ').trim()} 'strict-dynamic'`;
|
|
310
|
-
return `${key} ${newVal}`;
|
|
311
|
-
}
|
|
312
|
-
return `${key} ${val}`;
|
|
313
|
-
}).join('; ');
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
/***/ }),
|
|
317
|
-
|
|
318
|
-
/***/ "./src/spouts/document.server.tsx":
|
|
319
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
320
|
-
|
|
321
|
-
"use strict";
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
325
|
-
exports.__esModule = true;
|
|
326
|
-
exports["default"] = DocumentSpout;
|
|
327
|
-
var _react = _interopRequireDefault(__webpack_require__("react"));
|
|
328
|
-
var _DocumentComponent = _interopRequireDefault(__webpack_require__("./src/spouts/DocumentComponent.tsx"));
|
|
329
|
-
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/document.server.tsx";
|
|
330
357
|
function DocumentSpout(options) {
|
|
331
358
|
return next => async props => {
|
|
332
|
-
var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _nextProps$title;
|
|
359
|
+
var _props$clientManifest, _props$clientManifest2, _props$clientManifest3, _props$clientManifest4, _props$clientManifest5, _props$req, _nextProps$title;
|
|
333
360
|
const nextProps = await next(props);
|
|
334
361
|
const publicPath = props.clientManifest.publicPath;
|
|
335
362
|
if (Object.keys((_props$clientManifest = (_props$clientManifest2 = props.clientManifest) == null ? void 0 : _props$clientManifest2.entrypoints) != null ? _props$clientManifest : {}).length < 1 || publicPath === undefined) throw new Error('Manifest missing entries needed');
|
|
@@ -363,21 +390,24 @@ function DocumentSpout(options) {
|
|
|
363
390
|
} : {
|
|
364
391
|
href: asset
|
|
365
392
|
});
|
|
393
|
+
const nonce =
|
|
394
|
+
// nonces negate 'unsafe-inline' so do not add it in development to keep things easier
|
|
395
|
+
props.nonce && (process.env.NODE_ENV === 'production' || ((_props$req = props.req) == null ? void 0 : _props$req.protocol) !== 'http') ? props.nonce : undefined;
|
|
366
396
|
return {
|
|
367
397
|
...nextProps,
|
|
368
|
-
app: /*#__PURE__*/
|
|
398
|
+
app: /*#__PURE__*/external_react_default().createElement(Document, {
|
|
369
399
|
...options,
|
|
370
400
|
extraStyle: nextProps.extraStyle,
|
|
371
401
|
title: (_nextProps$title = nextProps.title) != null ? _nextProps$title : options.title,
|
|
372
402
|
assets: assets,
|
|
373
403
|
rootId: options.rootId,
|
|
374
|
-
nonce:
|
|
404
|
+
nonce: nonce,
|
|
375
405
|
csPolicy: options.csPolicy,
|
|
376
406
|
scripts: nextProps.scripts,
|
|
377
407
|
__self: this,
|
|
378
408
|
__source: {
|
|
379
|
-
fileName:
|
|
380
|
-
lineNumber:
|
|
409
|
+
fileName: document_server_jsxFileName,
|
|
410
|
+
lineNumber: 85,
|
|
381
411
|
columnNumber: 9
|
|
382
412
|
}
|
|
383
413
|
}, nextProps.app)
|
|
@@ -390,129 +420,16 @@ function childrenAssets(chunk) {
|
|
|
390
420
|
return (_c$assets = c.assets) != null ? _c$assets : [];
|
|
391
421
|
})) : [];
|
|
392
422
|
}
|
|
423
|
+
;// CONCATENATED MODULE: ./src/spouts/restHooks.server.tsx
|
|
424
|
+
var restHooks_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
|
|
393
425
|
|
|
394
|
-
/***/ }),
|
|
395
|
-
|
|
396
|
-
/***/ "./src/spouts/json.server.tsx":
|
|
397
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
398
|
-
|
|
399
|
-
"use strict";
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
var _interopRequireWildcard = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
403
|
-
exports.__esModule = true;
|
|
404
|
-
exports["default"] = JSONSpout;
|
|
405
|
-
var _react = _interopRequireWildcard(__webpack_require__("react"));
|
|
406
|
-
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/json.server.tsx";
|
|
407
|
-
function JSONSpout({
|
|
408
|
-
id = 'anansi-json'
|
|
409
|
-
} = {}) {
|
|
410
|
-
return next => async props => {
|
|
411
|
-
var _nextProps$scripts, _nextProps$initData;
|
|
412
|
-
const nextProps = await next(props);
|
|
413
|
-
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
414
|
-
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, useData]) => {
|
|
415
|
-
const globalId = `${id}.${key}`;
|
|
416
|
-
const Script = () => {
|
|
417
|
-
const data = useData();
|
|
418
|
-
try {
|
|
419
|
-
const encoded = JSON.stringify(data);
|
|
420
|
-
return /*#__PURE__*/_react.default.createElement("script", {
|
|
421
|
-
id: globalId,
|
|
422
|
-
type: "application/json",
|
|
423
|
-
dangerouslySetInnerHTML: {
|
|
424
|
-
__html: encoded
|
|
425
|
-
},
|
|
426
|
-
nonce: props.nonce,
|
|
427
|
-
__self: this,
|
|
428
|
-
__source: {
|
|
429
|
-
fileName: _jsxFileName,
|
|
430
|
-
lineNumber: 29,
|
|
431
|
-
columnNumber: 13
|
|
432
|
-
}
|
|
433
|
-
});
|
|
434
|
-
} catch (e) {
|
|
435
|
-
// TODO: Use unified logging
|
|
436
|
-
console.error(`Error serializing json for ${key}`);
|
|
437
|
-
console.error(e);
|
|
438
|
-
return null;
|
|
439
|
-
}
|
|
440
|
-
};
|
|
441
|
-
scripts.push( /*#__PURE__*/_react.default.createElement(_react.Suspense, {
|
|
442
|
-
key: globalId,
|
|
443
|
-
__self: this,
|
|
444
|
-
__source: {
|
|
445
|
-
fileName: _jsxFileName,
|
|
446
|
-
lineNumber: 46,
|
|
447
|
-
columnNumber: 9
|
|
448
|
-
}
|
|
449
|
-
}, /*#__PURE__*/_react.default.createElement(Script, {
|
|
450
|
-
__self: this,
|
|
451
|
-
__source: {
|
|
452
|
-
fileName: _jsxFileName,
|
|
453
|
-
lineNumber: 47,
|
|
454
|
-
columnNumber: 11
|
|
455
|
-
}
|
|
456
|
-
})));
|
|
457
|
-
});
|
|
458
|
-
return {
|
|
459
|
-
...nextProps,
|
|
460
|
-
scripts
|
|
461
|
-
};
|
|
462
|
-
};
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
/***/ }),
|
|
466
|
-
|
|
467
|
-
/***/ "./src/spouts/prefetch.server.tsx":
|
|
468
|
-
/***/ ((__unused_webpack_module, exports) => {
|
|
469
|
-
|
|
470
|
-
"use strict";
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
exports.__esModule = true;
|
|
474
|
-
exports["default"] = prefetchSpout;
|
|
475
|
-
function prefetchSpout(field) {
|
|
476
|
-
return function (next) {
|
|
477
|
-
return async props => {
|
|
478
|
-
const nextProps = await next(props);
|
|
479
|
-
try {
|
|
480
|
-
const toFetch = [];
|
|
481
|
-
nextProps.matchedRoutes.forEach(route => {
|
|
482
|
-
if (typeof route.resolveData === 'function') {
|
|
483
|
-
toFetch.push(route.resolveData(nextProps[field], route));
|
|
484
|
-
}
|
|
485
|
-
});
|
|
486
|
-
await Promise.all(toFetch);
|
|
487
|
-
} catch (e) {
|
|
488
|
-
console.error(e);
|
|
489
|
-
}
|
|
490
|
-
return nextProps;
|
|
491
|
-
};
|
|
492
|
-
};
|
|
493
|
-
}
|
|
494
|
-
|
|
495
|
-
/***/ }),
|
|
496
|
-
|
|
497
|
-
/***/ "./src/spouts/restHooks.server.tsx":
|
|
498
|
-
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
499
|
-
|
|
500
|
-
"use strict";
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
504
|
-
exports.__esModule = true;
|
|
505
|
-
exports["default"] = restHooksSpout;
|
|
506
|
-
var _interopRequireWildcard2 = _interopRequireDefault(__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireWildcard.js"));
|
|
507
|
-
var _react = _interopRequireDefault(__webpack_require__("react"));
|
|
508
|
-
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/restHooks.server.tsx";
|
|
509
426
|
function restHooksSpout(options = {}) {
|
|
510
427
|
return next => async props => {
|
|
511
428
|
var _options$getManagers;
|
|
512
|
-
const managers = (_options$getManagers = options == null ? void 0 : options.getManagers == null ? void 0 : options.getManagers()) != null ? _options$getManagers : [new (await Promise.resolve().then((
|
|
429
|
+
const managers = (_options$getManagers = options == null ? void 0 : options.getManagers == null ? void 0 : options.getManagers()) != null ? _options$getManagers : [new (await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 2, 23))).NetworkManager()];
|
|
513
430
|
const {
|
|
514
431
|
createPersistedStore
|
|
515
|
-
} = await Promise.resolve().then((
|
|
432
|
+
} = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 3, 23));
|
|
516
433
|
const [ServerCacheProvider, useReadyCacheState, controller, store] = createPersistedStore(managers);
|
|
517
434
|
const nextProps = await next({
|
|
518
435
|
...props,
|
|
@@ -525,10 +442,10 @@ function restHooksSpout(options = {}) {
|
|
|
525
442
|
...nextProps.initData,
|
|
526
443
|
resthooks: useReadyCacheState
|
|
527
444
|
},
|
|
528
|
-
app: /*#__PURE__*/
|
|
445
|
+
app: /*#__PURE__*/external_react_default().createElement(ServerCacheProvider, {
|
|
529
446
|
__self: this,
|
|
530
447
|
__source: {
|
|
531
|
-
fileName:
|
|
448
|
+
fileName: restHooks_server_jsxFileName,
|
|
532
449
|
lineNumber: 34,
|
|
533
450
|
columnNumber: 12
|
|
534
451
|
}
|
|
@@ -539,33 +456,78 @@ function restHooksSpout(options = {}) {
|
|
|
539
456
|
};
|
|
540
457
|
};
|
|
541
458
|
}
|
|
459
|
+
;// CONCATENATED MODULE: ./src/spouts/antd.server.tsx
|
|
460
|
+
var antd_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/antd.server.tsx";
|
|
542
461
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
462
|
+
function antdSpout() {
|
|
463
|
+
return next => async props => {
|
|
464
|
+
var _nextProps$scripts;
|
|
465
|
+
const {
|
|
466
|
+
createCache,
|
|
467
|
+
extractStyle,
|
|
468
|
+
StyleProvider
|
|
469
|
+
} = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 4, 23));
|
|
470
|
+
const cache = createCache();
|
|
471
|
+
const nextProps = await next(props);
|
|
472
|
+
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
473
|
+
const AntdSheets = () => {
|
|
474
|
+
return /*#__PURE__*/external_react_default().createElement("script", {
|
|
475
|
+
dangerouslySetInnerHTML: {
|
|
476
|
+
__html: `</script>${extractStyle(cache)}<script>`
|
|
477
|
+
},
|
|
478
|
+
__self: this,
|
|
479
|
+
__source: {
|
|
480
|
+
fileName: antd_server_jsxFileName,
|
|
481
|
+
lineNumber: 28,
|
|
482
|
+
columnNumber: 9
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
};
|
|
486
|
+
// unfortunately we have to inject this after the entire content has streamed in or it doesn't correctly populate
|
|
487
|
+
// see: https://github.com/ant-design/cssinjs/issues/79
|
|
488
|
+
scripts.push( /*#__PURE__*/external_react_default().createElement(AntdSheets, {
|
|
489
|
+
__self: this,
|
|
490
|
+
__source: {
|
|
491
|
+
fileName: antd_server_jsxFileName,
|
|
492
|
+
lineNumber: 37,
|
|
493
|
+
columnNumber: 18
|
|
494
|
+
}
|
|
495
|
+
}));
|
|
496
|
+
return {
|
|
497
|
+
...nextProps,
|
|
498
|
+
app: /*#__PURE__*/external_react_default().createElement(StyleProvider, {
|
|
499
|
+
cache: cache,
|
|
500
|
+
__self: this,
|
|
501
|
+
__source: {
|
|
502
|
+
fileName: antd_server_jsxFileName,
|
|
503
|
+
lineNumber: 41,
|
|
504
|
+
columnNumber: 12
|
|
505
|
+
}
|
|
506
|
+
}, nextProps.app),
|
|
507
|
+
scripts
|
|
508
|
+
};
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
;// CONCATENATED MODULE: external "@anansi/router"
|
|
512
|
+
const router_namespaceObject = require("@anansi/router");
|
|
513
|
+
;// CONCATENATED MODULE: external "history"
|
|
514
|
+
const external_history_namespaceObject = require("history");
|
|
515
|
+
;// CONCATENATED MODULE: ./src/spouts/router.server.tsx
|
|
516
|
+
var router_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/router.server.tsx";
|
|
547
517
|
|
|
548
|
-
"use strict";
|
|
549
518
|
|
|
550
519
|
|
|
551
|
-
var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
552
|
-
exports.__esModule = true;
|
|
553
|
-
exports["default"] = routerSpout;
|
|
554
|
-
var _router = __webpack_require__("@anansi/router");
|
|
555
|
-
var _history = __webpack_require__("history");
|
|
556
|
-
var _react = _interopRequireDefault(__webpack_require__("react"));
|
|
557
|
-
var _jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/router.server.tsx";
|
|
558
520
|
function routerSpout(options) {
|
|
559
521
|
const createRouteComponent = router => function Router({
|
|
560
522
|
children
|
|
561
523
|
}) {
|
|
562
524
|
const resolveWith = options.useResolveWith();
|
|
563
|
-
return /*#__PURE__*/
|
|
525
|
+
return /*#__PURE__*/external_react_default().createElement(router_namespaceObject.RouteProvider, {
|
|
564
526
|
router: router,
|
|
565
527
|
resolveWith: resolveWith,
|
|
566
528
|
__self: this,
|
|
567
529
|
__source: {
|
|
568
|
-
fileName:
|
|
530
|
+
fileName: router_server_jsxFileName,
|
|
569
531
|
lineNumber: 26,
|
|
570
532
|
columnNumber: 9
|
|
571
533
|
}
|
|
@@ -573,7 +535,7 @@ function routerSpout(options) {
|
|
|
573
535
|
};
|
|
574
536
|
return next => async props => {
|
|
575
537
|
const url = props.req.url || '';
|
|
576
|
-
const router = options.createRouter((0,
|
|
538
|
+
const router = options.createRouter((0,external_history_namespaceObject.createMemoryHistory)({
|
|
577
539
|
initialEntries: [url]
|
|
578
540
|
}));
|
|
579
541
|
const matchedRoutes = router.getMatchedRoutes(url);
|
|
@@ -585,10 +547,10 @@ function routerSpout(options) {
|
|
|
585
547
|
const Router = createRouteComponent(router);
|
|
586
548
|
return {
|
|
587
549
|
...nextProps,
|
|
588
|
-
app: /*#__PURE__*/
|
|
550
|
+
app: /*#__PURE__*/external_react_default().createElement(Router, {
|
|
589
551
|
__self: this,
|
|
590
552
|
__source: {
|
|
591
|
-
fileName:
|
|
553
|
+
fileName: router_server_jsxFileName,
|
|
592
554
|
lineNumber: 49,
|
|
593
555
|
columnNumber: 12
|
|
594
556
|
}
|
|
@@ -599,204 +561,104 @@ function routerSpout(options) {
|
|
|
599
561
|
};
|
|
600
562
|
};
|
|
601
563
|
}
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
/***/ "@rest-hooks/react":
|
|
622
|
-
/***/ ((module) => {
|
|
623
|
-
|
|
624
|
-
"use strict";
|
|
625
|
-
module.exports = require("@rest-hooks/react");
|
|
626
|
-
|
|
627
|
-
/***/ }),
|
|
628
|
-
|
|
629
|
-
/***/ "@rest-hooks/ssr":
|
|
630
|
-
/***/ ((module) => {
|
|
631
|
-
|
|
632
|
-
"use strict";
|
|
633
|
-
module.exports = require("@rest-hooks/ssr");
|
|
634
|
-
|
|
635
|
-
/***/ }),
|
|
636
|
-
|
|
637
|
-
/***/ "history":
|
|
638
|
-
/***/ ((module) => {
|
|
639
|
-
|
|
640
|
-
"use strict";
|
|
641
|
-
module.exports = require("history");
|
|
642
|
-
|
|
643
|
-
/***/ }),
|
|
644
|
-
|
|
645
|
-
/***/ "react":
|
|
646
|
-
/***/ ((module) => {
|
|
647
|
-
|
|
648
|
-
"use strict";
|
|
649
|
-
module.exports = require("react");
|
|
650
|
-
|
|
651
|
-
/***/ }),
|
|
652
|
-
|
|
653
|
-
/***/ "react-dom/server":
|
|
654
|
-
/***/ ((module) => {
|
|
655
|
-
|
|
656
|
-
"use strict";
|
|
657
|
-
module.exports = require("react-dom/server");
|
|
658
|
-
|
|
659
|
-
/***/ }),
|
|
660
|
-
|
|
661
|
-
/***/ "crypto":
|
|
662
|
-
/***/ ((module) => {
|
|
663
|
-
|
|
664
|
-
"use strict";
|
|
665
|
-
module.exports = require("crypto");
|
|
666
|
-
|
|
667
|
-
/***/ }),
|
|
668
|
-
|
|
669
|
-
/***/ "../../node_modules/@babel/runtime/helpers/interopRequireDefault.js":
|
|
670
|
-
/***/ ((module) => {
|
|
671
|
-
|
|
672
|
-
function _interopRequireDefault(obj) {
|
|
673
|
-
return obj && obj.__esModule ? obj : {
|
|
674
|
-
"default": obj
|
|
564
|
+
;// CONCATENATED MODULE: ./src/spouts/prefetch.server.tsx
|
|
565
|
+
function prefetchSpout(field) {
|
|
566
|
+
return function (next) {
|
|
567
|
+
return async props => {
|
|
568
|
+
const nextProps = await next(props);
|
|
569
|
+
try {
|
|
570
|
+
const toFetch = [];
|
|
571
|
+
nextProps.matchedRoutes.forEach(route => {
|
|
572
|
+
if (typeof route.resolveData === 'function') {
|
|
573
|
+
toFetch.push(route.resolveData(nextProps[field], route));
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
await Promise.all(toFetch);
|
|
577
|
+
} catch (e) {
|
|
578
|
+
console.error(e);
|
|
579
|
+
}
|
|
580
|
+
return nextProps;
|
|
581
|
+
};
|
|
675
582
|
};
|
|
676
583
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
/***/ }),
|
|
584
|
+
;// CONCATENATED MODULE: ./src/spouts/json.server.tsx
|
|
585
|
+
var json_server_jsxFileName = "/home/ntucker/src/anansi/packages/core/src/spouts/json.server.tsx";
|
|
680
586
|
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
587
|
+
function JSONSpout({
|
|
588
|
+
id = 'anansi-json'
|
|
589
|
+
} = {}) {
|
|
590
|
+
return next => async props => {
|
|
591
|
+
var _nextProps$scripts, _nextProps$initData;
|
|
592
|
+
const nextProps = await next(props);
|
|
593
|
+
const scripts = (_nextProps$scripts = nextProps.scripts) != null ? _nextProps$scripts : [];
|
|
594
|
+
Object.entries((_nextProps$initData = nextProps.initData) != null ? _nextProps$initData : {}).forEach(([key, useData]) => {
|
|
595
|
+
const globalId = `${id}.${key}`;
|
|
596
|
+
const Script = () => {
|
|
597
|
+
const data = useData();
|
|
598
|
+
try {
|
|
599
|
+
const encoded = JSON.stringify(data);
|
|
600
|
+
return /*#__PURE__*/external_react_default().createElement("script", {
|
|
601
|
+
id: globalId,
|
|
602
|
+
type: "application/json",
|
|
603
|
+
dangerouslySetInnerHTML: {
|
|
604
|
+
__html: encoded
|
|
605
|
+
},
|
|
606
|
+
nonce: props.nonce,
|
|
607
|
+
__self: this,
|
|
608
|
+
__source: {
|
|
609
|
+
fileName: json_server_jsxFileName,
|
|
610
|
+
lineNumber: 29,
|
|
611
|
+
columnNumber: 13
|
|
612
|
+
}
|
|
613
|
+
});
|
|
614
|
+
} catch (e) {
|
|
615
|
+
// TODO: Use unified logging
|
|
616
|
+
console.error(`Error serializing json for ${key}`);
|
|
617
|
+
console.error(e);
|
|
618
|
+
return null;
|
|
619
|
+
}
|
|
620
|
+
};
|
|
621
|
+
scripts.push( /*#__PURE__*/external_react_default().createElement(external_react_namespaceObject.Suspense, {
|
|
622
|
+
key: globalId,
|
|
623
|
+
__self: this,
|
|
624
|
+
__source: {
|
|
625
|
+
fileName: json_server_jsxFileName,
|
|
626
|
+
lineNumber: 46,
|
|
627
|
+
columnNumber: 9
|
|
628
|
+
}
|
|
629
|
+
}, /*#__PURE__*/external_react_default().createElement(Script, {
|
|
630
|
+
__self: this,
|
|
631
|
+
__source: {
|
|
632
|
+
fileName: json_server_jsxFileName,
|
|
633
|
+
lineNumber: 47,
|
|
634
|
+
columnNumber: 11
|
|
635
|
+
}
|
|
636
|
+
})));
|
|
637
|
+
});
|
|
698
638
|
return {
|
|
699
|
-
|
|
639
|
+
...nextProps,
|
|
640
|
+
scripts
|
|
700
641
|
};
|
|
701
|
-
}
|
|
702
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
703
|
-
if (cache && cache.has(obj)) {
|
|
704
|
-
return cache.get(obj);
|
|
705
|
-
}
|
|
706
|
-
var newObj = {};
|
|
707
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
708
|
-
for (var key in obj) {
|
|
709
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
710
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
711
|
-
if (desc && (desc.get || desc.set)) {
|
|
712
|
-
Object.defineProperty(newObj, key, desc);
|
|
713
|
-
} else {
|
|
714
|
-
newObj[key] = obj[key];
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
newObj["default"] = obj;
|
|
719
|
-
if (cache) {
|
|
720
|
-
cache.set(obj, newObj);
|
|
721
|
-
}
|
|
722
|
-
return newObj;
|
|
642
|
+
};
|
|
723
643
|
}
|
|
724
|
-
|
|
644
|
+
;// CONCATENATED MODULE: ./src/spouts/app.server.tsx
|
|
645
|
+
const appSpout = app => props => Promise.resolve({
|
|
646
|
+
...props,
|
|
647
|
+
app
|
|
648
|
+
});
|
|
649
|
+
/* harmony default export */ const app_server = (appSpout);
|
|
650
|
+
;// CONCATENATED MODULE: ./src/index.server.ts
|
|
651
|
+
|
|
652
|
+
|
|
725
653
|
|
|
726
|
-
/***/ }),
|
|
727
654
|
|
|
728
|
-
/***/ "../../node_modules/@babel/runtime/helpers/typeof.js":
|
|
729
|
-
/***/ ((module) => {
|
|
730
655
|
|
|
731
|
-
function _typeof(obj) {
|
|
732
|
-
"@babel/helpers - typeof";
|
|
733
656
|
|
|
734
|
-
return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
735
|
-
return typeof obj;
|
|
736
|
-
} : function (obj) {
|
|
737
|
-
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
738
|
-
}, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);
|
|
739
|
-
}
|
|
740
|
-
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
741
657
|
|
|
742
|
-
/***/ })
|
|
743
658
|
|
|
744
|
-
/******/ });
|
|
745
|
-
/************************************************************************/
|
|
746
|
-
/******/ // The module cache
|
|
747
|
-
/******/ var __webpack_module_cache__ = {};
|
|
748
|
-
/******/
|
|
749
|
-
/******/ // The require function
|
|
750
|
-
/******/ function __webpack_require__(moduleId) {
|
|
751
|
-
/******/ // Check if module is in cache
|
|
752
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
753
|
-
/******/ if (cachedModule !== undefined) {
|
|
754
|
-
/******/ return cachedModule.exports;
|
|
755
|
-
/******/ }
|
|
756
|
-
/******/ // Create a new module (and put it into the cache)
|
|
757
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
758
|
-
/******/ // no module.id needed
|
|
759
|
-
/******/ // no module.loaded needed
|
|
760
|
-
/******/ exports: {}
|
|
761
|
-
/******/ };
|
|
762
|
-
/******/
|
|
763
|
-
/******/ // Execute the module function
|
|
764
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
765
|
-
/******/
|
|
766
|
-
/******/ // Return the exports of the module
|
|
767
|
-
/******/ return module.exports;
|
|
768
|
-
/******/ }
|
|
769
|
-
/******/
|
|
770
|
-
/************************************************************************/
|
|
771
|
-
var __webpack_exports__ = {};
|
|
772
|
-
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
|
773
|
-
(() => {
|
|
774
|
-
"use strict";
|
|
775
|
-
var exports = __webpack_exports__;
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
var _interopRequireDefault = (__webpack_require__("../../node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
779
|
-
exports.__esModule = true;
|
|
780
|
-
exports.routerSpout = exports.restHooksSpout = exports.prefetchSpout = exports.laySpouts = exports.documentSpout = exports.appSpout = exports.antdSpout = exports.JSONSpout = void 0;
|
|
781
|
-
var _laySpouts = _interopRequireDefault(__webpack_require__("./src/laySpouts.tsx"));
|
|
782
|
-
exports.laySpouts = _laySpouts.default;
|
|
783
|
-
var _document = _interopRequireDefault(__webpack_require__("./src/spouts/document.server.tsx"));
|
|
784
|
-
exports.documentSpout = _document.default;
|
|
785
|
-
var _restHooks = _interopRequireDefault(__webpack_require__("./src/spouts/restHooks.server.tsx"));
|
|
786
|
-
exports.restHooksSpout = _restHooks.default;
|
|
787
|
-
var _antd = _interopRequireDefault(__webpack_require__("./src/spouts/antd.server.tsx"));
|
|
788
|
-
exports.antdSpout = _antd.default;
|
|
789
|
-
var _router = _interopRequireDefault(__webpack_require__("./src/spouts/router.server.tsx"));
|
|
790
|
-
exports.routerSpout = _router.default;
|
|
791
|
-
var _prefetch = _interopRequireDefault(__webpack_require__("./src/spouts/prefetch.server.tsx"));
|
|
792
|
-
exports.prefetchSpout = _prefetch.default;
|
|
793
|
-
var _json = _interopRequireDefault(__webpack_require__("./src/spouts/json.server.tsx"));
|
|
794
|
-
exports.JSONSpout = _json.default;
|
|
795
|
-
var _app = _interopRequireDefault(__webpack_require__("./src/spouts/app.server.tsx"));
|
|
796
|
-
exports.appSpout = _app.default;
|
|
797
659
|
})();
|
|
798
660
|
|
|
799
661
|
module.exports = __webpack_exports__;
|
|
800
662
|
/******/ })()
|
|
801
663
|
;
|
|
802
|
-
//# sourceMappingURL=server.js.map
|
|
664
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEtBQUssQ0FBQ3pFLEtBQU07WUFBQWlELE1BQUE7WUFBQUMsUUFBQTtjQUFBQyxRQUFBLEVBQUFDLHVCQUFBO2NBQUFDLFVBQUE7Y0FBQUMsWUFBQTtZQUFBO1VBQUEsRUFDbkI7UUFFTixDQUFDLENBQUMsT0FBTzNDLENBQUMsRUFBRTtVQUNWO1VBQ0FDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFFLDhCQUE2Qk8sR0FBSSxFQUFDLENBQUM7VUFDbERSLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDRixDQUFDLENBQUM7VUFDaEIsT0FBTyxJQUFJO1FBQ2I7TUFDRixDQUFDO01BQ0Q4QixPQUFPLENBQUNtRCxJQUFJLGVBQ1YvQyxzQ0FBQSxDQUFDcUcsdUNBQVE7UUFBQzlILEdBQUcsRUFBRW1JLFFBQVM7UUFBQXRHLE1BQUE7UUFBQUMsUUFBQTtVQUFBQyxRQUFBLEVBQUFDLHVCQUFBO1VBQUFDLFVBQUE7VUFBQUMsWUFBQTtRQUFBO01BQUEsZ0JBQ3RCVCxzQ0FBQSxDQUFDMkcsTUFBTTtRQUFBdkcsTUFBQTtRQUFBQyxRQUFBO1VBQUFDLFFBQUEsRUFBQUMsdUJBQUE7VUFBQUMsVUFBQTtVQUFBQyxZQUFBO1FBQUE7TUFBQSxFQUFHLENBQ0QsQ0FDWjtJQUNILENBQUMsQ0FBQztJQUVGLE9BQU87TUFDTCxHQUFHMkIsU0FBUztNQUNaeEM7SUFDRixDQUFDO0VBQ0gsQ0FBQztBQUNIOztBQ3REQSxNQUFNcUgsUUFBUSxHQUNYM0osR0FBZ0IsSUFDT3NFLEtBQVEsSUFDOUJ1RSxPQUFPLENBQUNlLE9BQU8sQ0FBQztFQUFFLEdBQUd0RixLQUFLO0VBQUV0RTtBQUFJLENBQUMsQ0FBQztBQUV0QyxpREFBZTJKLFFBQVE7O0FDUCtCO0FBQ2lCO0FBQ0U7QUFDVjtBQUNJO0FBQ0k7QUFDUiIsInNvdXJjZXMiOlsid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcIkByZXN0LWhvb2tzL3JlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQHJlc3QtaG9va3Mvc3NyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGFudC1kZXNpZ24vY3NzaW5qc1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jcmVhdGUgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1kb20vc2VydmVyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2xheVNwb3V0cy50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2NzcC50cyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RvY3VtZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9yZXN0SG9va3Muc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FudGQuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAYW5hbnNpL3JvdXRlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImhpc3RvcnlcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3JvdXRlci5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvcHJlZmV0Y2guc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2pzb24uc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9pbmRleC5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlc3QtaG9va3MvcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlc3QtaG9va3Mvc3NyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBhbnQtZGVzaWduL2Nzc2luanNcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwidmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKG9iaikgPT4gKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKSA6IChvYmopID0+IChvYmouX19wcm90b19fKTtcbnZhciBsZWFmUHJvdG90eXBlcztcbi8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLy8gbW9kZSAmIDE2OiByZXR1cm4gdmFsdWUgd2hlbiBpdCdzIFByb21pc2UtbGlrZVxuLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcblx0aWYobW9kZSAmIDEpIHZhbHVlID0gdGhpcyh2YWx1ZSk7XG5cdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG5cdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcblx0XHRpZigobW9kZSAmIDQpICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcblx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG5cdHZhciBkZWYgPSB7fTtcblx0bGVhZlByb3RvdHlwZXMgPSBsZWFmUHJvdG90eXBlcyB8fCBbbnVsbCwgZ2V0UHJvdG8oe30pLCBnZXRQcm90byhbXSksIGdldFByb3RvKGdldFByb3RvKV07XG5cdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyB0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG5cdH1cblx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG5cdHJldHVybiBucztcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKTsiLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgeyByZW5kZXJUb1BpcGVhYmxlU3RyZWFtIGFzIHJlYWN0UmVuZGVyIH0gZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVuZGVyIH0gZnJvbSAnLi9zY3JpcHRzL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxheVNwb3V0cyhcbiAgc3BvdXRzOiAocHJvcHM6IFNlcnZlclByb3BzKSA9PiBQcm9taXNlPHtcbiAgICBhcHA6IEpTWC5FbGVtZW50O1xuICB9PixcbiAge1xuICAgIHRpbWVvdXRNUyA9IDEwMDAwLFxuICAgIG9uRXJyb3IsXG4gIH06IHsgdGltZW91dE1TPzogbnVtYmVyOyBvbkVycm9yPzogKGVycm9yOiB1bmtub3duKSA9PiB2b2lkIH0gPSB7fSxcbikge1xuICBjb25zdCByZW5kZXI6IFJlbmRlciA9IGFzeW5jIChjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMpID0+IHtcbiAgICBjb25zdCBub25jZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoeyBjbGllbnRNYW5pZmVzdCwgcmVxLCByZXMsIG5vbmNlIH0pO1xuXG4gICAgICBsZXQgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHsgcGlwZSwgYWJvcnQgfSA9IHJlYWN0UmVuZGVyKGFwcCwge1xuICAgICAgICBub25jZSxcbiAgICAgICAgLy9ib290c3RyYXBTY3JpcHRzOiBhc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICAgIG9uU2hlbGxSZWFkeSgpIHtcbiAgICAgICAgICAvL21hbmFnZXJzLmZvckVhY2gobWFuYWdlciA9PiBtYW5hZ2VyLmNsZWFudXAoKSk7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgc3RyZWFtaW5nLCB3ZSBzZXQgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGRpZEVycm9yID8gNTAwIDogMjAwO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hlbGxFcnJvcigpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSA1MDA7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGU6IGFueSkge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gNTAwO1xuICAgICAgICAgIC8vcGlwZShyZXMpOyBSZW1vdmluZyB0aGlzIGF2b2lkcywgXCJSZWFjdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyBwaXBpbmcgdG8gb25lIHdyaXRhYmxlIHN0cmVhbS5cIlxuICAgICAgICAgIGlmIChvbkVycm9yKSBvbkVycm9yKGUpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICAvLyBBYmFuZG9uIGFuZCBzd2l0Y2ggdG8gY2xpZW50IHJlbmRlcmluZyBpZiBlbm91Z2ggdGltZSBwYXNzZXMuXG4gICAgICAvLyBUcnkgbG93ZXJpbmcgdGhpcyB0byBzZWUgdGhlIGNsaWVudCByZWNvdmVyLlxuICAgICAgc2V0VGltZW91dChcbiAgICAgICAgKCkgPT4gKGFib3J0IGFzIGFueSkoYFRpbWVvdXQgb2YgJHt0aW1lb3V0TVN9bXMgZXhjZWVkZWRgKSxcbiAgICAgICAgdGltZW91dE1TLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9O1xuICByZXR1cm4gcmVuZGVyO1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJleHBvcnQgaW50ZXJmYWNlIFBvbGljeSB7XG4gIFtkaXJlY3RpdmU6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG4vLyBUT0RPOiBtZW1vaXplIHRoaXNcbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBvbGljeShwb2xpY3lPYmo6IFBvbGljeSkge1xuICByZXR1cm4gT2JqZWN0LmtleXMocG9saWN5T2JqKVxuICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IEFycmF5LmlzQXJyYXkocG9saWN5T2JqW2tleV0pXG4gICAgICAgID8gWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuIiwiaW1wb3J0IHR5cGUgeyBQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5pbXBvcnQgeyBidWlsZFBvbGljeSB9IGZyb20gJy4vY3NwLmpzJztcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYXNzZXRzOiB7IGhyZWY6IHN0cmluZzsgYXM/OiBzdHJpbmc7IHJlbD86IHN0cmluZyB9W107XG4gIGhlYWQ6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZXh0cmFTdHlsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZDogc3RyaW5nO1xuICBjaGFyU2V0OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xuICBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50KHtcbiAgYXNzZXRzLFxuICBoZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCxcbiAgY2hhclNldCxcbiAgY3NQb2xpY3ksXG4gIG5vbmNlLFxuICBzY3JpcHRzLFxuICBleHRyYVN0eWxlLFxufTogUHJvcHMpIHtcbiAgbGV0IGNzcE1ldGE6IG51bGwgfCBSZWFjdC5SZWFjdE5vZGUgPSBudWxsO1xuICBpZiAoY3NQb2xpY3kpIHtcbiAgICAvLyBhZGQgbm9uY2UgdG8gcG9saWN5XG4gICAgY29uc3QgcG9saWN5ID0ge1xuICAgICAgLi4uY3NQb2xpY3ksXG4gICAgfTtcbiAgICBpZiAobm9uY2UpIHtcbiAgICAgIGlmICh0eXBlb2YgcG9saWN5WydzY3JpcHQtc3JjJ10gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gW3BvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9saWN5WydzY3JpcHQtc3JjJ10gPSBbLi4ucG9saWN5WydzY3JpcHQtc3JjJ10sIGAnbm9uY2UtJHtub25jZX0nYF07XG4gICAgICB9XG4gICAgfVxuICAgIGNzcE1ldGEgPSAoXG4gICAgICA8bWV0YSBodHRwRXF1aXY9XCJDb250ZW50LVNlY3VyaXR5LVBvbGljeVwiIGNvbnRlbnQ9e2J1aWxkUG9saWN5KHBvbGljeSl9IC8+XG4gICAgKTtcbiAgfVxuICByZXR1cm4gKFxuICAgIDxodG1sPlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtjc3BNZXRhfVxuICAgICAgICB7aGVhZH1cbiAgICAgICAge2V4dHJhU3R5bGV9XG4gICAgICAgIHthc3NldHMubWFwKChhc3NldCwgaSkgPT4gKFxuICAgICAgICAgIDxsaW5rIGtleT17aX0gcmVsPVwicHJlbG9hZFwiIHsuLi5hc3NldH0gLz5cbiAgICAgICAgKSl9XG4gICAgICAgIDx0aXRsZT57dGl0bGV9PC90aXRsZT5cbiAgICAgIDwvaGVhZD5cbiAgICAgIDxib2R5PlxuICAgICAgICA8ZGl2IGlkPXtyb290SWR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAge3NjcmlwdHN9XG4gICAgICAgIHthc3NldHNcbiAgICAgICAgICAuZmlsdGVyKCh7IGhyZWYgfSkgPT4gaHJlZi5lbmRzV2l0aCgnLmpzJykpXG4gICAgICAgICAgLm1hcCgoeyBocmVmIH0sIGkpID0+IChcbiAgICAgICAgICAgIDxzY3JpcHQga2V5PXtpfSBzcmM9e2hyZWZ9IGFzeW5jIC8+XG4gICAgICAgICAgKSl9XG4gICAgICA8L2JvZHk+XG4gICAgPC9odG1sPlxuICApO1xufVxuRG9jdW1lbnQuZGVmYXVsdFByb3BzID0ge1xuICBoZWFkOiAoXG4gICAgPD5cbiAgICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgICA8bGlua1xuICAgICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCA/PyAnLyd9ZmF2aWNvbi5pY29gfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKSxcbiAgY2hhclNldDogJ3V0Zi04JyxcbiAgcm9vdElkOiAnYW5hbnNpLXJvb3QnLFxuICBzY3JpcHRzOiBudWxsLFxufTtcbiIsImltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3RhdHNDaHVua0dyb3VwIH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB0eXBlIHsgUG9saWN5IH0gZnJvbSAnLi9jc3AuanMnO1xuaW1wb3J0IERvY3VtZW50IGZyb20gJy4vRG9jdW1lbnRDb21wb25lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPGFueT5bXTtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbiAgZXh0cmFTdHlsZT86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnRTcG91dChvcHRpb25zOiB7XG4gIGhlYWQ/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZD86IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbiAgY3NQb2xpY3k/OiBQb2xpY3k7XG59KTogU2VydmVyU3BvdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4sIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBOZWVkZWROZXh0PiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHB1YmxpY1BhdGggPSBwcm9wcy5jbGllbnRNYW5pZmVzdC5wdWJsaWNQYXRoO1xuXG4gICAgaWYgKFxuICAgICAgT2JqZWN0LmtleXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5sZW5ndGggPCAxIHx8XG4gICAgICBwdWJsaWNQYXRoID09PSB1bmRlZmluZWRcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbmlmZXN0IG1pc3NpbmcgZW50cmllcyBuZWVkZWQnKTtcblxuICAgIC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHRoaXMgcGFja2FnZSBmb3IgYnVpbGQgc3RhdHMgaW4gZnV0dXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC90cmVlL21haW4vcGFja2FnZXMvcmVhY3Qtc2VydmVyLWRvbS13ZWJwYWNrXG4gICAgY29uc3QgYXNzZXRNYXAgPSAoYXNzZXRzOiB7IG5hbWU6IHN0cmluZzsgc2l6ZT86IG51bWJlciB9W10pID0+XG4gICAgICBhc3NldHMubWFwKCh7IG5hbWUgfSkgPT4gYCR7cHVibGljUGF0aH0ke25hbWV9YCk7XG5cbiAgICBjb25zdCBhc3NldExpc3Q6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmZvckVhY2goXG4gICAgICBlbnRyeXBvaW50ID0+IHtcbiAgICAgICAgYXNzZXRMaXN0LnB1c2goLi4uYXNzZXRNYXAoZW50cnlwb2ludC5hc3NldHMgPz8gW10pKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICBuZXcgU2V0KFxuICAgICAgYXNzZXRNYXAoXG4gICAgICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3QubmFtZWRDaHVua0dyb3VwcyA/PyB7fSlcbiAgICAgICAgICAuZmlsdGVyKCh7IG5hbWUgfSkgPT5cbiAgICAgICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLnNvbWUocm91dGUgPT4gbmFtZT8uaW5jbHVkZXMocm91dGUubmFtZSkpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZmxhdE1hcChjaHVuayA9PiBbXG4gICAgICAgICAgICAuLi4oY2h1bmsuYXNzZXRzID8/IFtdKSxcbiAgICAgICAgICAgIC8vIGFueSBjaHVuayBwcmVsb2Fkc1xuICAgICAgICAgICAgLi4uY2hpbGRyZW5Bc3NldHMoY2h1bmspLFxuICAgICAgICAgIF0pLFxuICAgICAgKSxcbiAgICApLmZvckVhY2goYXNzZXQgPT4gYXNzZXRMaXN0LnB1c2goYXNzZXQpKTtcblxuICAgIC8vIGZpbmQgYWRkaXRpb25hbCBhc3NldHMgdG8gcHJlbG9hZCBiYXNlZCBvbiBtYXRjaGVkIHJvdXRlXG4gICAgY29uc3QgYXNzZXRzOiB7XG4gICAgICBocmVmOiBzdHJpbmc7XG4gICAgICBhcz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHJlbD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB9W10gPSBhc3NldExpc3RcbiAgICAgIC5maWx0ZXIoYXNzZXQgPT4gIWFzc2V0LmVuZHNXaXRoKCcuaG90LXVwZGF0ZS5qcycpKVxuICAgICAgLm1hcChhc3NldCA9PlxuICAgICAgICBhc3NldC5lbmRzV2l0aCgnLmNzcycpXG4gICAgICAgICAgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgICAgOiBhc3NldC5lbmRzV2l0aCgnLmpzJylcbiAgICAgICAgICA/IHsgaHJlZjogYXNzZXQsIGFzOiAnc2NyaXB0JyB9XG4gICAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICApO1xuICAgIGNvbnN0IG5vbmNlID1cbiAgICAgIC8vIG5vbmNlcyBuZWdhdGUgJ3Vuc2FmZS1pbmxpbmUnIHNvIGRvIG5vdCBhZGQgaXQgaW4gZGV2ZWxvcG1lbnQgdG8ga2VlcCB0aGluZ3MgZWFzaWVyXG4gICAgICBwcm9wcy5ub25jZSAmJlxuICAgICAgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgfHxcbiAgICAgICAgKHByb3BzLnJlcSBhcyBSZXF1ZXN0KT8ucHJvdG9jb2wgIT09ICdodHRwJylcbiAgICAgICAgPyBwcm9wcy5ub25jZVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgZXh0cmFTdHlsZT17bmV4dFByb3BzLmV4dHJhU3R5bGV9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgbm9uY2U9e25vbmNlfVxuICAgICAgICAgIGNzUG9saWN5PXtvcHRpb25zLmNzUG9saWN5fVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuQXNzZXRzKGNodW5rOiBTdGF0c0NodW5rR3JvdXApIHtcbiAgcmV0dXJuIGNodW5rLmNoaWxkcmVuXG4gICAgPyBPYmplY3QudmFsdWVzKGNodW5rLmNoaWxkcmVuKS5mbGF0TWFwKHByZWxvYWQgPT5cbiAgICAgICAgcHJlbG9hZC5mbGF0TWFwKGMgPT4gYy5hc3NldHMgPz8gW10pLFxuICAgICAgKVxuICAgIDogW107XG59XG4iLCJpbXBvcnQgeyB0eXBlIENvbnRyb2xsZXIsIHR5cGUgTWFuYWdlciwgdHlwZSBTdGF0ZSB9IGZyb20gJ0ByZXN0LWhvb2tzL3JlYWN0JztcbmltcG9ydCB0eXBlIHsgU3RvcmUgfSBmcm9tICdyZWR1eCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzdEhvb2tzU3BvdXQoXG4gIG9wdGlvbnM6IHtcbiAgICBnZXRNYW5hZ2Vycz86ICgpID0+IE1hbmFnZXJbXTtcbiAgfSA9IHt9LFxuKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7IGNvbnRyb2xsZXI6IENvbnRyb2xsZXIgfSAmIHsgc3RvcmU6IFN0b3JlPFN0YXRlPHVua25vd24+PiB9LFxuICB7IGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47IHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXSB9XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXJzID0gb3B0aW9ucz8uZ2V0TWFuYWdlcnM/LigpID8/IFtcbiAgICAgIG5ldyAoYXdhaXQgaW1wb3J0KCdAcmVzdC1ob29rcy9yZWFjdCcpKS5OZXR3b3JrTWFuYWdlcigpLFxuICAgIF07XG4gICAgY29uc3QgeyBjcmVhdGVQZXJzaXN0ZWRTdG9yZSB9ID0gYXdhaXQgaW1wb3J0KCdAcmVzdC1ob29rcy9zc3InKTtcbiAgICBjb25zdCBbU2VydmVyQ2FjaGVQcm92aWRlciwgdXNlUmVhZHlDYWNoZVN0YXRlLCBjb250cm9sbGVyLCBzdG9yZV0gPVxuICAgICAgY3JlYXRlUGVyc2lzdGVkU3RvcmUobWFuYWdlcnMpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dCh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBzdG9yZSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgaW5pdERhdGE6IHtcbiAgICAgICAgLi4ubmV4dFByb3BzLmluaXREYXRhLFxuICAgICAgICByZXN0aG9va3M6IHVzZVJlYWR5Q2FjaGVTdGF0ZSxcbiAgICAgIH0sXG4gICAgICBhcHA6IDxTZXJ2ZXJDYWNoZVByb3ZpZGVyPntuZXh0UHJvcHMuYXBwfTwvU2VydmVyQ2FjaGVQcm92aWRlcj4sXG4gICAgICAvLyBUT0RPOiBmaWd1cmUgb3V0IGhvdyB0byBvbmx5IGluamVjdCBpbiBuZXh0IGFuZCBub3QgaGF2ZSB0byBhbHNvIHB1dCBoZXJlXG4gICAgICBjb250cm9sbGVyLFxuICAgICAgc3RvcmUsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+O1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG4gIGV4dHJhU3R5bGU/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFudGRTcG91dCgpOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlQ2FjaGUsIGV4dHJhY3RTdHlsZSwgU3R5bGVQcm92aWRlciB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgJ0BhbnQtZGVzaWduL2Nzc2luanMnXG4gICAgKTtcbiAgICBjb25zdCBjYWNoZSA9IGNyZWF0ZUNhY2hlKCk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBjb25zdCBBbnRkU2hlZXRzID0gKCk6IEpTWC5FbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiBgPC9zY3JpcHQ+JHtleHRyYWN0U3R5bGUoY2FjaGUpfTxzY3JpcHQ+YCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9O1xuICAgIC8vIHVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byBpbmplY3QgdGhpcyBhZnRlciB0aGUgZW50aXJlIGNvbnRlbnQgaGFzIHN0cmVhbWVkIGluIG9yIGl0IGRvZXNuJ3QgY29ycmVjdGx5IHBvcHVsYXRlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9jc3NpbmpzL2lzc3Vlcy83OVxuICAgIHNjcmlwdHMucHVzaCg8QW50ZFNoZWV0cyAvPik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8U3R5bGVQcm92aWRlciBjYWNoZT17Y2FjaGV9PntuZXh0UHJvcHMuYXBwfTwvU3R5bGVQcm92aWRlcj4sXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkBhbmFuc2kvcm91dGVyXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiaGlzdG9yeVwiKTsiLCJpbXBvcnQgeyBSb3V0ZSwgUm91dGVQcm92aWRlciwgUm91dGVDb250cm9sbGVyIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgY3JlYXRlTWVtb3J5SGlzdG9yeSB9IGZyb20gJ2hpc3RvcnknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBDcmVhdGVSb3V0ZXIsIFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJvdXRlclNwb3V0PFJlc29sdmVXaXRoPihvcHRpb25zOiB7XG4gIHJlc29sdmVXaXRoPzogYW55O1xuICB1c2VSZXNvbHZlV2l0aDogKCkgPT4gUmVzb2x2ZVdpdGg7XG4gIGNyZWF0ZVJvdXRlcjogQ3JlYXRlUm91dGVyPFJlc29sdmVXaXRoPjtcbn0pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHtcbiAgICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXTtcbiAgfSAmIHtcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj47XG4gIH1cbj4ge1xuICBjb25zdCBjcmVhdGVSb3V0ZUNvbXBvbmVudCA9IChcbiAgICByb3V0ZXI6IFJvdXRlQ29udHJvbGxlcjxSb3V0ZTxSZXNvbHZlV2l0aCwgYW55Pj4sXG4gICkgPT5cbiAgICBmdW5jdGlvbiBSb3V0ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICAgICAgY29uc3QgcmVzb2x2ZVdpdGggPSBvcHRpb25zLnVzZVJlc29sdmVXaXRoKCk7XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxSb3V0ZVByb3ZpZGVyIHJvdXRlcj17cm91dGVyfSByZXNvbHZlV2l0aD17cmVzb2x2ZVdpdGh9PlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9Sb3V0ZVByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB1cmwgPSBwcm9wcy5yZXEudXJsIHx8ICcnO1xuICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgY3JlYXRlTWVtb3J5SGlzdG9yeSh7IGluaXRpYWxFbnRyaWVzOiBbdXJsXSB9KSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUm91dGVyID0gY3JlYXRlUm91dGVDb21wb25lbnQocm91dGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZVByb3BzLCBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZFByb3BzPFJvdXRlV2l0aD4gPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJvdXRlV2l0aD5bXTtcbn0gJiBSZXNvbHZlUHJvcHM7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHByZWZldGNoU3BvdXQ8RiBleHRlbmRzIHN0cmluZz4oZmllbGQ6IEYpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIDxcbiAgICBSb3V0ZVdpdGgsXG4gICAgTiBleHRlbmRzIE5lZWRlZFByb3BzPFJvdXRlV2l0aD4sXG4gICAgSSBleHRlbmRzIFNlcnZlclByb3BzLFxuICA+KFxuICAgIG5leHQ6IChwcm9wczogSSkgPT4gUHJvbWlzZTxcbiAgICAgIHtcbiAgICAgICAgW0sgaW4gRl06IFJvdXRlV2l0aDtcbiAgICAgIH0gJiBOXG4gICAgPixcbiAgKSB7XG4gICAgcmV0dXJuIGFzeW5jIChwcm9wczogSSkgPT4ge1xuICAgICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRvRmV0Y2g6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuICAgICAgICBuZXh0UHJvcHMubWF0Y2hlZFJvdXRlcy5mb3JFYWNoKHJvdXRlID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJvdXRlLnJlc29sdmVEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0b0ZldGNoLnB1c2gocm91dGUucmVzb2x2ZURhdGEobmV4dFByb3BzW2ZpZWxkXSwgcm91dGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0b0ZldGNoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBPYmplY3QuZW50cmllcyhuZXh0UHJvcHMuaW5pdERhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHVzZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgY29uc3QgU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB1c2VEYXRhKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW5jb2RlZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIGlkPXtnbG9iYWxJZH1cbiAgICAgICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogZW5jb2RlZCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gVE9ETzogVXNlIHVuaWZpZWQgbG9nZ2luZ1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHNlcmlhbGl6aW5nIGpzb24gZm9yICR7a2V5fWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzY3JpcHRzLnB1c2goXG4gICAgICAgIDxTdXNwZW5zZSBrZXk9e2dsb2JhbElkfT5cbiAgICAgICAgICA8U2NyaXB0IC8+XG4gICAgICAgIDwvU3VzcGVuc2U+LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBhcHBTcG91dCA9XG4gIChhcHA6IEpTWC5FbGVtZW50KSA9PlxuICA8UCBleHRlbmRzIFNlcnZlclByb3BzPihwcm9wczogUCkgPT5cbiAgICBQcm9taXNlLnJlc29sdmUoeyAuLi5wcm9wcywgYXBwIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBhcHBTcG91dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgbGF5U3BvdXRzIH0gZnJvbSAnLi9sYXlTcG91dHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZG9jdW1lbnQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcmVzdEhvb2tzU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9yZXN0SG9va3Muc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYW50ZFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYW50ZC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJTcG91dCB9IGZyb20gJy4vc3BvdXRzL3JvdXRlci5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmVmZXRjaFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcHJlZmV0Y2guc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSlNPTlNwb3V0IH0gZnJvbSAnLi9zcG91dHMvanNvbi5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBTcG91dCB9IGZyb20gJy4vc3BvdXRzL2FwcC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgYXMgU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG4iXSwibmFtZXMiOlsiY3J5cHRvIiwicmVuZGVyVG9QaXBlYWJsZVN0cmVhbSIsInJlYWN0UmVuZGVyIiwibGF5U3BvdXRzIiwic3BvdXRzIiwidGltZW91dE1TIiwib25FcnJvciIsInJlbmRlciIsImNsaWVudE1hbmlmZXN0IiwicmVxIiwicmVzIiwibm9uY2UiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiYXBwIiwiZGlkRXJyb3IiLCJwaXBlIiwiYWJvcnQiLCJvblNoZWxsUmVhZHkiLCJzdGF0dXNDb2RlIiwic2V0SGVhZGVyIiwib25TaGVsbEVycm9yIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsInNldFRpbWVvdXQiLCJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwicmVwbGFjZSIsInRyaW0iLCJEb2N1bWVudCIsImFzc2V0cyIsImhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsImNzUG9saWN5Iiwic2NyaXB0cyIsImV4dHJhU3R5bGUiLCJjc3BNZXRhIiwicG9saWN5IiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiaHR0cEVxdWl2IiwiY29udGVudCIsIl9fc2VsZiIsIl9fc291cmNlIiwiZmlsZU5hbWUiLCJfanN4RmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwiYXNzZXQiLCJpIiwicmVsIiwiaWQiLCJocmVmIiwiZW5kc1dpdGgiLCJzcmMiLCJhc3luYyIsImRlZmF1bHRQcm9wcyIsIkZyYWdtZW50IiwibmFtZSIsIl9wcm9jZXNzJGVudiRXRUJQQUNLXyIsInByb2Nlc3MiLCJlbnYiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwiRG9jdW1lbnRTcG91dCIsIm9wdGlvbnMiLCJuZXh0IiwicHJvcHMiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3QyIiwiX3Byb3BzJGNsaWVudE1hbmlmZXN0MyIsIl9wcm9wcyRjbGllbnRNYW5pZmVzdDQiLCJfcHJvcHMkY2xpZW50TWFuaWZlc3Q1IiwiX3Byb3BzJHJlcSIsIl9uZXh0UHJvcHMkdGl0bGUiLCJuZXh0UHJvcHMiLCJwdWJsaWNQYXRoIiwiZW50cnlwb2ludHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJFcnJvciIsImFzc2V0TWFwIiwiYXNzZXRMaXN0IiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJfZW50cnlwb2ludCRhc3NldHMiLCJwdXNoIiwibmFtZWRDaHVua0dyb3VwcyIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJmbGF0TWFwIiwiY2h1bmsiLCJfY2h1bmskYXNzZXRzIiwiY2hpbGRyZW5Bc3NldHMiLCJhcyIsIk5PREVfRU5WIiwicHJvdG9jb2wiLCJwcmVsb2FkIiwiYyIsIl9jJGFzc2V0cyIsInJlc3RIb29rc1Nwb3V0IiwiX29wdGlvbnMkZ2V0TWFuYWdlcnMiLCJtYW5hZ2VycyIsImdldE1hbmFnZXJzIiwiTmV0d29ya01hbmFnZXIiLCJjcmVhdGVQZXJzaXN0ZWRTdG9yZSIsIlNlcnZlckNhY2hlUHJvdmlkZXIiLCJ1c2VSZWFkeUNhY2hlU3RhdGUiLCJjb250cm9sbGVyIiwic3RvcmUiLCJpbml0RGF0YSIsInJlc3Rob29rcyIsImFudGRTcG91dCIsIl9uZXh0UHJvcHMkc2NyaXB0cyIsImNyZWF0ZUNhY2hlIiwiZXh0cmFjdFN0eWxlIiwiU3R5bGVQcm92aWRlciIsImNhY2hlIiwiQW50ZFNoZWV0cyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiUm91dGVQcm92aWRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJyb3V0ZXJTcG91dCIsImNyZWF0ZVJvdXRlQ29tcG9uZW50Iiwicm91dGVyIiwiUm91dGVyIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsInVybCIsImNyZWF0ZVJvdXRlciIsImluaXRpYWxFbnRyaWVzIiwiZ2V0TWF0Y2hlZFJvdXRlcyIsInByZWZldGNoU3BvdXQiLCJmaWVsZCIsInRvRmV0Y2giLCJyZXNvbHZlRGF0YSIsIlByb21pc2UiLCJhbGwiLCJTdXNwZW5zZSIsIkpTT05TcG91dCIsIl9uZXh0UHJvcHMkaW5pdERhdGEiLCJlbnRyaWVzIiwidXNlRGF0YSIsImdsb2JhbElkIiwiU2NyaXB0IiwiZGF0YSIsImVuY29kZWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsImFwcFNwb3V0IiwicmVzb2x2ZSIsImRlZmF1bHQiLCJkb2N1bWVudFNwb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==
|