@anansi/core 0.21.2 → 0.21.4
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 +18 -0
- package/dist/server.js +5 -6
- package/package.json +5 -6
- package/dist/2.chunk.js +0 -20
- package/dist/client.js +0 -441
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [0.21.4](/github.com/ntucker/anansi/compare/@anansi/core@0.21.3...@anansi/core@0.21.4) (2025-12-12)
|
|
7
|
+
|
|
8
|
+
### 📦 Package
|
|
9
|
+
|
|
10
|
+
* Update react to v19.2.2 ([#2904](/github.com/ntucker/anansi/issues/2904)) ([bd60070](/github.com/ntucker/anansi/commit/bd6007031129a628ecef29a8850a06ca88015663))
|
|
11
|
+
* Update react to v19.2.3 ([#2906](/github.com/ntucker/anansi/issues/2906)) ([d8ca016](/github.com/ntucker/anansi/commit/d8ca01691c059e1add5791dfd9bf04785406c5d0))
|
|
12
|
+
* Update webpack packages ([#2902](/github.com/ntucker/anansi/issues/2902)) ([5e324f5](/github.com/ntucker/anansi/commit/5e324f5e1a9a350bec85955053f2c4469c5e0a27))
|
|
13
|
+
|
|
14
|
+
## [0.21.3](/github.com/ntucker/anansi/compare/@anansi/core@0.21.2...@anansi/core@0.21.3) (2025-12-07)
|
|
15
|
+
|
|
16
|
+
### 💅 Enhancement
|
|
17
|
+
|
|
18
|
+
* ESM-only for non-node ([f6fb13b](/github.com/ntucker/anansi/commit/f6fb13b6486f4efe19fa0086cdfdbf01422018e2))
|
|
19
|
+
|
|
20
|
+
### 📦 Package
|
|
21
|
+
|
|
22
|
+
* Update react to v19.2.1 ([#2897](/github.com/ntucker/anansi/issues/2897)) ([7a85622](/github.com/ntucker/anansi/commit/7a8562247df719f70bfe3772f27551b2fc30f2c1))
|
|
23
|
+
|
|
6
24
|
## [0.21.2](/github.com/ntucker/anansi/compare/@anansi/core@0.21.1...@anansi/core@0.21.2) (2025-12-03)
|
|
7
25
|
|
|
8
26
|
### 📦 Package
|
package/dist/server.js
CHANGED
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
/******/ "use strict";
|
|
3
3
|
/******/ var __webpack_modules__ = ([
|
|
4
4
|
/* 0 */,
|
|
5
|
-
/* 1
|
|
6
|
-
/* 2 */
|
|
5
|
+
/* 1 */
|
|
7
6
|
/***/ ((module) => {
|
|
8
7
|
|
|
9
8
|
module.exports = require("@data-client/react");
|
|
10
9
|
|
|
11
10
|
/***/ }),
|
|
12
|
-
/*
|
|
11
|
+
/* 2 */
|
|
13
12
|
/***/ ((module) => {
|
|
14
13
|
|
|
15
14
|
module.exports = require("@data-client/react/ssr");
|
|
@@ -419,10 +418,10 @@ function childrenAssets(chunk) {
|
|
|
419
418
|
|
|
420
419
|
function dataClientSpout(options = {}) {
|
|
421
420
|
return next => async props => {
|
|
422
|
-
const managers = options?.getManagers?.() ?? [new (await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__,
|
|
421
|
+
const managers = options?.getManagers?.() ?? [new (await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 1, 23))).NetworkManager()];
|
|
423
422
|
const {
|
|
424
423
|
createPersistedStore
|
|
425
|
-
} = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__,
|
|
424
|
+
} = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 2, 23));
|
|
426
425
|
const [ServerDataProvider, useReadyCacheState, controller, store] = createPersistedStore(managers);
|
|
427
426
|
const nextProps = await next({
|
|
428
427
|
...props,
|
|
@@ -671,4 +670,4 @@ function navigatorSpout() {
|
|
|
671
670
|
module.exports = __webpack_exports__;
|
|
672
671
|
/******/ })()
|
|
673
672
|
;
|
|
674
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O0lBQzNCbUwsU0FBUyxFQUFFbkwsTUFBTSxDQUFDa0csTUFBTSxHQUFHLENBQUMsR0FBR2xHLE1BQU0sR0FBRyxDQUFDLElBQUk7RUFDL0MsQ0FBQztBQUNILEM7O0FDekMwQjtBQUVxRDtBQUFBO0FBT2hFLFNBQVMyTCxjQUFjQSxDQUFBLEVBSXBDO0VBQ0EsT0FBTzlGLElBQUksSUFBSSxNQUFNQyxLQUFLLElBQUk7SUFDNUIsTUFBTThGLGNBQWMsR0FBRzlGLEtBQUssQ0FBQ2xFLEdBQUcsQ0FBQ2lLLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztJQUMzRCxNQUFNWixNQUFNLEdBQ1YsT0FBT1csY0FBYyxLQUFLLFFBQVEsR0FBR0EsY0FBYyxHQUFHQSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLE1BQU1FLGNBQWMsR0FBR2QsbUJBQW1CLENBQUNDLE1BQU0sQ0FBQztJQUVsRCxNQUFNbEYsU0FBUyxHQUFHLE1BQU1GLElBQUksQ0FBQztNQUMzQixHQUFHQyxLQUFLO01BQ1IsR0FBR2dHO0lBQ0wsQ0FBQyxDQUFDO0lBRUYsT0FBTztNQUNMLEdBQUcvRixTQUFTO01BQ1osR0FBRytGLGNBQWM7TUFDakJoRSxRQUFRLEVBQUU7UUFDUixHQUFHL0IsU0FBUyxDQUFDK0IsUUFBUTtRQUNyQmlFLFNBQVMsRUFBRUEsQ0FBQSxLQUFNRDtNQUNuQixDQUFDO01BQ0Q3SixHQUFHLGVBQ0QwQyxtQ0FBQSxDQUFDa0csZ0JBQWdCO1FBQUNtQixLQUFLLEVBQUVGLGNBQWU7UUFBQTNILFFBQUEsRUFDckM0QixTQUFTLENBQUM5RDtNQUFHLENBQ0U7SUFFdEIsQ0FBQztFQUNILENBQUM7QUFDSCxDOztBQ3ZDc0Q7QUFDaUI7QUFDSTtBQUNaO0FBQ0k7QUFDSTtBQUNSO0FBQ0Y7QUFDWTtBQUNaIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGRhdGEtY2xpZW50L3JlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGRhdGEtY2xpZW50L3JlYWN0L3NzclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9jcmVhdGUgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJjcnlwdG9cIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1kb20vc2VydmVyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3NjcmlwdHMvc3NyRXJyb3JIYW5kbGVyLnRzIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9sYXlTcG91dHMudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9jc3AudHMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QvanN4LXJ1bnRpbWVcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL0RvY3VtZW50Q29tcG9uZW50LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RvY3VtZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9kYXRhQ2xpZW50LnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9hbnRkLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGFuYW5zaS9yb3V0ZXJcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJoaXN0b3J5XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9yb3V0ZXIuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3ByZWZldGNoLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9qc29uLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9hcHAuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL25hdmlnYXRvci5jb250ZXh0LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL25hdmlnYXRvci5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9pbmRleC5zZXJ2ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGRhdGEtY2xpZW50L3JlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBkYXRhLWNsaWVudC9yZWFjdC9zc3JcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwidmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mID8gKG9iaikgPT4gKE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopKSA6IChvYmopID0+IChvYmouX19wcm90b19fKTtcbnZhciBsZWFmUHJvdG90eXBlcztcbi8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLy8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLy8gbW9kZSAmIDE2OiByZXR1cm4gdmFsdWUgd2hlbiBpdCdzIFByb21pc2UtbGlrZVxuLy8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuX193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcblx0aWYobW9kZSAmIDEpIHZhbHVlID0gdGhpcyh2YWx1ZSk7XG5cdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG5cdGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUpIHtcblx0XHRpZigobW9kZSAmIDQpICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcblx0XHRpZigobW9kZSAmIDE2KSAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHZhbHVlO1xuXHR9XG5cdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG5cdHZhciBkZWYgPSB7fTtcblx0bGVhZlByb3RvdHlwZXMgPSBsZWFmUHJvdG90eXBlcyB8fCBbbnVsbCwgZ2V0UHJvdG8oe30pLCBnZXRQcm90byhbXSksIGdldFByb3RvKGdldFByb3RvKV07XG5cdGZvcih2YXIgY3VycmVudCA9IG1vZGUgJiAyICYmIHZhbHVlOyAodHlwZW9mIGN1cnJlbnQgPT0gJ29iamVjdCcgfHwgdHlwZW9mIGN1cnJlbnQgPT0gJ2Z1bmN0aW9uJykgJiYgIX5sZWFmUHJvdG90eXBlcy5pbmRleE9mKGN1cnJlbnQpOyBjdXJyZW50ID0gZ2V0UHJvdG8oY3VycmVudCkpIHtcblx0XHRPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjdXJyZW50KS5mb3JFYWNoKChrZXkpID0+IChkZWZba2V5XSA9ICgpID0+ICh2YWx1ZVtrZXldKSkpO1xuXHR9XG5cdGRlZlsnZGVmYXVsdCddID0gKCkgPT4gKHZhbHVlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBkZWYpO1xuXHRyZXR1cm4gbnM7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImNyeXB0b1wiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0LWRvbS9zZXJ2ZXJcIik7IiwiLyoqXG4gKiBVdGlsaXRpZXMgZm9yIGhhbmRsaW5nIFNTUiBlcnJvcnMgZ3JhY2VmdWxseVxuICovXG5cbi8qKlxuICogRXh0cmFjdCBIVFRQIHN0YXR1cyBjb2RlIGZyb20gYW4gZXJyb3Igb2JqZWN0LlxuICogTG9va3MgZm9yIGEgYHN0YXR1c2AgcHJvcGVydHkgdGhhdCBpcyBhIG51bWJlciBvciBwYXJzZWFibGUgc3RyaW5nLlxuICogUmV0dXJucyA1MDAgaWYgbm8gdmFsaWQgc3RhdHVzIGZvdW5kLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXJyb3JTdGF0dXMoZXJyb3I6IHVua25vd24pOiBudW1iZXIge1xuICBpZiAoZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiAnc3RhdHVzJyBpbiBlcnJvcikge1xuICAgIGNvbnN0IHN0YXR1cyA9IChlcnJvciBhcyB7IHN0YXR1czogdW5rbm93biB9KS5zdGF0dXM7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXMgPT09ICdudW1iZXInICYmIHN0YXR1cyA+PSAxMDAgJiYgc3RhdHVzIDwgNjAwKSB7XG4gICAgICByZXR1cm4gc3RhdHVzO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHN0YXR1cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHN0YXR1cywgMTApO1xuICAgICAgaWYgKCFpc05hTihwYXJzZWQpICYmIHBhcnNlZCA+PSAxMDAgJiYgcGFyc2VkIDwgNjAwKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiA1MDA7XG59XG5cbi8qKlxuICogRXNjYXBlIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHByZXZlbnQgWFNTXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVIdG1sKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0clxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7JylcbiAgICAucmVwbGFjZSgvXCIvZywgJyZxdW90OycpXG4gICAgLnJlcGxhY2UoLycvZywgJyYjMDM5OycpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlckVycm9yUGFnZU9wdGlvbnMge1xuICAvKiogU2hvdyBzdGFjayB0cmFjZSBpbiBvdXRwdXQgKi9cbiAgc2hvd1N0YWNrPzogYm9vbGVhbjtcbiAgLyoqIEFkZGl0aW9uYWwgaGludCBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgaGludD86IHN0cmluZztcbiAgLyoqIEJhZGdlIHRleHQgdG8gZGlzcGxheSAoZS5nLiwgXCJERVYgTU9ERVwiKSAqL1xuICBiYWRnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZW5kZXIgYW4gSFRNTCBlcnJvciBwYWdlIGZvciBTU1IgZmFpbHVyZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVycm9yUGFnZShcbiAgZXJyb3I6IHVua25vd24sXG4gIHVybDogc3RyaW5nLFxuICBzdGF0dXNDb2RlOiBudW1iZXIsXG4gIG9wdGlvbnM6IFJlbmRlckVycm9yUGFnZU9wdGlvbnMgPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgY29uc3Qgc3RhY2sgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHsgc2hvd1N0YWNrID0gZmFsc2UsIGhpbnQsIGJhZGdlIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiBgPCFET0NUWVBFIGh0bWw+XG48aHRtbCBsYW5nPVwiZW5cIj5cbjxoZWFkPlxuICA8bWV0YSBjaGFyc2V0PVwiVVRGLThcIj5cbiAgPG1ldGEgbmFtZT1cInZpZXdwb3J0XCIgY29udGVudD1cIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjBcIj5cbiAgPHRpdGxlPiR7c3RhdHVzQ29kZX0gLSBTZXJ2ZXIgRXJyb3I8L3RpdGxlPlxuICA8c3R5bGU+XG4gICAgKiB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgfVxuICAgIGJvZHkgeyBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7IGJhY2tncm91bmQ6ICMxYTFhMmU7IGNvbG9yOiAjZWVlOyBtaW4taGVpZ2h0OiAxMDB2aDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IHBhZGRpbmc6IDJyZW07IH1cbiAgICAuY29udGFpbmVyIHsgbWF4LXdpZHRoOiA4MDBweDsgd2lkdGg6IDEwMCU7IH1cbiAgICBoMSB7IGNvbG9yOiAjZmY2YjZiOyBmb250LXNpemU6IDIuNXJlbTsgbWFyZ2luLWJvdHRvbTogMXJlbTsgfVxuICAgIC5iYWRnZSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgYmFja2dyb3VuZDogIzRlY2RjNDsgY29sb3I6ICMxYTFhMmU7IHBhZGRpbmc6IDAuMjVyZW0gMC41cmVtOyBib3JkZXItcmFkaXVzOiA0cHg7IGZvbnQtc2l6ZTogMC43NXJlbTsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLWJvdHRvbTogMXJlbTsgfVxuICAgIC51cmwgeyBjb2xvcjogIzg4ODsgZm9udC1zaXplOiAwLjlyZW07IG1hcmdpbi1ib3R0b206IDEuNXJlbTsgd29yZC1icmVhazogYnJlYWstYWxsOyB9XG4gICAgLm1lc3NhZ2UgeyBiYWNrZ3JvdW5kOiAjMTYyMTNlOyBib3JkZXItbGVmdDogNHB4IHNvbGlkICNmZjZiNmI7IHBhZGRpbmc6IDFyZW0gMS41cmVtOyBib3JkZXItcmFkaXVzOiAwIDhweCA4cHggMDsgbWFyZ2luLWJvdHRvbTogMS41cmVtOyB9XG4gICAgLm1lc3NhZ2UgY29kZSB7IGNvbG9yOiAjZmY2YjZiOyBmb250LXNpemU6IDEuMXJlbTsgfVxuICAgIC5zdGFjayB7IGJhY2tncm91bmQ6ICMwZjBmMjM7IGJvcmRlci1yYWRpdXM6IDhweDsgcGFkZGluZzogMS41cmVtOyBvdmVyZmxvdy14OiBhdXRvOyBmb250LWZhbWlseTogJ01vbmFjbycsICdNZW5sbycsIG1vbm9zcGFjZTsgZm9udC1zaXplOiAwLjg1cmVtOyBsaW5lLWhlaWdodDogMS42OyBjb2xvcjogI2FhYTsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyB3b3JkLWJyZWFrOiBicmVhay13b3JkOyB9XG4gICAgLnJldHJ5IHsgbWFyZ2luLXRvcDogMnJlbTsgfVxuICAgIC5yZXRyeSBhIHsgY29sb3I6ICM0ZWNkYzQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgcGFkZGluZzogMC43NXJlbSAxLjVyZW07IGJvcmRlcjogMnB4IHNvbGlkICM0ZWNkYzQ7IGJvcmRlci1yYWRpdXM6IDZweDsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0cmFuc2l0aW9uOiBhbGwgMC4yczsgfVxuICAgIC5yZXRyeSBhOmhvdmVyIHsgYmFja2dyb3VuZDogIzRlY2RjNDsgY29sb3I6ICMxYTFhMmU7IH1cbiAgICAuaGludCB7IG1hcmdpbi10b3A6IDEuNXJlbTsgY29sb3I6ICM4ODg7IGZvbnQtc2l6ZTogMC45cmVtOyB9XG4gIDwvc3R5bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICR7YmFkZ2UgPyBgPHNwYW4gY2xhc3M9XCJiYWRnZVwiPiR7ZXNjYXBlSHRtbChiYWRnZSl9PC9zcGFuPmAgOiAnJ31cbiAgICA8aDE+JHtzdGF0dXNDb2RlfSAtIFNlcnZlciBFcnJvcjwvaDE+XG4gICAgPHAgY2xhc3M9XCJ1cmxcIj5FcnJvciByZW5kZXJpbmc6ICR7ZXNjYXBlSHRtbCh1cmwpfTwvcD5cbiAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPlxuICAgICAgPGNvZGU+JHtlc2NhcGVIdG1sKGVycm9yTWVzc2FnZSl9PC9jb2RlPlxuICAgIDwvZGl2PlxuICAgICR7c2hvd1N0YWNrICYmIHN0YWNrID8gYDxwcmUgY2xhc3M9XCJzdGFja1wiPiR7ZXNjYXBlSHRtbChzdGFjayl9PC9wcmU+YCA6ICcnfVxuICAgIDxkaXYgY2xhc3M9XCJyZXRyeVwiPlxuICAgICAgPGEgaHJlZj1cIiR7ZXNjYXBlSHRtbCh1cmwpfVwiPlJldHJ5PC9hPlxuICAgIDwvZGl2PlxuICAgICR7aGludCA/IGA8cCBjbGFzcz1cImhpbnRcIj4ke2VzY2FwZUh0bWwoaGludCl9PC9wPmAgOiAnJ31cbiAgPC9kaXY+XG48L2JvZHk+XG48L2h0bWw+YDtcbn1cbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyVG9QaXBlYWJsZVN0cmVhbSBhcyByZWFjdFJlbmRlciB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuXG5pbXBvcnQgeyBnZXRFcnJvclN0YXR1cyB9IGZyb20gJy4vc2NyaXB0cy9zc3JFcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZW5kZXIgfSBmcm9tICcuL3NjcmlwdHMvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGF5U3BvdXRzKFxuICBzcG91dHM6IChwcm9wczogU2VydmVyUHJvcHMpID0+IFByb21pc2U8e1xuICAgIGFwcDogSlNYLkVsZW1lbnQ7XG4gIH0+LFxuICB7XG4gICAgdGltZW91dE1TID0gMTAwMDAsXG4gICAgb25FcnJvcixcbiAgfTogeyB0aW1lb3V0TVM/OiBudW1iZXI7IG9uRXJyb3I/OiAoZXJyb3I6IHVua25vd24pID0+IHZvaWQgfSA9IHt9LFxuKSB7XG4gIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gYXN5bmMgKGNsaWVudE1hbmlmZXN0LCByZXEsIHJlcykgPT4ge1xuICAgIGNvbnN0IG5vbmNlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhcHAgfSA9IGF3YWl0IHNwb3V0cyh7IGNsaWVudE1hbmlmZXN0LCByZXEsIHJlcywgbm9uY2UgfSk7XG5cbiAgICAgIGxldCBkaWRFcnJvciA9IGZhbHNlO1xuICAgICAgbGV0IGxhc3RFcnJvcjogdW5rbm93bjtcbiAgICAgIGNvbnN0IHsgcGlwZSwgYWJvcnQgfSA9IHJlYWN0UmVuZGVyKGFwcCwge1xuICAgICAgICBub25jZSxcbiAgICAgICAgLy9ib290c3RyYXBTY3JpcHRzOiBhc3NldHMuZmlsdGVyKGFzc2V0ID0+IGFzc2V0LmVuZHNXaXRoKCcuanMnKSksXG4gICAgICAgIG9uU2hlbGxSZWFkeSgpIHtcbiAgICAgICAgICAvL21hbmFnZXJzLmZvckVhY2gobWFuYWdlciA9PiBtYW5hZ2VyLmNsZWFudXAoKSk7XG4gICAgICAgICAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgYmVmb3JlIHdlIHN0YXJ0ZWQgc3RyZWFtaW5nLCB3ZSBzZXQgdGhlIGVycm9yIGNvZGUgYXBwcm9wcmlhdGVseS5cbiAgICAgICAgICByZXMuc3RhdHVzQ29kZSA9IGRpZEVycm9yID8gZ2V0RXJyb3JTdGF0dXMobGFzdEVycm9yKSA6IDIwMDtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvblNoZWxsRXJyb3IoZTogdW5rbm93bikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBsYXN0RXJyb3IgPSBlO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gZ2V0RXJyb3JTdGF0dXMoZSk7XG4gICAgICAgICAgcGlwZShyZXMpO1xuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yKGU6IHVua25vd24pIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgbGFzdEVycm9yID0gZTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gZ2V0RXJyb3JTdGF0dXMoZSk7XG4gICAgICAgICAgLy9waXBlKHJlcyk7IFJlbW92aW5nIHRoaXMgYXZvaWRzLCBcIlJlYWN0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIHBpcGluZyB0byBvbmUgd3JpdGFibGUgc3RyZWFtLlwiXG4gICAgICAgICAgaWYgKG9uRXJyb3IpIG9uRXJyb3IoZSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIC8vIEFiYW5kb24gYW5kIHN3aXRjaCB0byBjbGllbnQgcmVuZGVyaW5nIGlmIGVub3VnaCB0aW1lIHBhc3Nlcy5cbiAgICAgIC8vIFRyeSBsb3dlcmluZyB0aGlzIHRvIHNlZSB0aGUgY2xpZW50IHJlY292ZXIuXG4gICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAoKSA9PiAoYWJvcnQgYXMgYW55KShgVGltZW91dCBvZiAke3RpbWVvdXRNU31tcyBleGNlZWRlZGApLFxuICAgICAgICB0aW1lb3V0TVMsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChvbkVycm9yKSBvbkVycm9yKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH07XG4gIHJldHVybiByZW5kZXI7XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0XCIpOyIsImV4cG9ydCBpbnRlcmZhY2UgUG9saWN5IHtcbiAgW2RpcmVjdGl2ZTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbi8vIFRPRE86IG1lbW9pemUgdGhpc1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUG9saWN5KHBvbGljeU9iajogUG9saWN5KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhwb2xpY3lPYmopXG4gICAgLm1hcChrZXkgPT4ge1xuICAgICAgY29uc3QgdmFsID1cbiAgICAgICAgQXJyYXkuaXNBcnJheShwb2xpY3lPYmpba2V5XSkgP1xuICAgICAgICAgIFsuLi5uZXcgU2V0KHBvbGljeU9ialtrZXldKS52YWx1ZXMoKV0uZmlsdGVyKHYgPT4gdikuam9pbignICcpXG4gICAgICAgIDogcG9saWN5T2JqW2tleV07XG5cbiAgICAgIC8vIG1vdmUgc3RyaWN0IGR5bmFtaWMgdG8gdGhlIGVuZCBvZiB0aGUgcG9saWN5IGlmIGl0IGV4aXN0cyB0byBiZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoIGNzcDJcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LVNlY3VyaXR5LVBvbGljeS9zY3JpcHQtc3JjI3N0cmljdC1keW5hbWljXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLmluY2x1ZGVzKFwiJ3N0cmljdC1keW5hbWljJ1wiKSkge1xuICAgICAgICBjb25zdCBuZXdWYWwgPSBgJHt2YWxcbiAgICAgICAgICAucmVwbGFjZSgvXFxzPydzdHJpY3QtZHluYW1pYydcXHM/L2dpLCAnICcpXG4gICAgICAgICAgLnRyaW0oKX0gJ3N0cmljdC1keW5hbWljJ2A7XG4gICAgICAgIHJldHVybiBgJHtrZXl9ICR7bmV3VmFsfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtrZXl9ICR7dmFsfWA7XG4gICAgfSlcbiAgICAuam9pbignOyAnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5Ob25jZShwb2xpY3lPYmo6IFBvbGljeSwgbm9uY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgaWYgKCFub25jZSkgcmV0dXJuIHBvbGljeU9iajtcbiAgY29uc3QgcG9saWN5ID0ge1xuICAgIC4uLnBvbGljeU9iaixcbiAgfTtcbiAgaWYgKHR5cGVvZiBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9PT0gJ3N0cmluZycpIHtcbiAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFtwb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgfSBlbHNlIHtcbiAgICBwb2xpY3lbJ3NjcmlwdC1zcmMnXSA9IFsuLi5wb2xpY3lbJ3NjcmlwdC1zcmMnXSwgYCdub25jZS0ke25vbmNlfSdgXTtcbiAgfVxuICByZXR1cm4gcG9saWN5O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTsiLCJ0eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhc3NldHM6IHsgaHJlZjogc3RyaW5nOyBhcz86IHN0cmluZzsgcmVsPzogc3RyaW5nIH1bXTtcbiAgaGVhZD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZXh0cmFTdHlsZTogUmVhY3QuUmVhY3ROb2RlO1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICByb290SWQ/OiBzdHJpbmc7XG4gIGNoYXJTZXQ/OiBzdHJpbmc7XG4gIGxhbmc/OiBzdHJpbmc7XG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRG9jdW1lbnQoe1xuICBhc3NldHMsXG4gIGhlYWQgPSBkZWZhdWx0SGVhZCxcbiAgY2hpbGRyZW4sXG4gIHRpdGxlLFxuICByb290SWQgPSAnYW5hbnNpLXJvb3QnLFxuICBjaGFyU2V0ID0gJ3V0Zi04JyxcbiAgc2NyaXB0cyA9IG51bGwsXG4gIGV4dHJhU3R5bGUsXG4gIGxhbmcsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxodG1sIGxhbmc9e2xhbmd9PlxuICAgICAgPGhlYWQ+XG4gICAgICAgIDxtZXRhIGNoYXJTZXQ9e2NoYXJTZXR9IC8+XG4gICAgICAgIHtoZWFkfVxuICAgICAgICB7ZXh0cmFTdHlsZX1cbiAgICAgICAge2Fzc2V0cy5tYXAoKGFzc2V0LCBpKSA9PiAoXG4gICAgICAgICAgPGxpbmsga2V5PXtpfSByZWw9XCJwcmVsb2FkXCIgey4uLmFzc2V0fSAvPlxuICAgICAgICApKX1cbiAgICAgICAgPHRpdGxlPnt0aXRsZX08L3RpdGxlPlxuICAgICAgPC9oZWFkPlxuICAgICAgPGJvZHk+XG4gICAgICAgIDxkaXYgaWQ9e3Jvb3RJZH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICB7c2NyaXB0c31cbiAgICAgICAge2Fzc2V0c1xuICAgICAgICAgIC5maWx0ZXIoKHsgaHJlZiB9KSA9PiBocmVmLmVuZHNXaXRoKCcuanMnKSlcbiAgICAgICAgICAubWFwKCh7IGhyZWYgfSwgaSkgPT4gKFxuICAgICAgICAgICAgPHNjcmlwdCBrZXk9e2l9IHNyYz17aHJlZn0gYXN5bmMgLz5cbiAgICAgICAgICApKX1cbiAgICAgIDwvYm9keT5cbiAgICA8L2h0bWw+XG4gICk7XG59XG5jb25zdCBkZWZhdWx0SGVhZCA9IChcbiAgPD5cbiAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTFcIiAvPlxuICAgIDxsaW5rXG4gICAgICByZWw9XCJzaG9ydGN1dCBpY29uXCJcbiAgICAgIGhyZWY9e2Ake3Byb2Nlc3MuZW52LldFQlBBQ0tfUFVCTElDX1BBVEggPz8gJy8nfWZhdmljb24uaWNvYH1cbiAgICAvPlxuICA8Lz5cbik7XG4iLCJpbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0YXRzQ2h1bmtHcm91cCB9IGZyb20gJ3dlYnBhY2snO1xuXG5pbXBvcnQgeyBidWlsZFBvbGljeSwgam9pbk5vbmNlLCBQb2xpY3kgfSBmcm9tICcuL2NzcC5qcyc7XG5pbXBvcnQgRG9jdW1lbnQgZnJvbSAnLi9Eb2N1bWVudENvbXBvbmVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgbWF0Y2hlZFJvdXRlczogUm91dGU8YW55PltdO1xuICB0aXRsZT86IHN0cmluZztcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudFNwb3V0KG9wdGlvbnM6IHtcbiAgaGVhZD86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgdGl0bGU6IHN0cmluZztcbiAgbGFuZz86IHN0cmluZztcbiAgcm9vdElkPzogc3RyaW5nO1xuICBjaGFyU2V0Pzogc3RyaW5nO1xuICBjc1BvbGljeT86IFBvbGljeTtcbn0pOiBTZXJ2ZXJTcG91dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIE5lZWRlZE5leHQ+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgY29uc3QgcHVibGljUGF0aCA9IHByb3BzLmNsaWVudE1hbmlmZXN0LnB1YmxpY1BhdGg7XG5cbiAgICBpZiAoXG4gICAgICBPYmplY3Qua2V5cyhwcm9wcy5jbGllbnRNYW5pZmVzdD8uZW50cnlwb2ludHMgPz8ge30pLmxlbmd0aCA8IDEgfHxcbiAgICAgIHB1YmxpY1BhdGggPT09IHVuZGVmaW5lZFxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWFuaWZlc3QgbWlzc2luZyBlbnRyaWVzIG5lZWRlZCcpO1xuXG4gICAgLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgdGhpcyBwYWNrYWdlIGZvciBidWlsZCBzdGF0cyBpbiBmdXR1cmU6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3RyZWUvbWFpbi9wYWNrYWdlcy9yZWFjdC1zZXJ2ZXItZG9tLXdlYnBhY2tcbiAgICBjb25zdCBhc3NldE1hcCA9IChhc3NldHM6IHsgbmFtZTogc3RyaW5nOyBzaXplPzogbnVtYmVyIH1bXSkgPT5cbiAgICAgIGFzc2V0cy5tYXAoKHsgbmFtZSB9KSA9PiBgJHtwdWJsaWNQYXRofSR7bmFtZX1gKTtcblxuICAgIGNvbnN0IGFzc2V0TGlzdDogc3RyaW5nW10gPSBbXTtcbiAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkuZm9yRWFjaChcbiAgICAgIGVudHJ5cG9pbnQgPT4ge1xuICAgICAgICBhc3NldExpc3QucHVzaCguLi5hc3NldE1hcChlbnRyeXBvaW50LmFzc2V0cyA/PyBbXSkpO1xuICAgICAgfSxcbiAgICApO1xuICAgIG5ldyBTZXQoXG4gICAgICBhc3NldE1hcChcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhwcm9wcy5jbGllbnRNYW5pZmVzdC5uYW1lZENodW5rR3JvdXBzID8/IHt9KVxuICAgICAgICAgIC5maWx0ZXIoKHsgbmFtZSB9KSA9PlxuICAgICAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuc29tZShyb3V0ZSA9PiBuYW1lPy5pbmNsdWRlcyhyb3V0ZS5uYW1lKSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC5mbGF0TWFwKGNodW5rID0+IFtcbiAgICAgICAgICAgIC4uLihjaHVuay5hc3NldHMgPz8gW10pLFxuICAgICAgICAgICAgLy8gYW55IGNodW5rIHByZWxvYWRzXG4gICAgICAgICAgICAuLi5jaGlsZHJlbkFzc2V0cyhjaHVuayksXG4gICAgICAgICAgXSksXG4gICAgICApLFxuICAgICkuZm9yRWFjaChhc3NldCA9PiBhc3NldExpc3QucHVzaChhc3NldCkpO1xuXG4gICAgLy8gZmluZCBhZGRpdGlvbmFsIGFzc2V0cyB0byBwcmVsb2FkIGJhc2VkIG9uIG1hdGNoZWQgcm91dGVcbiAgICBjb25zdCBhc3NldHM6IHtcbiAgICAgIGhyZWY6IHN0cmluZztcbiAgICAgIGFzPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgcmVsPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIH1bXSA9IGFzc2V0TGlzdFxuICAgICAgLmZpbHRlcihhc3NldCA9PiAhYXNzZXQuZW5kc1dpdGgoJy5ob3QtdXBkYXRlLmpzJykpXG4gICAgICAubWFwKGFzc2V0ID0+XG4gICAgICAgIGFzc2V0LmVuZHNXaXRoKCcuY3NzJykgPyB7IGhyZWY6IGFzc2V0LCByZWw6ICdzdHlsZXNoZWV0JyB9XG4gICAgICAgIDogYXNzZXQuZW5kc1dpdGgoJy5qcycpID8geyBocmVmOiBhc3NldCwgYXM6ICdzY3JpcHQnIH1cbiAgICAgICAgOiB7IGhyZWY6IGFzc2V0IH0sXG4gICAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMuY3NQb2xpY3kpIHtcbiAgICAgIGNvbnN0IGh0dHBFcXVpdiA9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgP1xuICAgICAgICAgICdDb250ZW50LVNlY3VyaXR5LVBvbGljeSdcbiAgICAgICAgOiAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknO1xuXG4gICAgICBwcm9wcy5yZXMuc2V0SGVhZGVyKFxuICAgICAgICBodHRwRXF1aXYsXG4gICAgICAgIGJ1aWxkUG9saWN5KGpvaW5Ob25jZShvcHRpb25zLmNzUG9saWN5LCBwcm9wcy5ub25jZSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiAoXG4gICAgICAgIDxEb2N1bWVudFxuICAgICAgICAgIHsuLi5vcHRpb25zfVxuICAgICAgICAgIGV4dHJhU3R5bGU9e25leHRQcm9wcy5leHRyYVN0eWxlfVxuICAgICAgICAgIHRpdGxlPXtuZXh0UHJvcHMudGl0bGUgPz8gb3B0aW9ucy50aXRsZX1cbiAgICAgICAgICBhc3NldHM9e2Fzc2V0c31cbiAgICAgICAgICByb290SWQ9e29wdGlvbnMucm9vdElkfVxuICAgICAgICAgIHNjcmlwdHM9e25leHRQcm9wcy5zY3JpcHRzfVxuICAgICAgICA+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvRG9jdW1lbnQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuQXNzZXRzKGNodW5rOiBTdGF0c0NodW5rR3JvdXApIHtcbiAgcmV0dXJuIGNodW5rLmNoaWxkcmVuID9cbiAgICAgIE9iamVjdC52YWx1ZXMoY2h1bmsuY2hpbGRyZW4pLmZsYXRNYXAocHJlbG9hZCA9PlxuICAgICAgICBwcmVsb2FkLmZsYXRNYXAoYyA9PiBjLmFzc2V0cyA/PyBbXSksXG4gICAgICApXG4gICAgOiBbXTtcbn1cbiIsImltcG9ydCB7XG4gIHR5cGUgQ29udHJvbGxlcixcbiAgdHlwZSBNYW5hZ2VyLFxuICB0eXBlIFN0YXRlLFxuICB0eXBlIFN0b3JlLFxufSBmcm9tICdAZGF0YS1jbGllbnQvcmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRhdGFDbGllbnRTcG91dChcbiAgb3B0aW9uczoge1xuICAgIGdldE1hbmFnZXJzPzogKCkgPT4gTWFuYWdlcltdO1xuICB9ID0ge30sXG4pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHsgY29udHJvbGxlcjogQ29udHJvbGxlciB9ICYgeyBzdG9yZTogU3RvcmU8U3RhdGU8dW5rbm93bj4+IH0sXG4gIHsgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjsgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdIH1cbj4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlcnMgPSBvcHRpb25zPy5nZXRNYW5hZ2Vycz8uKCkgPz8gW1xuICAgICAgbmV3IChhd2FpdCBpbXBvcnQoJ0BkYXRhLWNsaWVudC9yZWFjdCcpKS5OZXR3b3JrTWFuYWdlcigpLFxuICAgIF07XG4gICAgY29uc3QgeyBjcmVhdGVQZXJzaXN0ZWRTdG9yZSB9ID0gYXdhaXQgaW1wb3J0KCdAZGF0YS1jbGllbnQvcmVhY3Qvc3NyJyk7XG4gICAgY29uc3QgW1NlcnZlckRhdGFQcm92aWRlciwgdXNlUmVhZHlDYWNoZVN0YXRlLCBjb250cm9sbGVyLCBzdG9yZV0gPVxuICAgICAgY3JlYXRlUGVyc2lzdGVkU3RvcmUobWFuYWdlcnMpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dCh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBzdG9yZSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgaW5pdERhdGE6IHtcbiAgICAgICAgLi4ubmV4dFByb3BzLmluaXREYXRhLFxuICAgICAgICBkYXRhY2xpZW50OiB1c2VSZWFkeUNhY2hlU3RhdGUsXG4gICAgICB9LFxuICAgICAgYXBwOiA8U2VydmVyRGF0YVByb3ZpZGVyPntuZXh0UHJvcHMuYXBwfTwvU2VydmVyRGF0YVByb3ZpZGVyPixcbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIG9ubHkgaW5qZWN0IGluIG5leHQgYW5kIG5vdCBoYXZlIHRvIGFsc28gcHV0IGhlcmVcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgICBzdG9yZSxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IHR5cGUgSlNYIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xuICBleHRyYVN0eWxlPzogUmVhY3QuUmVhY3ROb2RlW107XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbnRkU3BvdXQoKTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZUNhY2hlLCBleHRyYWN0U3R5bGUsIFN0eWxlUHJvdmlkZXIgfSA9IGF3YWl0IGltcG9ydChcbiAgICAgIC8qIHdlYnBhY2tJZ25vcmU6IHRydWUgKi8gJ0BhbnQtZGVzaWduL2Nzc2luanMnXG4gICAgKTtcbiAgICBjb25zdCBjYWNoZSA9IGNyZWF0ZUNhY2hlKCk7XG4gICAgY29uc3QgQW50ZFNoZWV0cyA9ICgpOiBKU1guRWxlbWVudCA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogYDwvc2NyaXB0PiR7ZXh0cmFjdFN0eWxlKGNhY2hlKX08c2NyaXB0PmAsXG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgY29uc3Qgc2NyaXB0czogUmVhY3QuUmVhY3ROb2RlW10gPSBuZXh0UHJvcHMuc2NyaXB0cyA/PyBbXTtcblxuICAgIC8vIHVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byBpbmplY3QgdGhpcyBhZnRlciB0aGUgZW50aXJlIGNvbnRlbnQgaGFzIHN0cmVhbWVkIGluIG9yIGl0IGRvZXNuJ3QgY29ycmVjdGx5IHBvcHVsYXRlXG4gICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vYW50LWRlc2lnbi9jc3NpbmpzL2lzc3Vlcy83OVxuICAgIHNjcmlwdHMucHVzaCg8QW50ZFNoZWV0cyBrZXk9XCJhbnRkLXNoZWV0c1wiIC8+KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxTdHlsZVByb3ZpZGVyIGNhY2hlPXtjYWNoZX0+e25leHRQcm9wcy5hcHB9PC9TdHlsZVByb3ZpZGVyPixcbiAgICAgIHNjcmlwdHMsXG4gICAgfTtcbiAgfTtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQGFuYW5zaS9yb3V0ZXJcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJoaXN0b3J5XCIpOyIsImltcG9ydCB7IFJvdXRlLCBSb3V0ZVByb3ZpZGVyLCBSb3V0ZUNvbnRyb2xsZXIgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5IH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJvdXRlciwgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcm91dGVyU3BvdXQ8UmVzb2x2ZVdpdGg+KG9wdGlvbnM6IHtcbiAgcmVzb2x2ZVdpdGg/OiBhbnk7XG4gIHVzZVJlc29sdmVXaXRoOiAoKSA9PiBSZXNvbHZlV2l0aDtcbiAgY3JlYXRlUm91dGVyOiBDcmVhdGVSb3V0ZXI8UmVzb2x2ZVdpdGg+O1xufSk6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAge1xuICAgIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdO1xuICAgIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xuICB9ICYge1xuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PjtcbiAgfVxuPiB7XG4gIGNvbnN0IGNyZWF0ZVJvdXRlQ29tcG9uZW50ID0gKFxuICAgIHJvdXRlcjogUm91dGVDb250cm9sbGVyPFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+PixcbiAgKSA9PlxuICAgIGZ1bmN0aW9uIFJvdXRlcih7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gICAgICBjb25zdCByZXNvbHZlV2l0aCA9IG9wdGlvbnMudXNlUmVzb2x2ZVdpdGgoKTtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFJvdXRlUHJvdmlkZXIgcm91dGVyPXtyb3V0ZXJ9IHJlc29sdmVXaXRoPXtyZXNvbHZlV2l0aH0+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L1JvdXRlUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH07XG5cbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHVybCA9IHByb3BzLnJlcS51cmwgfHwgJyc7XG4gICAgY29uc3QgcGFydHMgPSB1cmwuc3BsaXQoJz8nLCAyKTtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhcnRzLmxlbmd0aCA8IDIgPyAnJyA6IHBhcnRzWzFdKTtcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRpb25zLmNyZWF0ZVJvdXRlcihcbiAgICAgIGNyZWF0ZU1lbW9yeUhpc3RvcnkoeyBpbml0aWFsRW50cmllczogW3VybF0gfSksXG4gICAgKTtcbiAgICBjb25zdCBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSZXNvbHZlV2l0aD5bXSA9IHJvdXRlci5nZXRNYXRjaGVkUm91dGVzKHVybCk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IFJvdXRlciA9IGNyZWF0ZVJvdXRlQ29tcG9uZW50KHJvdXRlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8Um91dGVyPntuZXh0UHJvcHMuYXBwfTwvUm91dGVyPixcbiAgICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgaG93IHRvIG9ubHkgaW5qZWN0IGluIG5leHQgYW5kIG5vdCBoYXZlIHRvIGFsc28gcHV0IGhlcmVcbiAgICAgIG1hdGNoZWRSb3V0ZXMsXG4gICAgICByb3V0ZXIsXG4gICAgICBzZWFyY2hQYXJhbXMsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuYW5zaS9yb3V0ZXInO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVQcm9wcywgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+ID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxSb3V0ZVdpdGg+W107XG4gIHNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zO1xufSAmIFJlc29sdmVQcm9wcztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlZmV0Y2hTcG91dDxGIGV4dGVuZHMgc3RyaW5nPihmaWVsZDogRikge1xuICByZXR1cm4gZnVuY3Rpb24gPFxuICAgIFJvdXRlV2l0aCxcbiAgICBOIGV4dGVuZHMgTmVlZGVkUHJvcHM8Um91dGVXaXRoPixcbiAgICBJIGV4dGVuZHMgU2VydmVyUHJvcHMsXG4gID4oXG4gICAgbmV4dDogKHByb3BzOiBJKSA9PiBQcm9taXNlPFxuICAgICAge1xuICAgICAgICBbSyBpbiBGXTogUm91dGVXaXRoO1xuICAgICAgfSAmIE5cbiAgICA+LFxuICApIHtcbiAgICByZXR1cm4gYXN5bmMgKHByb3BzOiBJKSA9PiB7XG4gICAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9GZXRjaDogUHJvbWlzZTx1bmtub3duPltdID0gW107XG4gICAgICAgIG5leHRQcm9wcy5tYXRjaGVkUm91dGVzLmZvckVhY2gocm91dGUgPT4ge1xuICAgICAgICAgIC8vIFByZWxvYWQgbGF6eSBjb21wb25lbnQgc28gaXQncyByZWFkeSBmb3IgU1NSIHJlbmRlclxuICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGUuY29tcG9uZW50Py5wcmVsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0b0ZldGNoLnB1c2gocm91dGUuY29tcG9uZW50LnByZWxvYWQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygcm91dGUucmVzb2x2ZURhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRvRmV0Y2gucHVzaChcbiAgICAgICAgICAgICAgcm91dGUucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzW2ZpZWxkXSxcbiAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMuc2VhcmNoUGFyYW1zLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh0b0ZldGNoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXh0UHJvcHM7XG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBTdXNwZW5zZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgTmVlZGVkTmV4dFxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHByb3BzKTtcblxuICAgIGNvbnN0IHNjcmlwdHM6IFJlYWN0LlJlYWN0Tm9kZVtdID0gbmV4dFByb3BzLnNjcmlwdHMgPz8gW107XG5cbiAgICBPYmplY3QuZW50cmllcyhuZXh0UHJvcHMuaW5pdERhdGEgPz8ge30pLmZvckVhY2goKFtrZXksIHVzZURhdGFdKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgY29uc3QgU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB1c2VEYXRhKCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW5jb2RlZCA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8c2NyaXB0XG4gICAgICAgICAgICAgIGlkPXtnbG9iYWxJZH1cbiAgICAgICAgICAgICAgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgIF9faHRtbDogZW5jb2RlZCxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgbm9uY2U9e3Byb3BzLm5vbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gVE9ETzogVXNlIHVuaWZpZWQgbG9nZ2luZ1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHNlcmlhbGl6aW5nIGpzb24gZm9yICR7a2V5fWApO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzY3JpcHRzLnB1c2goXG4gICAgICAgIDxTdXNwZW5zZSBrZXk9e2dsb2JhbElkfT5cbiAgICAgICAgICA8U2NyaXB0IC8+XG4gICAgICAgIDwvU3VzcGVuc2U+LFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBzY3JpcHRzLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuY29uc3QgYXBwU3BvdXQgPVxuICAoYXBwOiBKU1guRWxlbWVudCkgPT5cbiAgPFAgZXh0ZW5kcyBTZXJ2ZXJQcm9wcz4ocHJvcHM6IFApID0+XG4gICAgUHJvbWlzZS5yZXNvbHZlKHsgLi4ucHJvcHMsIGFwcCB9KTtcblxuZXhwb3J0IGRlZmF1bHQgYXBwU3BvdXQ7XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRvclByb3BlcnRpZXMge1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICBsYW5ndWFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgTmF2aWdhdG9yQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8TmF2aWdhdG9yUHJvcGVydGllcyB8IHVuZGVmaW5lZD4oXG4gIHVuZGVmaW5lZCxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VOYXZpZ2F0b3IoKTogTmF2aWdhdG9yUHJvcGVydGllcyB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KE5hdmlnYXRvckNvbnRleHQpO1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCd1c2VOYXZpZ2F0b3IgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIE5hdmlnYXRvclByb3ZpZGVyJyk7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFjY2VwdExhbmd1YWdlKGhlYWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkKToge1xuICBsYW5ndWFnZTogc3RyaW5nO1xuICBsYW5ndWFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufSB7XG4gIGlmICghaGVhZGVyKSB7XG4gICAgcmV0dXJuIHsgbGFuZ3VhZ2U6ICdlbicsIGxhbmd1YWdlczogWydlbiddIH07XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSBoZWFkZXJcbiAgICAuc3BsaXQoJywnKVxuICAgIC5tYXAocGFydCA9PiB7XG4gICAgICBjb25zdCBbbGFuZywgcVBhcnRdID0gcGFydC50cmltKCkuc3BsaXQoJzsnKTtcbiAgICAgIGNvbnN0IHEgPSBxUGFydCA/IHBhcnNlRmxvYXQocVBhcnQucmVwbGFjZSgncT0nLCAnJykpIDogMTtcbiAgICAgIHJldHVybiB7IGxhbmc6IGxhbmcudHJpbSgpLCBxIH07XG4gICAgfSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5xIC0gYS5xKVxuICAgIC5tYXAoKHsgbGFuZyB9KSA9PiBsYW5nKTtcblxuICByZXR1cm4ge1xuICAgIGxhbmd1YWdlOiBwYXJzZWRbMF0gPz8gJ2VuJyxcbiAgICBsYW5ndWFnZXM6IHBhcnNlZC5sZW5ndGggPiAwID8gcGFyc2VkIDogWydlbiddLFxuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgTmF2aWdhdG9yQ29udGV4dCwgcGFyc2VBY2NlcHRMYW5ndWFnZSB9IGZyb20gJy4vbmF2aWdhdG9yLmNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZE5leHQgPSB7XG4gIGluaXREYXRhPzogUmVjb3JkPHN0cmluZywgKCkgPT4gdW5rbm93bj47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuYXZpZ2F0b3JTcG91dCgpOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHsgbGFuZ3VhZ2U6IHN0cmluZzsgbGFuZ3VhZ2VzOiByZWFkb25seSBzdHJpbmdbXSB9LFxuICBOZWVkZWROZXh0XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGFjY2VwdExhbmd1YWdlID0gcHJvcHMucmVxLmhlYWRlcnNbJ2FjY2VwdC1sYW5ndWFnZSddO1xuICAgIGNvbnN0IGhlYWRlciA9XG4gICAgICB0eXBlb2YgYWNjZXB0TGFuZ3VhZ2UgPT09ICdzdHJpbmcnID8gYWNjZXB0TGFuZ3VhZ2UgOiBhY2NlcHRMYW5ndWFnZT8uWzBdO1xuICAgIGNvbnN0IG5hdmlnYXRvclByb3BzID0gcGFyc2VBY2NlcHRMYW5ndWFnZShoZWFkZXIpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dCh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIC4uLm5hdmlnYXRvclByb3BzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIC4uLm5hdmlnYXRvclByb3BzLFxuICAgICAgaW5pdERhdGE6IHtcbiAgICAgICAgLi4ubmV4dFByb3BzLmluaXREYXRhLFxuICAgICAgICBuYXZpZ2F0b3I6ICgpID0+IG5hdmlnYXRvclByb3BzLFxuICAgICAgfSxcbiAgICAgIGFwcDogKFxuICAgICAgICA8TmF2aWdhdG9yQ29udGV4dCB2YWx1ZT17bmF2aWdhdG9yUHJvcHN9PlxuICAgICAgICAgIHtuZXh0UHJvcHMuYXBwfVxuICAgICAgICA8L05hdmlnYXRvckNvbnRleHQ+XG4gICAgICApLFxuICAgIH07XG4gIH07XG59XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIGxheVNwb3V0cyB9IGZyb20gJy4vbGF5U3BvdXRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGRhdGFDbGllbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RhdGFDbGllbnQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYW50ZFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYW50ZC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByb3V0ZXJTcG91dCB9IGZyb20gJy4vc3BvdXRzL3JvdXRlci5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwcmVmZXRjaFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcHJlZmV0Y2guc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSlNPTlNwb3V0IH0gZnJvbSAnLi9zcG91dHMvanNvbi5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBTcG91dCB9IGZyb20gJy4vc3BvdXRzL2FwcC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBuYXZpZ2F0b3JTcG91dCB9IGZyb20gJy4vc3BvdXRzL25hdmlnYXRvci5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgdXNlTmF2aWdhdG9yIH0gZnJvbSAnLi9zcG91dHMvbmF2aWdhdG9yLmNvbnRleHQuanMnO1xuZXhwb3J0IHR5cGUgeyBOYXZpZ2F0b3JQcm9wZXJ0aWVzIH0gZnJvbSAnLi9zcG91dHMvbmF2aWdhdG9yLmNvbnRleHQuanMnO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgYXMgU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjcmlwdHMvdHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbImdldEVycm9yU3RhdHVzIiwiZXJyb3IiLCJzdGF0dXMiLCJwYXJzZWQiLCJwYXJzZUludCIsImlzTmFOIiwiZXNjYXBlSHRtbCIsInN0ciIsInJlcGxhY2UiLCJyZW5kZXJFcnJvclBhZ2UiLCJ1cmwiLCJzdGF0dXNDb2RlIiwib3B0aW9ucyIsImVycm9yTWVzc2FnZSIsIkVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsInN0YWNrIiwidW5kZWZpbmVkIiwic2hvd1N0YWNrIiwiaGludCIsImJhZGdlIiwiY3J5cHRvIiwicmVuZGVyVG9QaXBlYWJsZVN0cmVhbSIsInJlYWN0UmVuZGVyIiwibGF5U3BvdXRzIiwic3BvdXRzIiwidGltZW91dE1TIiwib25FcnJvciIsInJlbmRlciIsImNsaWVudE1hbmlmZXN0IiwicmVxIiwicmVzIiwibm9uY2UiLCJyYW5kb21CeXRlcyIsInRvU3RyaW5nIiwiYXBwIiwiZGlkRXJyb3IiLCJsYXN0RXJyb3IiLCJwaXBlIiwiYWJvcnQiLCJvblNoZWxsUmVhZHkiLCJzZXRIZWFkZXIiLCJvblNoZWxsRXJyb3IiLCJlIiwiY29uc29sZSIsInNldFRpbWVvdXQiLCJidWlsZFBvbGljeSIsInBvbGljeU9iaiIsIk9iamVjdCIsImtleXMiLCJtYXAiLCJrZXkiLCJ2YWwiLCJBcnJheSIsImlzQXJyYXkiLCJTZXQiLCJ2YWx1ZXMiLCJmaWx0ZXIiLCJ2Iiwiam9pbiIsImluY2x1ZGVzIiwibmV3VmFsIiwidHJpbSIsImpvaW5Ob25jZSIsInBvbGljeSIsIkRvY3VtZW50IiwiYXNzZXRzIiwiaGVhZCIsImRlZmF1bHRIZWFkIiwiY2hpbGRyZW4iLCJ0aXRsZSIsInJvb3RJZCIsImNoYXJTZXQiLCJzY3JpcHRzIiwiZXh0cmFTdHlsZSIsImxhbmciLCJfanN4cyIsIl9qc3giLCJhc3NldCIsImkiLCJyZWwiLCJpZCIsImhyZWYiLCJlbmRzV2l0aCIsInNyYyIsImFzeW5jIiwiX0ZyYWdtZW50IiwibmFtZSIsImNvbnRlbnQiLCJwcm9jZXNzIiwiZW52IiwiV0VCUEFDS19QVUJMSUNfUEFUSCIsIlJlYWN0IiwianN4IiwiRG9jdW1lbnRTcG91dCIsIm5leHQiLCJwcm9wcyIsIm5leHRQcm9wcyIsInB1YmxpY1BhdGgiLCJlbnRyeXBvaW50cyIsImxlbmd0aCIsImFzc2V0TWFwIiwiYXNzZXRMaXN0IiwiZm9yRWFjaCIsImVudHJ5cG9pbnQiLCJwdXNoIiwibmFtZWRDaHVua0dyb3VwcyIsIm1hdGNoZWRSb3V0ZXMiLCJzb21lIiwicm91dGUiLCJmbGF0TWFwIiwiY2h1bmsiLCJjaGlsZHJlbkFzc2V0cyIsImFzIiwiY3NQb2xpY3kiLCJodHRwRXF1aXYiLCJOT0RFX0VOViIsInByZWxvYWQiLCJjIiwiZGF0YUNsaWVudFNwb3V0IiwibWFuYWdlcnMiLCJnZXRNYW5hZ2VycyIsIk5ldHdvcmtNYW5hZ2VyIiwiY3JlYXRlUGVyc2lzdGVkU3RvcmUiLCJTZXJ2ZXJEYXRhUHJvdmlkZXIiLCJ1c2VSZWFkeUNhY2hlU3RhdGUiLCJjb250cm9sbGVyIiwic3RvcmUiLCJpbml0RGF0YSIsImRhdGFjbGllbnQiLCJhbnRkU3BvdXQiLCJjcmVhdGVDYWNoZSIsImV4dHJhY3RTdHlsZSIsIlN0eWxlUHJvdmlkZXIiLCJjYWNoZSIsIkFudGRTaGVldHMiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIlJvdXRlUHJvdmlkZXIiLCJjcmVhdGVNZW1vcnlIaXN0b3J5Iiwicm91dGVyU3BvdXQiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsInJlc29sdmVXaXRoIiwidXNlUmVzb2x2ZVdpdGgiLCJwYXJ0cyIsInNwbGl0Iiwic2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiY3JlYXRlUm91dGVyIiwiaW5pdGlhbEVudHJpZXMiLCJnZXRNYXRjaGVkUm91dGVzIiwicHJlZmV0Y2hTcG91dCIsImZpZWxkIiwidG9GZXRjaCIsImNvbXBvbmVudCIsInJlc29sdmVEYXRhIiwiUHJvbWlzZSIsImFsbCIsIlN1c3BlbnNlIiwiSlNPTlNwb3V0IiwiZW50cmllcyIsInVzZURhdGEiLCJnbG9iYWxJZCIsIlNjcmlwdCIsImRhdGEiLCJlbmNvZGVkIiwiSlNPTiIsInN0cmluZ2lmeSIsInR5cGUiLCJhcHBTcG91dCIsInJlc29sdmUiLCJjcmVhdGVDb250ZXh0IiwidXNlQ29udGV4dCIsIk5hdmlnYXRvckNvbnRleHQiLCJ1c2VOYXZpZ2F0b3IiLCJjb250ZXh0IiwicGFyc2VBY2NlcHRMYW5ndWFnZSIsImhlYWRlciIsImxhbmd1YWdlIiwibGFuZ3VhZ2VzIiwicGFydCIsInFQYXJ0IiwicSIsInBhcnNlRmxvYXQiLCJzb3J0IiwiYSIsImIiLCJuYXZpZ2F0b3JTcG91dCIsImFjY2VwdExhbmd1YWdlIiwiaGVhZGVycyIsIm5hdmlnYXRvclByb3BzIiwibmF2aWdhdG9yIiwidmFsdWUiLCJkZWZhdWx0IiwiZG9jdW1lbnRTcG91dCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
|
|
673
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFDM0JtTCxTQUFTLEVBQUVuTCxNQUFNLENBQUNrRyxNQUFNLEdBQUcsQ0FBQyxHQUFHbEcsTUFBTSxHQUFHLENBQUMsSUFBSTtFQUMvQyxDQUFDO0FBQ0gsQzs7QUN6QzBCO0FBRXFEO0FBQUE7QUFPaEUsU0FBUzJMLGNBQWNBLENBQUEsRUFJcEM7RUFDQSxPQUFPOUYsSUFBSSxJQUFJLE1BQU1DLEtBQUssSUFBSTtJQUM1QixNQUFNOEYsY0FBYyxHQUFHOUYsS0FBSyxDQUFDbEUsR0FBRyxDQUFDaUssT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQzNELE1BQU1aLE1BQU0sR0FDVixPQUFPVyxjQUFjLEtBQUssUUFBUSxHQUFHQSxjQUFjLEdBQUdBLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDM0UsTUFBTUUsY0FBYyxHQUFHZCxtQkFBbUIsQ0FBQ0MsTUFBTSxDQUFDO0lBRWxELE1BQU1sRixTQUFTLEdBQUcsTUFBTUYsSUFBSSxDQUFDO01BQzNCLEdBQUdDLEtBQUs7TUFDUixHQUFHZ0c7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPO01BQ0wsR0FBRy9GLFNBQVM7TUFDWixHQUFHK0YsY0FBYztNQUNqQmhFLFFBQVEsRUFBRTtRQUNSLEdBQUcvQixTQUFTLENBQUMrQixRQUFRO1FBQ3JCaUUsU0FBUyxFQUFFQSxDQUFBLEtBQU1EO01BQ25CLENBQUM7TUFDRDdKLEdBQUcsZUFDRDBDLG1DQUFBLENBQUNrRyxnQkFBZ0I7UUFBQ21CLEtBQUssRUFBRUYsY0FBZTtRQUFBM0gsUUFBQSxFQUNyQzRCLFNBQVMsQ0FBQzlEO01BQUcsQ0FDRTtJQUV0QixDQUFDO0VBQ0gsQ0FBQztBQUNILEM7O0FDdkNzRDtBQUNpQjtBQUNJO0FBQ1o7QUFDSTtBQUNJO0FBQ1I7QUFDRjtBQUNZO0FBQ1oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAZGF0YS1jbGllbnQvcmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAZGF0YS1jbGllbnQvcmVhY3Qvc3NyXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcImNyeXB0b1wiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWRvbS9zZXJ2ZXJcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc2NyaXB0cy9zc3JFcnJvckhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2xheVNwb3V0cy50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2NzcC50cyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC9qc3gtcnVudGltZVwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvRG9jdW1lbnRDb21wb25lbnQudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvZG9jdW1lbnQuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RhdGFDbGllbnQuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FudGQuc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAYW5hbnNpL3JvdXRlclwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS9leHRlcm5hbCBjb21tb25qcyBcImhpc3RvcnlcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3JvdXRlci5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvcHJlZmV0Y2guc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2pzb24uc2VydmVyLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FwcC5zZXJ2ZXIudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvbmF2aWdhdG9yLmNvbnRleHQudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvbmF2aWdhdG9yLnNlcnZlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2luZGV4LnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAZGF0YS1jbGllbnQvcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGRhdGEtY2xpZW50L3JlYWN0L3NzclwiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7ICh0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyB8fCB0eXBlb2YgY3VycmVudCA9PSAnZnVuY3Rpb24nKSAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG5cdH1cblx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG5cdHJldHVybiBucztcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiY3J5cHRvXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QtZG9tL3NlcnZlclwiKTsiLCIvKipcbiAqIFV0aWxpdGllcyBmb3IgaGFuZGxpbmcgU1NSIGVycm9ycyBncmFjZWZ1bGx5XG4gKi9cblxuLyoqXG4gKiBFeHRyYWN0IEhUVFAgc3RhdHVzIGNvZGUgZnJvbSBhbiBlcnJvciBvYmplY3QuXG4gKiBMb29rcyBmb3IgYSBgc3RhdHVzYCBwcm9wZXJ0eSB0aGF0IGlzIGEgbnVtYmVyIG9yIHBhcnNlYWJsZSBzdHJpbmcuXG4gKiBSZXR1cm5zIDUwMCBpZiBubyB2YWxpZCBzdGF0dXMgZm91bmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFcnJvclN0YXR1cyhlcnJvcjogdW5rbm93bik6IG51bWJlciB7XG4gIGlmIChlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnICYmICdzdGF0dXMnIGluIGVycm9yKSB7XG4gICAgY29uc3Qgc3RhdHVzID0gKGVycm9yIGFzIHsgc3RhdHVzOiB1bmtub3duIH0pLnN0YXR1cztcbiAgICBpZiAodHlwZW9mIHN0YXR1cyA9PT0gJ251bWJlcicgJiYgc3RhdHVzID49IDEwMCAmJiBzdGF0dXMgPCA2MDApIHtcbiAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygc3RhdHVzID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VJbnQoc3RhdHVzLCAxMCk7XG4gICAgICBpZiAoIWlzTmFOKHBhcnNlZCkgJiYgcGFyc2VkID49IDEwMCAmJiBwYXJzZWQgPCA2MDApIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIDUwMDtcbn1cblxuLyoqXG4gKiBFc2NhcGUgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gcHJldmVudCBYU1NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUh0bWwoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyXG4gICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAucmVwbGFjZSgvJy9nLCAnJiMwMzk7Jyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyRXJyb3JQYWdlT3B0aW9ucyB7XG4gIC8qKiBTaG93IHN0YWNrIHRyYWNlIGluIG91dHB1dCAqL1xuICBzaG93U3RhY2s/OiBib29sZWFuO1xuICAvKiogQWRkaXRpb25hbCBoaW50IG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBoaW50Pzogc3RyaW5nO1xuICAvKiogQmFkZ2UgdGV4dCB0byBkaXNwbGF5IChlLmcuLCBcIkRFViBNT0RFXCIpICovXG4gIGJhZGdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbmRlciBhbiBIVE1MIGVycm9yIHBhZ2UgZm9yIFNTUiBmYWlsdXJlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXJyb3JQYWdlKFxuICBlcnJvcjogdW5rbm93bixcbiAgdXJsOiBzdHJpbmcsXG4gIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgb3B0aW9uczogUmVuZGVyRXJyb3JQYWdlT3B0aW9ucyA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICBjb25zdCBzdGFjayA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcbiAgY29uc3QgeyBzaG93U3RhY2sgPSBmYWxzZSwgaGludCwgYmFkZ2UgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIGA8IURPQ1RZUEUgaHRtbD5cbjxodG1sIGxhbmc9XCJlblwiPlxuPGhlYWQ+XG4gIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMFwiPlxuICA8dGl0bGU+JHtzdGF0dXNDb2RlfSAtIFNlcnZlciBFcnJvcjwvdGl0bGU+XG4gIDxzdHlsZT5cbiAgICAqIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB9XG4gICAgYm9keSB7IGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsgYmFja2dyb3VuZDogIzFhMWEyZTsgY29sb3I6ICNlZWU7IG1pbi1oZWlnaHQ6IDEwMHZoOyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgcGFkZGluZzogMnJlbTsgfVxuICAgIC5jb250YWluZXIgeyBtYXgtd2lkdGg6IDgwMHB4OyB3aWR0aDogMTAwJTsgfVxuICAgIGgxIHsgY29sb3I6ICNmZjZiNmI7IGZvbnQtc2l6ZTogMi41cmVtOyBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gICAgLmJhZGdlIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyBiYWNrZ3JvdW5kOiAjNGVjZGM0OyBjb2xvcjogIzFhMWEyZTsgcGFkZGluZzogMC4yNXJlbSAwLjVyZW07IGJvcmRlci1yYWRpdXM6IDRweDsgZm9udC1zaXplOiAwLjc1cmVtOyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxcmVtOyB9XG4gICAgLnVybCB7IGNvbG9yOiAjODg4OyBmb250LXNpemU6IDAuOXJlbTsgbWFyZ2luLWJvdHRvbTogMS41cmVtOyB3b3JkLWJyZWFrOiBicmVhay1hbGw7IH1cbiAgICAubWVzc2FnZSB7IGJhY2tncm91bmQ6ICMxNjIxM2U7IGJvcmRlci1sZWZ0OiA0cHggc29saWQgI2ZmNmI2YjsgcGFkZGluZzogMXJlbSAxLjVyZW07IGJvcmRlci1yYWRpdXM6IDAgOHB4IDhweCAwOyBtYXJnaW4tYm90dG9tOiAxLjVyZW07IH1cbiAgICAubWVzc2FnZSBjb2RlIHsgY29sb3I6ICNmZjZiNmI7IGZvbnQtc2l6ZTogMS4xcmVtOyB9XG4gICAgLnN0YWNrIHsgYmFja2dyb3VuZDogIzBmMGYyMzsgYm9yZGVyLXJhZGl1czogOHB4OyBwYWRkaW5nOiAxLjVyZW07IG92ZXJmbG93LXg6IGF1dG87IGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ01lbmxvJywgbW9ub3NwYWNlOyBmb250LXNpemU6IDAuODVyZW07IGxpbmUtaGVpZ2h0OiAxLjY7IGNvbG9yOiAjYWFhOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7IH1cbiAgICAucmV0cnkgeyBtYXJnaW4tdG9wOiAycmVtOyB9XG4gICAgLnJldHJ5IGEgeyBjb2xvcjogIzRlY2RjNDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBwYWRkaW5nOiAwLjc1cmVtIDEuNXJlbTsgYm9yZGVyOiAycHggc29saWQgIzRlY2RjNDsgYm9yZGVyLXJhZGl1czogNnB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHRyYW5zaXRpb246IGFsbCAwLjJzOyB9XG4gICAgLnJldHJ5IGE6aG92ZXIgeyBiYWNrZ3JvdW5kOiAjNGVjZGM0OyBjb2xvcjogIzFhMWEyZTsgfVxuICAgIC5oaW50IHsgbWFyZ2luLXRvcDogMS41cmVtOyBjb2xvcjogIzg4ODsgZm9udC1zaXplOiAwLjlyZW07IH1cbiAgPC9zdHlsZT5cbjwvaGVhZD5cbjxib2R5PlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgJHtiYWRnZSA/IGA8c3BhbiBjbGFzcz1cImJhZGdlXCI+JHtlc2NhcGVIdG1sKGJhZGdlKX08L3NwYW4+YCA6ICcnfVxuICAgIDxoMT4ke3N0YXR1c0NvZGV9IC0gU2VydmVyIEVycm9yPC9oMT5cbiAgICA8cCBjbGFzcz1cInVybFwiPkVycm9yIHJlbmRlcmluZzogJHtlc2NhcGVIdG1sKHVybCl9PC9wPlxuICAgIDxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+XG4gICAgICA8Y29kZT4ke2VzY2FwZUh0bWwoZXJyb3JNZXNzYWdlKX08L2NvZGU+XG4gICAgPC9kaXY+XG4gICAgJHtzaG93U3RhY2sgJiYgc3RhY2sgPyBgPHByZSBjbGFzcz1cInN0YWNrXCI+JHtlc2NhcGVIdG1sKHN0YWNrKX08L3ByZT5gIDogJyd9XG4gICAgPGRpdiBjbGFzcz1cInJldHJ5XCI+XG4gICAgICA8YSBocmVmPVwiJHtlc2NhcGVIdG1sKHVybCl9XCI+UmV0cnk8L2E+XG4gICAgPC9kaXY+XG4gICAgJHtoaW50ID8gYDxwIGNsYXNzPVwiaGludFwiPiR7ZXNjYXBlSHRtbChoaW50KX08L3A+YCA6ICcnfVxuICA8L2Rpdj5cbjwvYm9keT5cbjwvaHRtbD5gO1xufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXJUb1BpcGVhYmxlU3RyZWFtIGFzIHJlYWN0UmVuZGVyIH0gZnJvbSAncmVhY3QtZG9tL3NlcnZlcic7XG5cbmltcG9ydCB7IGdldEVycm9yU3RhdHVzIH0gZnJvbSAnLi9zY3JpcHRzL3NzckVycm9ySGFuZGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbmRlciB9IGZyb20gJy4vc2NyaXB0cy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYXlTcG91dHMoXG4gIHNwb3V0czogKHByb3BzOiBTZXJ2ZXJQcm9wcykgPT4gUHJvbWlzZTx7XG4gICAgYXBwOiBKU1guRWxlbWVudDtcbiAgfT4sXG4gIHtcbiAgICB0aW1lb3V0TVMgPSAxMDAwMCxcbiAgICBvbkVycm9yLFxuICB9OiB7IHRpbWVvdXRNUz86IG51bWJlcjsgb25FcnJvcj86IChlcnJvcjogdW5rbm93bikgPT4gdm9pZCB9ID0ge30sXG4pIHtcbiAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSBhc3luYyAoY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzKSA9PiB7XG4gICAgY29uc3Qgbm9uY2UgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGFwcCB9ID0gYXdhaXQgc3BvdXRzKHsgY2xpZW50TWFuaWZlc3QsIHJlcSwgcmVzLCBub25jZSB9KTtcblxuICAgICAgbGV0IGRpZEVycm9yID0gZmFsc2U7XG4gICAgICBsZXQgbGFzdEVycm9yOiB1bmtub3duO1xuICAgICAgY29uc3QgeyBwaXBlLCBhYm9ydCB9ID0gcmVhY3RSZW5kZXIoYXBwLCB7XG4gICAgICAgIG5vbmNlLFxuICAgICAgICAvL2Jvb3RzdHJhcFNjcmlwdHM6IGFzc2V0cy5maWx0ZXIoYXNzZXQgPT4gYXNzZXQuZW5kc1dpdGgoJy5qcycpKSxcbiAgICAgICAgb25TaGVsbFJlYWR5KCkge1xuICAgICAgICAgIC8vbWFuYWdlcnMuZm9yRWFjaChtYW5hZ2VyID0+IG1hbmFnZXIuY2xlYW51cCgpKTtcbiAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBiZWZvcmUgd2Ugc3RhcnRlZCBzdHJlYW1pbmcsIHdlIHNldCB0aGUgZXJyb3IgY29kZSBhcHByb3ByaWF0ZWx5LlxuICAgICAgICAgIHJlcy5zdGF0dXNDb2RlID0gZGlkRXJyb3IgPyBnZXRFcnJvclN0YXR1cyhsYXN0RXJyb3IpIDogMjAwO1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU2hlbGxFcnJvcihlOiB1bmtub3duKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGxhc3RFcnJvciA9IGU7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSBnZXRFcnJvclN0YXR1cyhlKTtcbiAgICAgICAgICBwaXBlKHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3IoZTogdW5rbm93bikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBsYXN0RXJyb3IgPSBlO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgcmVzLnN0YXR1c0NvZGUgPSBnZXRFcnJvclN0YXR1cyhlKTtcbiAgICAgICAgICAvL3BpcGUocmVzKTsgUmVtb3ZpbmcgdGhpcyBhdm9pZHMsIFwiUmVhY3QgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgcGlwaW5nIHRvIG9uZSB3cml0YWJsZSBzdHJlYW0uXCJcbiAgICAgICAgICBpZiAob25FcnJvcikgb25FcnJvcihlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgLy8gQWJhbmRvbiBhbmQgc3dpdGNoIHRvIGNsaWVudCByZW5kZXJpbmcgaWYgZW5vdWdoIHRpbWUgcGFzc2VzLlxuICAgICAgLy8gVHJ5IGxvd2VyaW5nIHRoaXMgdG8gc2VlIHRoZSBjbGllbnQgcmVjb3Zlci5cbiAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICgpID0+IChhYm9ydCBhcyBhbnkpKGBUaW1lb3V0IG9mICR7dGltZW91dE1TfW1zIGV4Y2VlZGVkYCksXG4gICAgICAgIHRpbWVvdXRNUyxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKG9uRXJyb3IpIG9uRXJyb3IoZSk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHJlbmRlcjtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3RcIik7IiwiZXhwb3J0IGludGVyZmFjZSBQb2xpY3kge1xuICBbZGlyZWN0aXZlOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuLy8gVE9ETzogbWVtb2l6ZSB0aGlzXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQb2xpY3kocG9saWN5T2JqOiBQb2xpY3kpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHBvbGljeU9iailcbiAgICAubWFwKGtleSA9PiB7XG4gICAgICBjb25zdCB2YWwgPVxuICAgICAgICBBcnJheS5pc0FycmF5KHBvbGljeU9ialtrZXldKSA/XG4gICAgICAgICAgWy4uLm5ldyBTZXQocG9saWN5T2JqW2tleV0pLnZhbHVlcygpXS5maWx0ZXIodiA9PiB2KS5qb2luKCcgJylcbiAgICAgICAgOiBwb2xpY3lPYmpba2V5XTtcblxuICAgICAgLy8gbW92ZSBzdHJpY3QgZHluYW1pYyB0byB0aGUgZW5kIG9mIHRoZSBwb2xpY3kgaWYgaXQgZXhpc3RzIHRvIGJlIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggY3NwMlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5L3NjcmlwdC1zcmMjc3RyaWN0LWR5bmFtaWNcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoXCInc3RyaWN0LWR5bmFtaWMnXCIpKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGAke3ZhbFxuICAgICAgICAgIC5yZXBsYWNlKC9cXHM/J3N0cmljdC1keW5hbWljJ1xccz8vZ2ksICcgJylcbiAgICAgICAgICAudHJpbSgpfSAnc3RyaWN0LWR5bmFtaWMnYDtcbiAgICAgICAgcmV0dXJuIGAke2tleX0gJHtuZXdWYWx9YDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAke2tleX0gJHt2YWx9YDtcbiAgICB9KVxuICAgIC5qb2luKCc7ICcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pbk5vbmNlKHBvbGljeU9iajogUG9saWN5LCBub25jZT86IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICBpZiAoIW5vbmNlKSByZXR1cm4gcG9saWN5T2JqO1xuICBjb25zdCBwb2xpY3kgPSB7XG4gICAgLi4ucG9saWN5T2JqLFxuICB9O1xuICBpZiAodHlwZW9mIHBvbGljeVsnc2NyaXB0LXNyYyddID09PSAnc3RyaW5nJykge1xuICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gW3BvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICB9IGVsc2Uge1xuICAgIHBvbGljeVsnc2NyaXB0LXNyYyddID0gWy4uLnBvbGljeVsnc2NyaXB0LXNyYyddLCBgJ25vbmNlLSR7bm9uY2V9J2BdO1xuICB9XG4gIHJldHVybiBwb2xpY3k7XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0L2pzeC1ydW50aW1lXCIpOyIsInR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGFzc2V0czogeyBocmVmOiBzdHJpbmc7IGFzPzogc3RyaW5nOyByZWw/OiBzdHJpbmcgfVtdO1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICBleHRyYVN0eWxlOiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNjcmlwdHM/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHJvb3RJZD86IHN0cmluZztcbiAgY2hhclNldD86IHN0cmluZztcbiAgbGFuZz86IHN0cmluZztcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEb2N1bWVudCh7XG4gIGFzc2V0cyxcbiAgaGVhZCA9IGRlZmF1bHRIZWFkLFxuICBjaGlsZHJlbixcbiAgdGl0bGUsXG4gIHJvb3RJZCA9ICdhbmFuc2ktcm9vdCcsXG4gIGNoYXJTZXQgPSAndXRmLTgnLFxuICBzY3JpcHRzID0gbnVsbCxcbiAgZXh0cmFTdHlsZSxcbiAgbGFuZyxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGh0bWwgbGFuZz17bGFuZ30+XG4gICAgICA8aGVhZD5cbiAgICAgICAgPG1ldGEgY2hhclNldD17Y2hhclNldH0gLz5cbiAgICAgICAge2hlYWR9XG4gICAgICAgIHtleHRyYVN0eWxlfVxuICAgICAgICB7YXNzZXRzLm1hcCgoYXNzZXQsIGkpID0+IChcbiAgICAgICAgICA8bGluayBrZXk9e2l9IHJlbD1cInByZWxvYWRcIiB7Li4uYXNzZXR9IC8+XG4gICAgICAgICkpfVxuICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgPGRpdiBpZD17cm9vdElkfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICAgIHtzY3JpcHRzfVxuICAgICAgICB7YXNzZXRzXG4gICAgICAgICAgLmZpbHRlcigoeyBocmVmIH0pID0+IGhyZWYuZW5kc1dpdGgoJy5qcycpKVxuICAgICAgICAgIC5tYXAoKHsgaHJlZiB9LCBpKSA9PiAoXG4gICAgICAgICAgICA8c2NyaXB0IGtleT17aX0gc3JjPXtocmVmfSBhc3luYyAvPlxuICAgICAgICAgICkpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgKTtcbn1cbmNvbnN0IGRlZmF1bHRIZWFkID0gKFxuICA8PlxuICAgIDxtZXRhIG5hbWU9XCJ2aWV3cG9ydFwiIGNvbnRlbnQ9XCJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MVwiIC8+XG4gICAgPGxpbmtcbiAgICAgIHJlbD1cInNob3J0Y3V0IGljb25cIlxuICAgICAgaHJlZj17YCR7cHJvY2Vzcy5lbnYuV0VCUEFDS19QVUJMSUNfUEFUSCA/PyAnLyd9ZmF2aWNvbi5pY29gfVxuICAgIC8+XG4gIDwvPlxuKTtcbiIsImltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5pbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU3RhdHNDaHVua0dyb3VwIH0gZnJvbSAnd2VicGFjayc7XG5cbmltcG9ydCB7IGJ1aWxkUG9saWN5LCBqb2luTm9uY2UsIFBvbGljeSB9IGZyb20gJy4vY3NwLmpzJztcbmltcG9ydCBEb2N1bWVudCBmcm9tICcuL0RvY3VtZW50Q29tcG9uZW50LmpzJztcbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBtYXRjaGVkUm91dGVzOiBSb3V0ZTxhbnk+W107XG4gIHRpdGxlPzogc3RyaW5nO1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG4gIGV4dHJhU3R5bGU/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xuICBsYW5nPzogc3RyaW5nO1xuICByb290SWQ/OiBzdHJpbmc7XG4gIGNoYXJTZXQ/OiBzdHJpbmc7XG4gIGNzUG9saWN5PzogUG9saWN5O1xufSk6IFNlcnZlclNwb3V0PFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgTmVlZGVkTmV4dD4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBwdWJsaWNQYXRoID0gcHJvcHMuY2xpZW50TWFuaWZlc3QucHVibGljUGF0aDtcblxuICAgIGlmIChcbiAgICAgIE9iamVjdC5rZXlzKHByb3BzLmNsaWVudE1hbmlmZXN0Py5lbnRyeXBvaW50cyA/PyB7fSkubGVuZ3RoIDwgMSB8fFxuICAgICAgcHVibGljUGF0aCA9PT0gdW5kZWZpbmVkXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYW5pZmVzdCBtaXNzaW5nIGVudHJpZXMgbmVlZGVkJyk7XG5cbiAgICAvLyBUT0RPOiBjb25zaWRlciB1c2luZyB0aGlzIHBhY2thZ2UgZm9yIGJ1aWxkIHN0YXRzIGluIGZ1dHVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvdHJlZS9tYWluL3BhY2thZ2VzL3JlYWN0LXNlcnZlci1kb20td2VicGFja1xuICAgIGNvbnN0IGFzc2V0TWFwID0gKGFzc2V0czogeyBuYW1lOiBzdHJpbmc7IHNpemU/OiBudW1iZXIgfVtdKSA9PlxuICAgICAgYXNzZXRzLm1hcCgoeyBuYW1lIH0pID0+IGAke3B1YmxpY1BhdGh9JHtuYW1lfWApO1xuXG4gICAgY29uc3QgYXNzZXRMaXN0OiBzdHJpbmdbXSA9IFtdO1xuICAgIE9iamVjdC52YWx1ZXMocHJvcHMuY2xpZW50TWFuaWZlc3Q/LmVudHJ5cG9pbnRzID8/IHt9KS5mb3JFYWNoKFxuICAgICAgZW50cnlwb2ludCA9PiB7XG4gICAgICAgIGFzc2V0TGlzdC5wdXNoKC4uLmFzc2V0TWFwKGVudHJ5cG9pbnQuYXNzZXRzID8/IFtdKSk7XG4gICAgICB9LFxuICAgICk7XG4gICAgbmV3IFNldChcbiAgICAgIGFzc2V0TWFwKFxuICAgICAgICBPYmplY3QudmFsdWVzKHByb3BzLmNsaWVudE1hbmlmZXN0Lm5hbWVkQ2h1bmtHcm91cHMgPz8ge30pXG4gICAgICAgICAgLmZpbHRlcigoeyBuYW1lIH0pID0+XG4gICAgICAgICAgICBuZXh0UHJvcHMubWF0Y2hlZFJvdXRlcy5zb21lKHJvdXRlID0+IG5hbWU/LmluY2x1ZGVzKHJvdXRlLm5hbWUpKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLmZsYXRNYXAoY2h1bmsgPT4gW1xuICAgICAgICAgICAgLi4uKGNodW5rLmFzc2V0cyA/PyBbXSksXG4gICAgICAgICAgICAvLyBhbnkgY2h1bmsgcHJlbG9hZHNcbiAgICAgICAgICAgIC4uLmNoaWxkcmVuQXNzZXRzKGNodW5rKSxcbiAgICAgICAgICBdKSxcbiAgICAgICksXG4gICAgKS5mb3JFYWNoKGFzc2V0ID0+IGFzc2V0TGlzdC5wdXNoKGFzc2V0KSk7XG5cbiAgICAvLyBmaW5kIGFkZGl0aW9uYWwgYXNzZXRzIHRvIHByZWxvYWQgYmFzZWQgb24gbWF0Y2hlZCByb3V0ZVxuICAgIGNvbnN0IGFzc2V0czoge1xuICAgICAgaHJlZjogc3RyaW5nO1xuICAgICAgYXM/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICByZWw/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgfVtdID0gYXNzZXRMaXN0XG4gICAgICAuZmlsdGVyKGFzc2V0ID0+ICFhc3NldC5lbmRzV2l0aCgnLmhvdC11cGRhdGUuanMnKSlcbiAgICAgIC5tYXAoYXNzZXQgPT5cbiAgICAgICAgYXNzZXQuZW5kc1dpdGgoJy5jc3MnKSA/IHsgaHJlZjogYXNzZXQsIHJlbDogJ3N0eWxlc2hlZXQnIH1cbiAgICAgICAgOiBhc3NldC5lbmRzV2l0aCgnLmpzJykgPyB7IGhyZWY6IGFzc2V0LCBhczogJ3NjcmlwdCcgfVxuICAgICAgICA6IHsgaHJlZjogYXNzZXQgfSxcbiAgICAgICk7XG5cbiAgICBpZiAob3B0aW9ucy5jc1BvbGljeSkge1xuICAgICAgY29uc3QgaHR0cEVxdWl2ID1cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJyA/XG4gICAgICAgICAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5J1xuICAgICAgICA6ICdDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seSc7XG5cbiAgICAgIHByb3BzLnJlcy5zZXRIZWFkZXIoXG4gICAgICAgIGh0dHBFcXVpdixcbiAgICAgICAgYnVpbGRQb2xpY3koam9pbk5vbmNlKG9wdGlvbnMuY3NQb2xpY3ksIHByb3BzLm5vbmNlKSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERvY3VtZW50XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgZXh0cmFTdHlsZT17bmV4dFByb3BzLmV4dHJhU3R5bGV9XG4gICAgICAgICAgdGl0bGU9e25leHRQcm9wcy50aXRsZSA/PyBvcHRpb25zLnRpdGxlfVxuICAgICAgICAgIGFzc2V0cz17YXNzZXRzfVxuICAgICAgICAgIHJvb3RJZD17b3B0aW9ucy5yb290SWR9XG4gICAgICAgICAgc2NyaXB0cz17bmV4dFByb3BzLnNjcmlwdHN9XG4gICAgICAgID5cbiAgICAgICAgICB7bmV4dFByb3BzLmFwcH1cbiAgICAgICAgPC9Eb2N1bWVudD5cbiAgICAgICksXG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5Bc3NldHMoY2h1bms6IFN0YXRzQ2h1bmtHcm91cCkge1xuICByZXR1cm4gY2h1bmsuY2hpbGRyZW4gP1xuICAgICAgT2JqZWN0LnZhbHVlcyhjaHVuay5jaGlsZHJlbikuZmxhdE1hcChwcmVsb2FkID0+XG4gICAgICAgIHByZWxvYWQuZmxhdE1hcChjID0+IGMuYXNzZXRzID8/IFtdKSxcbiAgICAgIClcbiAgICA6IFtdO1xufVxuIiwiaW1wb3J0IHtcbiAgdHlwZSBDb250cm9sbGVyLFxuICB0eXBlIE1hbmFnZXIsXG4gIHR5cGUgU3RhdGUsXG4gIHR5cGUgU3RvcmUsXG59IGZyb20gJ0BkYXRhLWNsaWVudC9yZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGF0YUNsaWVudFNwb3V0KFxuICBvcHRpb25zOiB7XG4gICAgZ2V0TWFuYWdlcnM/OiAoKSA9PiBNYW5hZ2VyW107XG4gIH0gPSB7fSxcbik6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgeyBjb250cm9sbGVyOiBDb250cm9sbGVyIH0gJiB7IHN0b3JlOiBTdG9yZTxTdGF0ZTx1bmtub3duPj4gfSxcbiAgeyBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+OyBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW10gfVxuPiB7XG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBtYW5hZ2VycyA9IG9wdGlvbnM/LmdldE1hbmFnZXJzPy4oKSA/PyBbXG4gICAgICBuZXcgKGF3YWl0IGltcG9ydCgnQGRhdGEtY2xpZW50L3JlYWN0JykpLk5ldHdvcmtNYW5hZ2VyKCksXG4gICAgXTtcbiAgICBjb25zdCB7IGNyZWF0ZVBlcnNpc3RlZFN0b3JlIH0gPSBhd2FpdCBpbXBvcnQoJ0BkYXRhLWNsaWVudC9yZWFjdC9zc3InKTtcbiAgICBjb25zdCBbU2VydmVyRGF0YVByb3ZpZGVyLCB1c2VSZWFkeUNhY2hlU3RhdGUsIGNvbnRyb2xsZXIsIHN0b3JlXSA9XG4gICAgICBjcmVhdGVQZXJzaXN0ZWRTdG9yZShtYW5hZ2Vycyk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY29udHJvbGxlcixcbiAgICAgIHN0b3JlLFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBpbml0RGF0YToge1xuICAgICAgICAuLi5uZXh0UHJvcHMuaW5pdERhdGEsXG4gICAgICAgIGRhdGFjbGllbnQ6IHVzZVJlYWR5Q2FjaGVTdGF0ZSxcbiAgICAgIH0sXG4gICAgICBhcHA6IDxTZXJ2ZXJEYXRhUHJvdmlkZXI+e25leHRQcm9wcy5hcHB9PC9TZXJ2ZXJEYXRhUHJvdmlkZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgY29udHJvbGxlcixcbiAgICAgIHN0b3JlLFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgU2VydmVyU3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBOZWVkZWROZXh0ID0ge1xuICBpbml0RGF0YT86IFJlY29yZDxzdHJpbmcsICgpID0+IHVua25vd24+O1xuICBzY3JpcHRzPzogUmVhY3QuUmVhY3ROb2RlW107XG4gIGV4dHJhU3R5bGU/OiBSZWFjdC5SZWFjdE5vZGVbXTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFudGRTcG91dCgpOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgY3JlYXRlQ2FjaGUsIGV4dHJhY3RTdHlsZSwgU3R5bGVQcm92aWRlciB9ID0gYXdhaXQgaW1wb3J0KFxuICAgICAgLyogd2VicGFja0lnbm9yZTogdHJ1ZSAqLyAnQGFudC1kZXNpZ24vY3NzaW5qcydcbiAgICApO1xuICAgIGNvbnN0IGNhY2hlID0gY3JlYXRlQ2FjaGUoKTtcbiAgICBjb25zdCBBbnRkU2hlZXRzID0gKCk6IEpTWC5FbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzY3JpcHRcbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgX19odG1sOiBgPC9zY3JpcHQ+JHtleHRyYWN0U3R5bGUoY2FjaGUpfTxzY3JpcHQ+YCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICBjb25zdCBzY3JpcHRzOiBSZWFjdC5SZWFjdE5vZGVbXSA9IG5leHRQcm9wcy5zY3JpcHRzID8/IFtdO1xuXG4gICAgLy8gdW5mb3J0dW5hdGVseSB3ZSBoYXZlIHRvIGluamVjdCB0aGlzIGFmdGVyIHRoZSBlbnRpcmUgY29udGVudCBoYXMgc3RyZWFtZWQgaW4gb3IgaXQgZG9lc24ndCBjb3JyZWN0bHkgcG9wdWxhdGVcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnQtZGVzaWduL2Nzc2luanMvaXNzdWVzLzc5XG4gICAgc2NyaXB0cy5wdXNoKDxBbnRkU2hlZXRzIGtleT1cImFudGQtc2hlZXRzXCIgLz4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIGFwcDogPFN0eWxlUHJvdmlkZXIgY2FjaGU9e2NhY2hlfT57bmV4dFByb3BzLmFwcH08L1N0eWxlUHJvdmlkZXI+LFxuICAgICAgc2NyaXB0cyxcbiAgICB9O1xuICB9O1xufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAYW5hbnNpL3JvdXRlclwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcImhpc3RvcnlcIik7IiwiaW1wb3J0IHsgUm91dGUsIFJvdXRlUHJvdmlkZXIsIFJvdXRlQ29udHJvbGxlciB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZU1lbW9yeUhpc3RvcnkgfSBmcm9tICdoaXN0b3J5JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB0eXBlIHsgQ3JlYXRlUm91dGVyLCBTZXJ2ZXJTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByb3V0ZXJTcG91dDxSZXNvbHZlV2l0aD4ob3B0aW9uczoge1xuICByZXNvbHZlV2l0aD86IGFueTtcbiAgdXNlUmVzb2x2ZVdpdGg6ICgpID0+IFJlc29sdmVXaXRoO1xuICBjcmVhdGVSb3V0ZXI6IENyZWF0ZVJvdXRlcjxSZXNvbHZlV2l0aD47XG59KTogU2VydmVyU3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7XG4gICAgbWF0Y2hlZFJvdXRlczogUm91dGU8UmVzb2x2ZVdpdGg+W107XG4gICAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG4gIH0gJiB7XG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+O1xuICB9XG4+IHtcbiAgY29uc3QgY3JlYXRlUm91dGVDb21wb25lbnQgPSAoXG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+LFxuICApID0+XG4gICAgZnVuY3Rpb24gUm91dGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVXaXRoID0gb3B0aW9ucy51c2VSZXNvbHZlV2l0aCgpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um91dGVQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gcmVzb2x2ZVdpdGg9e3Jlc29sdmVXaXRofT5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvUm91dGVQcm92aWRlcj5cbiAgICAgICk7XG4gICAgfTtcblxuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgdXJsID0gcHJvcHMucmVxLnVybCB8fCAnJztcbiAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnPycsIDIpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGFydHMubGVuZ3RoIDwgMiA/ICcnIDogcGFydHNbMV0pO1xuICAgIGNvbnN0IHJvdXRlciA9IG9wdGlvbnMuY3JlYXRlUm91dGVyKFxuICAgICAgY3JlYXRlTWVtb3J5SGlzdG9yeSh7IGluaXRpYWxFbnRyaWVzOiBbdXJsXSB9KSxcbiAgICApO1xuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoPltdID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXModXJsKTtcblxuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBtYXRjaGVkUm91dGVzLFxuICAgICAgcm91dGVyLFxuICAgICAgc2VhcmNoUGFyYW1zLFxuICAgIH0pO1xuXG4gICAgY29uc3QgUm91dGVyID0gY3JlYXRlUm91dGVDb21wb25lbnQocm91dGVyKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgICAgLy8gVE9ETzogZmlndXJlIG91dCBob3cgdG8gb25seSBpbmplY3QgaW4gbmV4dCBhbmQgbm90IGhhdmUgdG8gYWxzbyBwdXQgaGVyZVxuICAgICAgbWF0Y2hlZFJvdXRlcyxcbiAgICAgIHJvdXRlcixcbiAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5hbnNpL3JvdXRlcic7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZVByb3BzLCBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG50eXBlIE5lZWRlZFByb3BzPFJvdXRlV2l0aD4gPSB7XG4gIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJvdXRlV2l0aD5bXTtcbiAgc2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXM7XG59ICYgUmVzb2x2ZVByb3BzO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwcmVmZXRjaFNwb3V0PEYgZXh0ZW5kcyBzdHJpbmc+KGZpZWxkOiBGKSB7XG4gIHJldHVybiBmdW5jdGlvbiA8XG4gICAgUm91dGVXaXRoLFxuICAgIE4gZXh0ZW5kcyBOZWVkZWRQcm9wczxSb3V0ZVdpdGg+LFxuICAgIEkgZXh0ZW5kcyBTZXJ2ZXJQcm9wcyxcbiAgPihcbiAgICBuZXh0OiAocHJvcHM6IEkpID0+IFByb21pc2U8XG4gICAgICB7XG4gICAgICAgIFtLIGluIEZdOiBSb3V0ZVdpdGg7XG4gICAgICB9ICYgTlxuICAgID4sXG4gICkge1xuICAgIHJldHVybiBhc3luYyAocHJvcHM6IEkpID0+IHtcbiAgICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b0ZldGNoOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcbiAgICAgICAgbmV4dFByb3BzLm1hdGNoZWRSb3V0ZXMuZm9yRWFjaChyb3V0ZSA9PiB7XG4gICAgICAgICAgLy8gUHJlbG9hZCBsYXp5IGNvbXBvbmVudCBzbyBpdCdzIHJlYWR5IGZvciBTU1IgcmVuZGVyXG4gICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5jb21wb25lbnQ/LnByZWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRvRmV0Y2gucHVzaChyb3V0ZS5jb21wb25lbnQucHJlbG9hZCgpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHR5cGVvZiByb3V0ZS5yZXNvbHZlRGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdG9GZXRjaC5wdXNoKFxuICAgICAgICAgICAgICByb3V0ZS5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHNbZmllbGRdLFxuICAgICAgICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgICAgICAgIG5leHRQcm9wcy5zZWFyY2hQYXJhbXMsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRvRmV0Y2gpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHRQcm9wcztcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IFN1c3BlbnNlIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbiAgc2NyaXB0cz86IFJlYWN0LlJlYWN0Tm9kZVtdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSlNPTlNwb3V0KHtcbiAgaWQgPSAnYW5hbnNpLWpzb24nLFxufTogeyBpZD86IHN0cmluZyB9ID0ge30pOiBTZXJ2ZXJTcG91dDxcbiAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBOZWVkZWROZXh0XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgY29uc3Qgc2NyaXB0czogUmVhY3QuUmVhY3ROb2RlW10gPSBuZXh0UHJvcHMuc2NyaXB0cyA/PyBbXTtcblxuICAgIE9iamVjdC5lbnRyaWVzKG5leHRQcm9wcy5pbml0RGF0YSA/PyB7fSkuZm9yRWFjaCgoW2tleSwgdXNlRGF0YV0pID0+IHtcbiAgICAgIGNvbnN0IGdsb2JhbElkID0gYCR7aWR9LiR7a2V5fWA7XG4gICAgICBjb25zdCBTY3JpcHQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHVzZURhdGEoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbmNvZGVkID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzY3JpcHRcbiAgICAgICAgICAgICAgaWQ9e2dsb2JhbElkfVxuICAgICAgICAgICAgICB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXG4gICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgX19odG1sOiBlbmNvZGVkLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBub25jZT17cHJvcHMubm9uY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgdW5pZmllZCBsb2dnaW5nXG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3Igc2VyaWFsaXppbmcganNvbiBmb3IgJHtrZXl9YCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNjcmlwdHMucHVzaChcbiAgICAgICAgPFN1c3BlbnNlIGtleT17Z2xvYmFsSWR9PlxuICAgICAgICAgIDxTY3JpcHQgLz5cbiAgICAgICAgPC9TdXNwZW5zZT4sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIHNjcmlwdHMsXG4gICAgfTtcbiAgfTtcbn1cbiIsImltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBTZXJ2ZXJQcm9wcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5jb25zdCBhcHBTcG91dCA9XG4gIChhcHA6IEpTWC5FbGVtZW50KSA9PlxuICA8UCBleHRlbmRzIFNlcnZlclByb3BzPihwcm9wczogUCkgPT5cbiAgICBQcm9taXNlLnJlc29sdmUoeyAuLi5wcm9wcywgYXBwIH0pO1xuXG5leHBvcnQgZGVmYXVsdCBhcHBTcG91dDtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmF2aWdhdG9yUHJvcGVydGllcyB7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGxhbmd1YWdlczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBjb25zdCBOYXZpZ2F0b3JDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxOYXZpZ2F0b3JQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPihcbiAgdW5kZWZpbmVkLFxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU5hdmlnYXRvcigpOiBOYXZpZ2F0b3JQcm9wZXJ0aWVzIHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoTmF2aWdhdG9yQ29udGV4dCk7XG4gIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZU5hdmlnYXRvciBtdXN0IGJlIHVzZWQgd2l0aGluIGEgTmF2aWdhdG9yUHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWNjZXB0TGFuZ3VhZ2UoaGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGxhbmd1YWdlczogcmVhZG9ubHkgc3RyaW5nW107XG59IHtcbiAgaWYgKCFoZWFkZXIpIHtcbiAgICByZXR1cm4geyBsYW5ndWFnZTogJ2VuJywgbGFuZ3VhZ2VzOiBbJ2VuJ10gfTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IGhlYWRlclxuICAgIC5zcGxpdCgnLCcpXG4gICAgLm1hcChwYXJ0ID0+IHtcbiAgICAgIGNvbnN0IFtsYW5nLCBxUGFydF0gPSBwYXJ0LnRyaW0oKS5zcGxpdCgnOycpO1xuICAgICAgY29uc3QgcSA9IHFQYXJ0ID8gcGFyc2VGbG9hdChxUGFydC5yZXBsYWNlKCdxPScsICcnKSkgOiAxO1xuICAgICAgcmV0dXJuIHsgbGFuZzogbGFuZy50cmltKCksIHEgfTtcbiAgICB9KVxuICAgIC5zb3J0KChhLCBiKSA9PiBiLnEgLSBhLnEpXG4gICAgLm1hcCgoeyBsYW5nIH0pID0+IGxhbmcpO1xuXG4gIHJldHVybiB7XG4gICAgbGFuZ3VhZ2U6IHBhcnNlZFswXSA/PyAnZW4nLFxuICAgIGxhbmd1YWdlczogcGFyc2VkLmxlbmd0aCA+IDAgPyBwYXJzZWQgOiBbJ2VuJ10sXG4gIH07XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgeyBOYXZpZ2F0b3JDb250ZXh0LCBwYXJzZUFjY2VwdExhbmd1YWdlIH0gZnJvbSAnLi9uYXZpZ2F0b3IuY29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZlclNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbnR5cGUgTmVlZGVkTmV4dCA9IHtcbiAgaW5pdERhdGE/OiBSZWNvcmQ8c3RyaW5nLCAoKSA9PiB1bmtub3duPjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5hdmlnYXRvclNwb3V0KCk6IFNlcnZlclNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgeyBsYW5ndWFnZTogc3RyaW5nOyBsYW5ndWFnZXM6IHJlYWRvbmx5IHN0cmluZ1tdIH0sXG4gIE5lZWRlZE5leHRcbj4ge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgYWNjZXB0TGFuZ3VhZ2UgPSBwcm9wcy5yZXEuaGVhZGVyc1snYWNjZXB0LWxhbmd1YWdlJ107XG4gICAgY29uc3QgaGVhZGVyID1cbiAgICAgIHR5cGVvZiBhY2NlcHRMYW5ndWFnZSA9PT0gJ3N0cmluZycgPyBhY2NlcHRMYW5ndWFnZSA6IGFjY2VwdExhbmd1YWdlPy5bMF07XG4gICAgY29uc3QgbmF2aWdhdG9yUHJvcHMgPSBwYXJzZUFjY2VwdExhbmd1YWdlKGhlYWRlcik7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgLi4ubmF2aWdhdG9yUHJvcHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgLi4ubmF2aWdhdG9yUHJvcHMsXG4gICAgICBpbml0RGF0YToge1xuICAgICAgICAuLi5uZXh0UHJvcHMuaW5pdERhdGEsXG4gICAgICAgIG5hdmlnYXRvcjogKCkgPT4gbmF2aWdhdG9yUHJvcHMsXG4gICAgICB9LFxuICAgICAgYXBwOiAoXG4gICAgICAgIDxOYXZpZ2F0b3JDb250ZXh0IHZhbHVlPXtuYXZpZ2F0b3JQcm9wc30+XG4gICAgICAgICAge25leHRQcm9wcy5hcHB9XG4gICAgICAgIDwvTmF2aWdhdG9yQ29udGV4dD5cbiAgICAgICksXG4gICAgfTtcbiAgfTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgbGF5U3BvdXRzIH0gZnJvbSAnLi9sYXlTcG91dHMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBkb2N1bWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZG9jdW1lbnQuc2VydmVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGF0YUNsaWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZGF0YUNsaWVudC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhbnRkU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9hbnRkLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcm91dGVyLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZWZldGNoU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9wcmVmZXRjaC5zZXJ2ZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBKU09OU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9qc29uLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFwcFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYXBwLnNlcnZlci5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIG5hdmlnYXRvclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvbmF2aWdhdG9yLnNlcnZlci5qcyc7XG5leHBvcnQgeyB1c2VOYXZpZ2F0b3IgfSBmcm9tICcuL3Nwb3V0cy9uYXZpZ2F0b3IuY29udGV4dC5qcyc7XG5leHBvcnQgdHlwZSB7IE5hdmlnYXRvclByb3BlcnRpZXMgfSBmcm9tICcuL3Nwb3V0cy9uYXZpZ2F0b3IuY29udGV4dC5qcyc7XG5leHBvcnQgdHlwZSB7IFNlcnZlclByb3BzIH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBTZXJ2ZXJTcG91dCBhcyBTcG91dCB9IGZyb20gJy4vc3BvdXRzL3R5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc2NyaXB0cy90eXBlcy5qcyc7XG4iXSwibmFtZXMiOlsiZ2V0RXJyb3JTdGF0dXMiLCJlcnJvciIsInN0YXR1cyIsInBhcnNlZCIsInBhcnNlSW50IiwiaXNOYU4iLCJlc2NhcGVIdG1sIiwic3RyIiwicmVwbGFjZSIsInJlbmRlckVycm9yUGFnZSIsInVybCIsInN0YXR1c0NvZGUiLCJvcHRpb25zIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3IiLCJtZXNzYWdlIiwiU3RyaW5nIiwic3RhY2siLCJ1bmRlZmluZWQiLCJzaG93U3RhY2siLCJoaW50IiwiYmFkZ2UiLCJjcnlwdG8iLCJyZW5kZXJUb1BpcGVhYmxlU3RyZWFtIiwicmVhY3RSZW5kZXIiLCJsYXlTcG91dHMiLCJzcG91dHMiLCJ0aW1lb3V0TVMiLCJvbkVycm9yIiwicmVuZGVyIiwiY2xpZW50TWFuaWZlc3QiLCJyZXEiLCJyZXMiLCJub25jZSIsInJhbmRvbUJ5dGVzIiwidG9TdHJpbmciLCJhcHAiLCJkaWRFcnJvciIsImxhc3RFcnJvciIsInBpcGUiLCJhYm9ydCIsIm9uU2hlbGxSZWFkeSIsInNldEhlYWRlciIsIm9uU2hlbGxFcnJvciIsImUiLCJjb25zb2xlIiwic2V0VGltZW91dCIsImJ1aWxkUG9saWN5IiwicG9saWN5T2JqIiwiT2JqZWN0Iiwia2V5cyIsIm1hcCIsImtleSIsInZhbCIsIkFycmF5IiwiaXNBcnJheSIsIlNldCIsInZhbHVlcyIsImZpbHRlciIsInYiLCJqb2luIiwiaW5jbHVkZXMiLCJuZXdWYWwiLCJ0cmltIiwiam9pbk5vbmNlIiwicG9saWN5IiwiRG9jdW1lbnQiLCJhc3NldHMiLCJoZWFkIiwiZGVmYXVsdEhlYWQiLCJjaGlsZHJlbiIsInRpdGxlIiwicm9vdElkIiwiY2hhclNldCIsInNjcmlwdHMiLCJleHRyYVN0eWxlIiwibGFuZyIsIl9qc3hzIiwiX2pzeCIsImFzc2V0IiwiaSIsInJlbCIsImlkIiwiaHJlZiIsImVuZHNXaXRoIiwic3JjIiwiYXN5bmMiLCJfRnJhZ21lbnQiLCJuYW1lIiwiY29udGVudCIsInByb2Nlc3MiLCJlbnYiLCJXRUJQQUNLX1BVQkxJQ19QQVRIIiwiUmVhY3QiLCJqc3giLCJEb2N1bWVudFNwb3V0IiwibmV4dCIsInByb3BzIiwibmV4dFByb3BzIiwicHVibGljUGF0aCIsImVudHJ5cG9pbnRzIiwibGVuZ3RoIiwiYXNzZXRNYXAiLCJhc3NldExpc3QiLCJmb3JFYWNoIiwiZW50cnlwb2ludCIsInB1c2giLCJuYW1lZENodW5rR3JvdXBzIiwibWF0Y2hlZFJvdXRlcyIsInNvbWUiLCJyb3V0ZSIsImZsYXRNYXAiLCJjaHVuayIsImNoaWxkcmVuQXNzZXRzIiwiYXMiLCJjc1BvbGljeSIsImh0dHBFcXVpdiIsIk5PREVfRU5WIiwicHJlbG9hZCIsImMiLCJkYXRhQ2xpZW50U3BvdXQiLCJtYW5hZ2VycyIsImdldE1hbmFnZXJzIiwiTmV0d29ya01hbmFnZXIiLCJjcmVhdGVQZXJzaXN0ZWRTdG9yZSIsIlNlcnZlckRhdGFQcm92aWRlciIsInVzZVJlYWR5Q2FjaGVTdGF0ZSIsImNvbnRyb2xsZXIiLCJzdG9yZSIsImluaXREYXRhIiwiZGF0YWNsaWVudCIsImFudGRTcG91dCIsImNyZWF0ZUNhY2hlIiwiZXh0cmFjdFN0eWxlIiwiU3R5bGVQcm92aWRlciIsImNhY2hlIiwiQW50ZFNoZWV0cyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiUm91dGVQcm92aWRlciIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJyb3V0ZXJTcG91dCIsImNyZWF0ZVJvdXRlQ29tcG9uZW50Iiwicm91dGVyIiwiUm91dGVyIiwicmVzb2x2ZVdpdGgiLCJ1c2VSZXNvbHZlV2l0aCIsInBhcnRzIiwic3BsaXQiLCJzZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJjcmVhdGVSb3V0ZXIiLCJpbml0aWFsRW50cmllcyIsImdldE1hdGNoZWRSb3V0ZXMiLCJwcmVmZXRjaFNwb3V0IiwiZmllbGQiLCJ0b0ZldGNoIiwiY29tcG9uZW50IiwicmVzb2x2ZURhdGEiLCJQcm9taXNlIiwiYWxsIiwiU3VzcGVuc2UiLCJKU09OU3BvdXQiLCJlbnRyaWVzIiwidXNlRGF0YSIsImdsb2JhbElkIiwiU2NyaXB0IiwiZGF0YSIsImVuY29kZWQiLCJKU09OIiwic3RyaW5naWZ5IiwidHlwZSIsImFwcFNwb3V0IiwicmVzb2x2ZSIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiTmF2aWdhdG9yQ29udGV4dCIsInVzZU5hdmlnYXRvciIsImNvbnRleHQiLCJwYXJzZUFjY2VwdExhbmd1YWdlIiwiaGVhZGVyIiwibGFuZ3VhZ2UiLCJsYW5ndWFnZXMiLCJwYXJ0IiwicVBhcnQiLCJxIiwicGFyc2VGbG9hdCIsInNvcnQiLCJhIiwiYiIsIm5hdmlnYXRvclNwb3V0IiwiYWNjZXB0TGFuZ3VhZ2UiLCJoZWFkZXJzIiwibmF2aWdhdG9yUHJvcHMiLCJuYXZpZ2F0b3IiLCJ2YWx1ZSIsImRlZmF1bHQiLCJkb2N1bWVudFNwb3V0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anansi/core",
|
|
3
|
-
"version": "0.21.
|
|
3
|
+
"version": "0.21.4",
|
|
4
4
|
"description": "React 19 Framework",
|
|
5
5
|
"homepage": "https://github.com/ntucker/anansi/tree/master/packages/core#readme",
|
|
6
6
|
"repository": {
|
|
@@ -42,7 +42,6 @@
|
|
|
42
42
|
"import": "./lib/index.server.js"
|
|
43
43
|
},
|
|
44
44
|
"types": "./lib/index.d.ts",
|
|
45
|
-
"require": "./dist/client.js",
|
|
46
45
|
"default": "./lib/index.js"
|
|
47
46
|
},
|
|
48
47
|
"./server": {
|
|
@@ -77,17 +76,17 @@
|
|
|
77
76
|
"@types/tmp": "0.2.6",
|
|
78
77
|
"@types/webpack-hot-middleware": "2.25.12",
|
|
79
78
|
"@types/webpack-node-externals": "^3",
|
|
80
|
-
"react": "19.2.
|
|
81
|
-
"react-dom": "19.2.
|
|
79
|
+
"react": "19.2.3",
|
|
80
|
+
"react-dom": "19.2.3"
|
|
82
81
|
},
|
|
83
82
|
"dependencies": {
|
|
84
|
-
"@anansi/router": "^0.10.
|
|
83
|
+
"@anansi/router": "^0.10.21",
|
|
85
84
|
"@babel/runtime-corejs3": "^7.26.0",
|
|
86
85
|
"chalk": "^4.1.2",
|
|
87
86
|
"compression": "^1.8.1",
|
|
88
87
|
"core-js-pure": "^3.40.0",
|
|
89
88
|
"cross-fetch": "^4.1.0",
|
|
90
|
-
"enhanced-resolve": "^5.18.
|
|
89
|
+
"enhanced-resolve": "^5.18.4",
|
|
91
90
|
"express": "^4.22.1",
|
|
92
91
|
"fs-require": "^1.6.0",
|
|
93
92
|
"history": "^5.3.0",
|
package/dist/2.chunk.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
exports.id = 2;
|
|
3
|
-
exports.ids = [2];
|
|
4
|
-
exports.modules = {
|
|
5
|
-
|
|
6
|
-
/***/ 4:
|
|
7
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8
|
-
|
|
9
|
-
__webpack_require__.r(__webpack_exports__);
|
|
10
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
11
|
-
/* harmony export */ DataProvider: () => (/* reexport safe */ _data_client_react__WEBPACK_IMPORTED_MODULE_0__.DataProvider)
|
|
12
|
-
/* harmony export */ });
|
|
13
|
-
/* harmony import */ var _data_client_react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
|
|
14
|
-
/* harmony import */ var _data_client_react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_data_client_react__WEBPACK_IMPORTED_MODULE_0__);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/***/ })
|
|
18
|
-
|
|
19
|
-
};
|
|
20
|
-
;
|
package/dist/client.js
DELETED
|
@@ -1,441 +0,0 @@
|
|
|
1
|
-
/******/ (() => { // webpackBootstrap
|
|
2
|
-
/******/ "use strict";
|
|
3
|
-
/******/ var __webpack_modules__ = ({
|
|
4
|
-
|
|
5
|
-
/***/ 2:
|
|
6
|
-
/***/ ((module) => {
|
|
7
|
-
|
|
8
|
-
module.exports = require("@data-client/react");
|
|
9
|
-
|
|
10
|
-
/***/ }),
|
|
11
|
-
|
|
12
|
-
/***/ 5:
|
|
13
|
-
/***/ ((module) => {
|
|
14
|
-
|
|
15
|
-
module.exports = require("@ant-design/cssinjs");
|
|
16
|
-
|
|
17
|
-
/***/ })
|
|
18
|
-
|
|
19
|
-
/******/ });
|
|
20
|
-
/************************************************************************/
|
|
21
|
-
/******/ // The module cache
|
|
22
|
-
/******/ var __webpack_module_cache__ = {};
|
|
23
|
-
/******/
|
|
24
|
-
/******/ // The require function
|
|
25
|
-
/******/ function __webpack_require__(moduleId) {
|
|
26
|
-
/******/ // Check if module is in cache
|
|
27
|
-
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
28
|
-
/******/ if (cachedModule !== undefined) {
|
|
29
|
-
/******/ return cachedModule.exports;
|
|
30
|
-
/******/ }
|
|
31
|
-
/******/ // Create a new module (and put it into the cache)
|
|
32
|
-
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
33
|
-
/******/ // no module.id needed
|
|
34
|
-
/******/ // no module.loaded needed
|
|
35
|
-
/******/ exports: {}
|
|
36
|
-
/******/ };
|
|
37
|
-
/******/
|
|
38
|
-
/******/ // Execute the module function
|
|
39
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
40
|
-
/******/
|
|
41
|
-
/******/ // Return the exports of the module
|
|
42
|
-
/******/ return module.exports;
|
|
43
|
-
/******/ }
|
|
44
|
-
/******/
|
|
45
|
-
/******/ // expose the modules object (__webpack_modules__)
|
|
46
|
-
/******/ __webpack_require__.m = __webpack_modules__;
|
|
47
|
-
/******/
|
|
48
|
-
/************************************************************************/
|
|
49
|
-
/******/ /* webpack/runtime/compat get default export */
|
|
50
|
-
/******/ (() => {
|
|
51
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
52
|
-
/******/ __webpack_require__.n = (module) => {
|
|
53
|
-
/******/ var getter = module && module.__esModule ?
|
|
54
|
-
/******/ () => (module['default']) :
|
|
55
|
-
/******/ () => (module);
|
|
56
|
-
/******/ __webpack_require__.d(getter, { a: getter });
|
|
57
|
-
/******/ return getter;
|
|
58
|
-
/******/ };
|
|
59
|
-
/******/ })();
|
|
60
|
-
/******/
|
|
61
|
-
/******/ /* webpack/runtime/create fake namespace object */
|
|
62
|
-
/******/ (() => {
|
|
63
|
-
/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
|
|
64
|
-
/******/ var leafPrototypes;
|
|
65
|
-
/******/ // create a fake namespace object
|
|
66
|
-
/******/ // mode & 1: value is a module id, require it
|
|
67
|
-
/******/ // mode & 2: merge all properties of value into the ns
|
|
68
|
-
/******/ // mode & 4: return value when already ns object
|
|
69
|
-
/******/ // mode & 16: return value when it's Promise-like
|
|
70
|
-
/******/ // mode & 8|1: behave like require
|
|
71
|
-
/******/ __webpack_require__.t = function(value, mode) {
|
|
72
|
-
/******/ if(mode & 1) value = this(value);
|
|
73
|
-
/******/ if(mode & 8) return value;
|
|
74
|
-
/******/ if(typeof value === 'object' && value) {
|
|
75
|
-
/******/ if((mode & 4) && value.__esModule) return value;
|
|
76
|
-
/******/ if((mode & 16) && typeof value.then === 'function') return value;
|
|
77
|
-
/******/ }
|
|
78
|
-
/******/ var ns = Object.create(null);
|
|
79
|
-
/******/ __webpack_require__.r(ns);
|
|
80
|
-
/******/ var def = {};
|
|
81
|
-
/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
|
|
82
|
-
/******/ for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {
|
|
83
|
-
/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
|
|
84
|
-
/******/ }
|
|
85
|
-
/******/ def['default'] = () => (value);
|
|
86
|
-
/******/ __webpack_require__.d(ns, def);
|
|
87
|
-
/******/ return ns;
|
|
88
|
-
/******/ };
|
|
89
|
-
/******/ })();
|
|
90
|
-
/******/
|
|
91
|
-
/******/ /* webpack/runtime/define property getters */
|
|
92
|
-
/******/ (() => {
|
|
93
|
-
/******/ // define getter functions for harmony exports
|
|
94
|
-
/******/ __webpack_require__.d = (exports, definition) => {
|
|
95
|
-
/******/ for(var key in definition) {
|
|
96
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
97
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
98
|
-
/******/ }
|
|
99
|
-
/******/ }
|
|
100
|
-
/******/ };
|
|
101
|
-
/******/ })();
|
|
102
|
-
/******/
|
|
103
|
-
/******/ /* webpack/runtime/ensure chunk */
|
|
104
|
-
/******/ (() => {
|
|
105
|
-
/******/ __webpack_require__.f = {};
|
|
106
|
-
/******/ // This file contains only the entry chunk.
|
|
107
|
-
/******/ // The chunk loading function for additional chunks
|
|
108
|
-
/******/ __webpack_require__.e = (chunkId) => {
|
|
109
|
-
/******/ return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
|
|
110
|
-
/******/ __webpack_require__.f[key](chunkId, promises);
|
|
111
|
-
/******/ return promises;
|
|
112
|
-
/******/ }, []));
|
|
113
|
-
/******/ };
|
|
114
|
-
/******/ })();
|
|
115
|
-
/******/
|
|
116
|
-
/******/ /* webpack/runtime/get javascript chunk filename */
|
|
117
|
-
/******/ (() => {
|
|
118
|
-
/******/ // This function allow to reference async chunks
|
|
119
|
-
/******/ __webpack_require__.u = (chunkId) => {
|
|
120
|
-
/******/ // return url for filenames based on template
|
|
121
|
-
/******/ return "" + chunkId + ".chunk.js";
|
|
122
|
-
/******/ };
|
|
123
|
-
/******/ })();
|
|
124
|
-
/******/
|
|
125
|
-
/******/ /* webpack/runtime/get mini-css chunk filename */
|
|
126
|
-
/******/ (() => {
|
|
127
|
-
/******/ // This function allow to reference async chunks
|
|
128
|
-
/******/ __webpack_require__.miniCssF = (chunkId) => {
|
|
129
|
-
/******/ // return url for filenames based on template
|
|
130
|
-
/******/ return undefined;
|
|
131
|
-
/******/ };
|
|
132
|
-
/******/ })();
|
|
133
|
-
/******/
|
|
134
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
135
|
-
/******/ (() => {
|
|
136
|
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
137
|
-
/******/ })();
|
|
138
|
-
/******/
|
|
139
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
140
|
-
/******/ (() => {
|
|
141
|
-
/******/ // define __esModule on exports
|
|
142
|
-
/******/ __webpack_require__.r = (exports) => {
|
|
143
|
-
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
144
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
145
|
-
/******/ }
|
|
146
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
147
|
-
/******/ };
|
|
148
|
-
/******/ })();
|
|
149
|
-
/******/
|
|
150
|
-
/******/ /* webpack/runtime/publicPath */
|
|
151
|
-
/******/ (() => {
|
|
152
|
-
/******/ __webpack_require__.p = "/";
|
|
153
|
-
/******/ })();
|
|
154
|
-
/******/
|
|
155
|
-
/******/ /* webpack/runtime/require chunk loading */
|
|
156
|
-
/******/ (() => {
|
|
157
|
-
/******/ // no baseURI
|
|
158
|
-
/******/
|
|
159
|
-
/******/ // object to store loaded chunks
|
|
160
|
-
/******/ // "1" means "loaded", otherwise not loaded yet
|
|
161
|
-
/******/ var installedChunks = {
|
|
162
|
-
/******/ 0: 1
|
|
163
|
-
/******/ };
|
|
164
|
-
/******/
|
|
165
|
-
/******/ // no on chunks loaded
|
|
166
|
-
/******/
|
|
167
|
-
/******/ var installChunk = (chunk) => {
|
|
168
|
-
/******/ var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime;
|
|
169
|
-
/******/ for(var moduleId in moreModules) {
|
|
170
|
-
/******/ if(__webpack_require__.o(moreModules, moduleId)) {
|
|
171
|
-
/******/ __webpack_require__.m[moduleId] = moreModules[moduleId];
|
|
172
|
-
/******/ }
|
|
173
|
-
/******/ }
|
|
174
|
-
/******/ if(runtime) runtime(__webpack_require__);
|
|
175
|
-
/******/ for(var i = 0; i < chunkIds.length; i++)
|
|
176
|
-
/******/ installedChunks[chunkIds[i]] = 1;
|
|
177
|
-
/******/
|
|
178
|
-
/******/ };
|
|
179
|
-
/******/
|
|
180
|
-
/******/ // require() chunk loading for javascript
|
|
181
|
-
/******/ __webpack_require__.f.require = (chunkId, promises) => {
|
|
182
|
-
/******/ // "1" is the signal for "already loaded"
|
|
183
|
-
/******/ if(!installedChunks[chunkId]) {
|
|
184
|
-
/******/ if(true) { // all chunks have JS
|
|
185
|
-
/******/ var installedChunk = require("./" + __webpack_require__.u(chunkId));
|
|
186
|
-
/******/ if (!installedChunks[chunkId]) {
|
|
187
|
-
/******/ installChunk(installedChunk);
|
|
188
|
-
/******/ }
|
|
189
|
-
/******/ } else installedChunks[chunkId] = 1;
|
|
190
|
-
/******/ }
|
|
191
|
-
/******/ };
|
|
192
|
-
/******/
|
|
193
|
-
/******/ // no external install chunk
|
|
194
|
-
/******/
|
|
195
|
-
/******/ // no HMR
|
|
196
|
-
/******/
|
|
197
|
-
/******/ // no HMR manifest
|
|
198
|
-
/******/ })();
|
|
199
|
-
/******/
|
|
200
|
-
/************************************************************************/
|
|
201
|
-
var __webpack_exports__ = {};
|
|
202
|
-
// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk.
|
|
203
|
-
(() => {
|
|
204
|
-
// ESM COMPAT FLAG
|
|
205
|
-
__webpack_require__.r(__webpack_exports__);
|
|
206
|
-
|
|
207
|
-
// EXPORTS
|
|
208
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
209
|
-
JSONSpout: () => (/* reexport */ JSONSpout),
|
|
210
|
-
antdSpout: () => (/* reexport */ antdSpout),
|
|
211
|
-
appSpout: () => (/* reexport */ app),
|
|
212
|
-
dataClientSpout: () => (/* reexport */ dataClientSpout),
|
|
213
|
-
documentSpout: () => (/* reexport */ documentSpout),
|
|
214
|
-
floodSpouts: () => (/* reexport */ floodSpouts),
|
|
215
|
-
navigatorSpout: () => (/* reexport */ navigatorSpout),
|
|
216
|
-
routerSpout: () => (/* reexport */ routerSpout),
|
|
217
|
-
useNavigator: () => (/* reexport */ useNavigator)
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
;// external "react-dom/client"
|
|
221
|
-
const client_namespaceObject = require("react-dom/client");
|
|
222
|
-
;// ./src/floodSpouts.tsx
|
|
223
|
-
|
|
224
|
-
async function floodSpouts(spouts, {
|
|
225
|
-
rootId = 'anansi-root'
|
|
226
|
-
} = {}) {
|
|
227
|
-
const {
|
|
228
|
-
app
|
|
229
|
-
} = await spouts({});
|
|
230
|
-
(0,client_namespaceObject.hydrateRoot)(document.getElementById(rootId) ?? document, app);
|
|
231
|
-
}
|
|
232
|
-
;// ./src/spouts/document.tsx
|
|
233
|
-
function documentSpout(options) {
|
|
234
|
-
return next => async props => {
|
|
235
|
-
const nextProps = await next(props);
|
|
236
|
-
return nextProps;
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
;// external "@data-client/react/redux"
|
|
240
|
-
const redux_namespaceObject = require("@data-client/react/redux");
|
|
241
|
-
;// external "react/jsx-runtime"
|
|
242
|
-
const jsx_runtime_namespaceObject = require("react/jsx-runtime");
|
|
243
|
-
;// ./src/spouts/dataClient.tsx
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
function dataClientSpout(options = {}) {
|
|
247
|
-
return next => async props => {
|
|
248
|
-
const nextProps = await next(props);
|
|
249
|
-
const [data, {
|
|
250
|
-
DataProvider
|
|
251
|
-
}] = await Promise.all([props.getInitialData('dataclient').catch(e => {
|
|
252
|
-
console.error('Data Client initial data could not load:', e);
|
|
253
|
-
return redux_namespaceObject.initialState;
|
|
254
|
-
}), __webpack_require__.e(/* import() */ 2).then(__webpack_require__.bind(__webpack_require__, 4))]);
|
|
255
|
-
if (!data) {
|
|
256
|
-
console.error('Data Client init data not found');
|
|
257
|
-
}
|
|
258
|
-
return {
|
|
259
|
-
...nextProps,
|
|
260
|
-
app: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(DataProvider, {
|
|
261
|
-
initialState: data,
|
|
262
|
-
managers: options?.getManagers?.(),
|
|
263
|
-
children: nextProps.app
|
|
264
|
-
})
|
|
265
|
-
};
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
;// external "@anansi/router"
|
|
269
|
-
const router_namespaceObject = require("@anansi/router");
|
|
270
|
-
;// external "history"
|
|
271
|
-
const external_history_namespaceObject = require("history");
|
|
272
|
-
;// external "react"
|
|
273
|
-
const external_react_namespaceObject = require("react");
|
|
274
|
-
;// ./src/spouts/router.tsx
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
function routerSpout(options) {
|
|
280
|
-
const createRouteComponent = router => function Router({
|
|
281
|
-
children
|
|
282
|
-
}) {
|
|
283
|
-
const resolveWith = options.useResolveWith();
|
|
284
|
-
return /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(router_namespaceObject.RouteProvider, {
|
|
285
|
-
router: router,
|
|
286
|
-
resolveWith: resolveWith,
|
|
287
|
-
onChange: options.onChange,
|
|
288
|
-
children: children
|
|
289
|
-
});
|
|
290
|
-
};
|
|
291
|
-
return next => async props => {
|
|
292
|
-
const history = (0,external_history_namespaceObject.createBrowserHistory)();
|
|
293
|
-
const router = options.createRouter(history);
|
|
294
|
-
const matchedRoutes = router.getMatchedRoutes(history.location.pathname);
|
|
295
|
-
const nextProps = await next({
|
|
296
|
-
...props,
|
|
297
|
-
matchedRoutes,
|
|
298
|
-
router
|
|
299
|
-
});
|
|
300
|
-
const Router = createRouteComponent(router);
|
|
301
|
-
return {
|
|
302
|
-
...nextProps,
|
|
303
|
-
matchedRoutes,
|
|
304
|
-
router,
|
|
305
|
-
app: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(Router, {
|
|
306
|
-
children: nextProps.app
|
|
307
|
-
})
|
|
308
|
-
};
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
;// ./src/spouts/json.tsx
|
|
312
|
-
function JSONSpout({
|
|
313
|
-
id = 'anansi-json'
|
|
314
|
-
} = {}) {
|
|
315
|
-
return next => async props => {
|
|
316
|
-
const getInitialData = key => {
|
|
317
|
-
const globalId = `${id}.${key}`;
|
|
318
|
-
return new Promise((resolve, reject) => {
|
|
319
|
-
let el;
|
|
320
|
-
if (el = document.getElementById(globalId)) {
|
|
321
|
-
resolve(getDataFromEl(el, globalId));
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
document.addEventListener('DOMContentLoaded', () => {
|
|
325
|
-
el = document.getElementById(globalId);
|
|
326
|
-
if (el) resolve(getDataFromEl(el, globalId));else reject(new Error(`failed to find DOM with ${key} state`));
|
|
327
|
-
});
|
|
328
|
-
});
|
|
329
|
-
};
|
|
330
|
-
return {
|
|
331
|
-
...(await next({
|
|
332
|
-
...props,
|
|
333
|
-
getInitialData
|
|
334
|
-
})),
|
|
335
|
-
getInitialData
|
|
336
|
-
};
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
function getDataFromEl(el, key) {
|
|
340
|
-
if (el.text === undefined) {
|
|
341
|
-
console.error(`#${key} is completely empty. This could be due to CSP issues.`);
|
|
342
|
-
}
|
|
343
|
-
return el?.text ? JSON.parse(el?.text) : undefined;
|
|
344
|
-
}
|
|
345
|
-
;// ./src/spouts/app.tsx
|
|
346
|
-
const appSpout = app => props => Promise.resolve({
|
|
347
|
-
...props,
|
|
348
|
-
app
|
|
349
|
-
});
|
|
350
|
-
/* harmony default export */ const app = (appSpout);
|
|
351
|
-
;// ./src/spouts/navigator.context.tsx
|
|
352
|
-
|
|
353
|
-
const NavigatorContext = /*#__PURE__*/(0,external_react_namespaceObject.createContext)(undefined);
|
|
354
|
-
function useNavigator() {
|
|
355
|
-
const context = (0,external_react_namespaceObject.useContext)(NavigatorContext);
|
|
356
|
-
if (context === undefined) {
|
|
357
|
-
throw new Error('useNavigator must be used within a NavigatorProvider');
|
|
358
|
-
}
|
|
359
|
-
return context;
|
|
360
|
-
}
|
|
361
|
-
function parseAcceptLanguage(header) {
|
|
362
|
-
if (!header) {
|
|
363
|
-
return {
|
|
364
|
-
language: 'en',
|
|
365
|
-
languages: ['en']
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
const parsed = header.split(',').map(part => {
|
|
369
|
-
const [lang, qPart] = part.trim().split(';');
|
|
370
|
-
const q = qPart ? parseFloat(qPart.replace('q=', '')) : 1;
|
|
371
|
-
return {
|
|
372
|
-
lang: lang.trim(),
|
|
373
|
-
q
|
|
374
|
-
};
|
|
375
|
-
}).sort((a, b) => b.q - a.q).map(({
|
|
376
|
-
lang
|
|
377
|
-
}) => lang);
|
|
378
|
-
return {
|
|
379
|
-
language: parsed[0] ?? 'en',
|
|
380
|
-
languages: parsed.length > 0 ? parsed : ['en']
|
|
381
|
-
};
|
|
382
|
-
}
|
|
383
|
-
;// ./src/spouts/navigator.tsx
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
function navigatorSpout() {
|
|
388
|
-
return next => async props => {
|
|
389
|
-
const nextProps = await next(props);
|
|
390
|
-
const navigatorProps = await props.getInitialData('navigator').catch(e => {
|
|
391
|
-
console.warn('Navigator initial data could not load, using client navigator. Error:', e);
|
|
392
|
-
return {
|
|
393
|
-
language: navigator.language,
|
|
394
|
-
languages: [...navigator.languages]
|
|
395
|
-
};
|
|
396
|
-
});
|
|
397
|
-
return {
|
|
398
|
-
...nextProps,
|
|
399
|
-
navigator: navigatorProps,
|
|
400
|
-
app: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(NavigatorContext, {
|
|
401
|
-
value: navigatorProps,
|
|
402
|
-
children: nextProps.app
|
|
403
|
-
})
|
|
404
|
-
};
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
;// ./src/spouts/antd.tsx
|
|
408
|
-
|
|
409
|
-
function antdSpout() {
|
|
410
|
-
return next => async props => {
|
|
411
|
-
const {
|
|
412
|
-
createCache,
|
|
413
|
-
StyleProvider
|
|
414
|
-
} = await Promise.resolve(/* import() */).then(__webpack_require__.t.bind(__webpack_require__, 5, 23));
|
|
415
|
-
const cache = createCache();
|
|
416
|
-
const nextProps = await next(props);
|
|
417
|
-
return {
|
|
418
|
-
...nextProps,
|
|
419
|
-
app: /*#__PURE__*/(0,jsx_runtime_namespaceObject.jsx)(StyleProvider, {
|
|
420
|
-
cache: cache,
|
|
421
|
-
children: nextProps.app
|
|
422
|
-
})
|
|
423
|
-
};
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
;// ./src/index.ts
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
})();
|
|
437
|
-
|
|
438
|
-
module.exports = __webpack_exports__;
|
|
439
|
-
/******/ })()
|
|
440
|
-
;
|
|
441
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQztNQUNELE9BQU87UUFDTDRDLFFBQVEsRUFBRW1CLFNBQVMsQ0FBQ25CLFFBQVE7UUFDNUJDLFNBQVMsRUFBRSxDQUFDLEdBQUdrQixTQUFTLENBQUNsQixTQUFTO01BQ3BDLENBQUM7SUFDSCxDQUFDLENBQUM7SUFFSixPQUFPO01BQ0wsR0FBR3hELFNBQVM7TUFDWjBFLFNBQVMsRUFBRUYsY0FBYztNQUN6Qi9FLEdBQUcsZUFDRFUsbUNBQUEsQ0FBQytDLGdCQUFnQjtRQUFDeUIsS0FBSyxFQUFFSCxjQUFlO1FBQUF4RCxRQUFBLEVBQ3JDaEIsU0FBUyxDQUFDUDtNQUFHLENBQ0U7SUFFdEIsQ0FBQztFQUNILENBQUM7QUFDSCxDOzs7QUNoQ2UsU0FBU21GLFNBQVNBLENBQUEsRUFBZ0I7RUFDL0MsT0FBTzlFLElBQUksSUFBSSxNQUFNQyxLQUFLLElBQUk7SUFDNUIsTUFBTTtNQUFFOEUsV0FBVztNQUFFQztJQUFjLENBQUMsR0FBRyxNQUFNLDRGQUE2QjtJQUMxRSxNQUFNQyxLQUFLLEdBQUdGLFdBQVcsQ0FBQyxDQUFDO0lBRTNCLE1BQU03RSxTQUFTLEdBQUcsTUFBTUYsSUFBSSxDQUFDQyxLQUFLLENBQUM7SUFFbkMsT0FBTztNQUNMLEdBQUdDLFNBQVM7TUFDWlAsR0FBRyxlQUFFVSxtQ0FBQSxDQUFDMkUsYUFBYTtRQUFDQyxLQUFLLEVBQUVBLEtBQU07UUFBQS9ELFFBQUEsRUFBRWhCLFNBQVMsQ0FBQ1A7TUFBRyxDQUFnQjtJQUNsRSxDQUFDO0VBQ0gsQ0FBQztBQUNILEM7O0FDZDBEO0FBQ007QUFDSTtBQUNSO0FBQ0o7QUFDRjtBQUNZO0FBQ1YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAZGF0YS1jbGllbnQvcmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAYW50LWRlc2lnbi9jc3NpbmpzXCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2Vuc3VyZSBjaHVuayIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvZ2V0IG1pbmktY3NzIGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvd2VicGFjay9ydW50aW1lL3JlcXVpcmUgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1kb20vY2xpZW50XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2Zsb29kU3BvdXRzLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2RvY3VtZW50LnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJAZGF0YS1jbGllbnQvcmVhY3QvcmVkdXhcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC9qc3gtcnVudGltZVwiIiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvZGF0YUNsaWVudC50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwiQGFuYW5zaS9yb3V0ZXJcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvZXh0ZXJuYWwgY29tbW9uanMgXCJoaXN0b3J5XCIiLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL3JvdXRlci50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9qc29uLnRzeCIsIndlYnBhY2s6Ly9AYW5hbnNpL2NvcmUvLi9zcmMvc3BvdXRzL2FwcC50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9uYXZpZ2F0b3IuY29udGV4dC50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL3Nwb3V0cy9uYXZpZ2F0b3IudHN4Iiwid2VicGFjazovL0BhbmFuc2kvY29yZS8uL3NyYy9zcG91dHMvYW50ZC50c3giLCJ3ZWJwYWNrOi8vQGFuYW5zaS9jb3JlLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBkYXRhLWNsaWVudC9yZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYW50LWRlc2lnbi9jc3NpbmpzXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7ICh0eXBlb2YgY3VycmVudCA9PSAnb2JqZWN0JyB8fCB0eXBlb2YgY3VycmVudCA9PSAnZnVuY3Rpb24nKSAmJiAhfmxlYWZQcm90b3R5cGVzLmluZGV4T2YoY3VycmVudCk7IGN1cnJlbnQgPSBnZXRQcm90byhjdXJyZW50KSkge1xuXHRcdE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGN1cnJlbnQpLmZvckVhY2goKGtleSkgPT4gKGRlZltrZXldID0gKCkgPT4gKHZhbHVlW2tleV0pKSk7XG5cdH1cblx0ZGVmWydkZWZhdWx0J10gPSAoKSA9PiAodmFsdWUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGRlZik7XG5cdHJldHVybiBucztcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmNodW5rLmpzXCI7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5taW5pQ3NzRiA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7IiwiLy8gbm8gYmFzZVVSSVxuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGNodW5rc1xuLy8gXCIxXCIgbWVhbnMgXCJsb2FkZWRcIiwgb3RoZXJ3aXNlIG5vdCBsb2FkZWQgeWV0XG52YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuXHQwOiAxXG59O1xuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbnZhciBpbnN0YWxsQ2h1bmsgPSAoY2h1bmspID0+IHtcblx0dmFyIG1vcmVNb2R1bGVzID0gY2h1bmsubW9kdWxlcywgY2h1bmtJZHMgPSBjaHVuay5pZHMsIHJ1bnRpbWUgPSBjaHVuay5ydW50aW1lO1xuXHRmb3IodmFyIG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1vcmVNb2R1bGVzLCBtb2R1bGVJZCkpIHtcblx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubVttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG5cdFx0fVxuXHR9XG5cdGlmKHJ1bnRpbWUpIHJ1bnRpbWUoX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBjaHVua0lkcy5sZW5ndGg7IGkrKylcblx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZHNbaV1dID0gMTtcblxufTtcblxuLy8gcmVxdWlyZSgpIGNodW5rIGxvYWRpbmcgZm9yIGphdmFzY3JpcHRcbl9fd2VicGFja19yZXF1aXJlX18uZi5yZXF1aXJlID0gKGNodW5rSWQsIHByb21pc2VzKSA9PiB7XG5cdC8vIFwiMVwiIGlzIHRoZSBzaWduYWwgZm9yIFwiYWxyZWFkeSBsb2FkZWRcIlxuXHRpZighaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0aWYodHJ1ZSkgeyAvLyBhbGwgY2h1bmtzIGhhdmUgSlNcblx0XHRcdHZhciBpbnN0YWxsZWRDaHVuayA9IHJlcXVpcmUoXCIuL1wiICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpKTtcblx0XHRcdGlmICghaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdKSB7XG5cdFx0XHRcdGluc3RhbGxDaHVuayhpbnN0YWxsZWRDaHVuayk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDE7XG5cdH1cbn07XG5cbi8vIG5vIGV4dGVybmFsIGluc3RhbGwgY2h1bmtcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdCIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QtZG9tL2NsaWVudFwiKTsiLCJpbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGh5ZHJhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGFzeW5jIGZ1bmN0aW9uIGZsb29kU3BvdXRzKFxuICBzcG91dHM6IChwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IFByb21pc2U8e1xuICAgIGFwcDogSlNYLkVsZW1lbnQ7XG4gIH0+LFxuICB7IHJvb3RJZCA9ICdhbmFuc2ktcm9vdCcgfTogeyByb290SWQ/OiBzdHJpbmcgfSA9IHt9LFxuKSB7XG4gIGNvbnN0IHsgYXBwIH0gPSBhd2FpdCBzcG91dHMoe30pO1xuXG4gIGh5ZHJhdGVSb290KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHJvb3RJZCkgPz8gZG9jdW1lbnQsIGFwcCk7XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgdHlwZSB7IENsaWVudFNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRvY3VtZW50U3BvdXQob3B0aW9uczoge1xuICBoZWFkPzogUmVhY3QuUmVhY3ROb2RlO1xuICB0aXRsZTogc3RyaW5nO1xufSk6IENsaWVudFNwb3V0IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuXG4gICAgcmV0dXJuIG5leHRQcm9wcztcbiAgfTtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQGRhdGEtY2xpZW50L3JlYWN0L3JlZHV4XCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7IiwiaW1wb3J0IHsgdHlwZSBNYW5hZ2VyIH0gZnJvbSAnQGRhdGEtY2xpZW50L3JlYWN0JztcbmltcG9ydCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJ0BkYXRhLWNsaWVudC9yZWFjdC9yZWR1eCc7XG5cbmltcG9ydCB0eXBlIHsgQ2xpZW50U3BvdXQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGF0YUNsaWVudFNwb3V0KFxuICBvcHRpb25zOiB7XG4gICAgZ2V0TWFuYWdlcnM/OiAoKSA9PiBNYW5hZ2VyW107XG4gIH0gPSB7fSxcbik6IENsaWVudFNwb3V0PHsgZ2V0SW5pdGlhbERhdGE6IChrZXk6IHN0cmluZykgPT4gUHJvbWlzZTxhbnk+IH0+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuICAgIGNvbnN0IFtkYXRhLCB7IERhdGFQcm92aWRlciB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHByb3BzLmdldEluaXRpYWxEYXRhKCdkYXRhY2xpZW50JykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhdGEgQ2xpZW50IGluaXRpYWwgZGF0YSBjb3VsZCBub3QgbG9hZDonLCBlKTtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgICAgIH0pLFxuICAgICAgaW1wb3J0KCcuL2RhdGFDbGllbnQucHJvdmlkZXIuanMnKSxcbiAgICBdKTtcblxuICAgIGlmICghZGF0YSkge1xuICAgICAgY29uc29sZS5lcnJvcignRGF0YSBDbGllbnQgaW5pdCBkYXRhIG5vdCBmb3VuZCcpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5uZXh0UHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPERhdGFQcm92aWRlciBpbml0aWFsU3RhdGU9e2RhdGF9IG1hbmFnZXJzPXtvcHRpb25zPy5nZXRNYW5hZ2Vycz8uKCl9PlxuICAgICAgICAgIHtuZXh0UHJvcHMuYXBwfVxuICAgICAgICA8L0RhdGFQcm92aWRlcj5cbiAgICAgICksXG4gICAgfTtcbiAgfTtcbn1cbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQGFuYW5zaS9yb3V0ZXJcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJoaXN0b3J5XCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3RcIik7IiwiaW1wb3J0IHsgUm91dGUsIFJvdXRlUHJvdmlkZXIsIFJvdXRlQ29udHJvbGxlciB9IGZyb20gJ0BhbmFuc2kvcm91dGVyJztcbmltcG9ydCB7IGNyZWF0ZUJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnaGlzdG9yeSc7XG5pbXBvcnQgdHlwZSB7IFVwZGF0ZSB9IGZyb20gJ2hpc3RvcnknO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBDcmVhdGVSb3V0ZXIsIENsaWVudFNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJvdXRlclNwb3V0PFJlc29sdmVXaXRoPihvcHRpb25zOiB7XG4gIHJlc29sdmVXaXRoPzogYW55O1xuICB1c2VSZXNvbHZlV2l0aDogKCkgPT4gUmVzb2x2ZVdpdGg7XG4gIGNyZWF0ZVJvdXRlcjogQ3JlYXRlUm91dGVyPFJlc29sdmVXaXRoPjtcbiAgb25DaGFuZ2U/OiAodXBkYXRlOiBVcGRhdGUsIGNhbGxiYWNrOiAoKSA9PiB2b2lkIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xufSk6IENsaWVudFNwb3V0PFxuICBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAge1xuICAgIG1hdGNoZWRSb3V0ZXM6IFJvdXRlPFJlc29sdmVXaXRoLCBhbnk+W107XG4gIH0gJiB7XG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+O1xuICB9XG4+IHtcbiAgY29uc3QgY3JlYXRlUm91dGVDb21wb25lbnQgPSAoXG4gICAgcm91dGVyOiBSb3V0ZUNvbnRyb2xsZXI8Um91dGU8UmVzb2x2ZVdpdGgsIGFueT4+LFxuICApID0+XG4gICAgZnVuY3Rpb24gUm91dGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0pIHtcbiAgICAgIGNvbnN0IHJlc29sdmVXaXRoID0gb3B0aW9ucy51c2VSZXNvbHZlV2l0aCgpO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Um91dGVQcm92aWRlclxuICAgICAgICAgIHJvdXRlcj17cm91dGVyfVxuICAgICAgICAgIHJlc29sdmVXaXRoPXtyZXNvbHZlV2l0aH1cbiAgICAgICAgICBvbkNoYW5nZT17b3B0aW9ucy5vbkNoYW5nZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9Sb3V0ZVByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9O1xuXG4gIHJldHVybiBuZXh0ID0+IGFzeW5jIHByb3BzID0+IHtcbiAgICBjb25zdCBoaXN0b3J5ID0gY3JlYXRlQnJvd3Nlckhpc3RvcnkoKTtcbiAgICBjb25zdCByb3V0ZXIgPSBvcHRpb25zLmNyZWF0ZVJvdXRlcihoaXN0b3J5KTtcbiAgICBjb25zdCBtYXRjaGVkUm91dGVzID0gcm91dGVyLmdldE1hdGNoZWRSb3V0ZXMoaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSk7XG5cbiAgICBjb25zdCBuZXh0UHJvcHMgPSBhd2FpdCBuZXh0KHsgLi4ucHJvcHMsIG1hdGNoZWRSb3V0ZXMsIHJvdXRlciB9KTtcblxuICAgIGNvbnN0IFJvdXRlciA9IGNyZWF0ZVJvdXRlQ29tcG9uZW50KHJvdXRlcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIG1hdGNoZWRSb3V0ZXMsXG4gICAgICByb3V0ZXIsXG4gICAgICBhcHA6IDxSb3V0ZXI+e25leHRQcm9wcy5hcHB9PC9Sb3V0ZXI+LFxuICAgIH07XG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IENsaWVudFNwb3V0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEpTT05TcG91dCh7XG4gIGlkID0gJ2FuYW5zaS1qc29uJyxcbn06IHsgaWQ/OiBzdHJpbmcgfSA9IHt9KTogQ2xpZW50U3BvdXQ8XG4gIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICB7IGdldEluaXRpYWxEYXRhOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8YW55PiB9XG4+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IGdldEluaXRpYWxEYXRhID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBnbG9iYWxJZCA9IGAke2lkfS4ke2tleX1gO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBsZXQgZWw6IEhUTUxTY3JpcHRFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgaWYgKChlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdsb2JhbElkKSBhcyBhbnkpKSB7XG4gICAgICAgICAgcmVzb2x2ZShnZXREYXRhRnJvbUVsKGVsLCBnbG9iYWxJZCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZ2xvYmFsSWQpIGFzIGFueTtcbiAgICAgICAgICBpZiAoZWwpIHJlc29sdmUoZ2V0RGF0YUZyb21FbChlbCwgZ2xvYmFsSWQpKTtcbiAgICAgICAgICBlbHNlIHJlamVjdChuZXcgRXJyb3IoYGZhaWxlZCB0byBmaW5kIERPTSB3aXRoICR7a2V5fSBzdGF0ZWApKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLihhd2FpdCBuZXh0KHsgLi4ucHJvcHMsIGdldEluaXRpYWxEYXRhIH0pKSwgZ2V0SW5pdGlhbERhdGEgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YUZyb21FbChlbDogSFRNTFNjcmlwdEVsZW1lbnQsIGtleTogc3RyaW5nKSB7XG4gIGlmIChlbC50ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgYCMke2tleX0gaXMgY29tcGxldGVseSBlbXB0eS4gVGhpcyBjb3VsZCBiZSBkdWUgdG8gQ1NQIGlzc3Vlcy5gLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGVsPy50ZXh0ID8gSlNPTi5wYXJzZShlbD8udGV4dCkgOiB1bmRlZmluZWQ7XG59XG4iLCJpbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gJ3JlYWN0JztcbmNvbnN0IGFwcFNwb3V0ID1cbiAgKGFwcDogSlNYLkVsZW1lbnQpID0+XG4gIDxQIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHByb3BzOiBQKSA9PlxuICAgIFByb21pc2UucmVzb2x2ZSh7IC4uLnByb3BzLCBhcHAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGFwcFNwb3V0O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0b3JQcm9wZXJ0aWVzIHtcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgbGFuZ3VhZ2VzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IE5hdmlnYXRvckNvbnRleHQgPSBjcmVhdGVDb250ZXh0PE5hdmlnYXRvclByb3BlcnRpZXMgfCB1bmRlZmluZWQ+KFxuICB1bmRlZmluZWQsXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlTmF2aWdhdG9yKCk6IE5hdmlnYXRvclByb3BlcnRpZXMge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChOYXZpZ2F0b3JDb250ZXh0KTtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndXNlTmF2aWdhdG9yIG11c3QgYmUgdXNlZCB3aXRoaW4gYSBOYXZpZ2F0b3JQcm92aWRlcicpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBY2NlcHRMYW5ndWFnZShoZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHtcbiAgbGFuZ3VhZ2U6IHN0cmluZztcbiAgbGFuZ3VhZ2VzOiByZWFkb25seSBzdHJpbmdbXTtcbn0ge1xuICBpZiAoIWhlYWRlcikge1xuICAgIHJldHVybiB7IGxhbmd1YWdlOiAnZW4nLCBsYW5ndWFnZXM6IFsnZW4nXSB9O1xuICB9XG5cbiAgY29uc3QgcGFyc2VkID0gaGVhZGVyXG4gICAgLnNwbGl0KCcsJylcbiAgICAubWFwKHBhcnQgPT4ge1xuICAgICAgY29uc3QgW2xhbmcsIHFQYXJ0XSA9IHBhcnQudHJpbSgpLnNwbGl0KCc7Jyk7XG4gICAgICBjb25zdCBxID0gcVBhcnQgPyBwYXJzZUZsb2F0KHFQYXJ0LnJlcGxhY2UoJ3E9JywgJycpKSA6IDE7XG4gICAgICByZXR1cm4geyBsYW5nOiBsYW5nLnRyaW0oKSwgcSB9O1xuICAgIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IGIucSAtIGEucSlcbiAgICAubWFwKCh7IGxhbmcgfSkgPT4gbGFuZyk7XG5cbiAgcmV0dXJuIHtcbiAgICBsYW5ndWFnZTogcGFyc2VkWzBdID8/ICdlbicsXG4gICAgbGFuZ3VhZ2VzOiBwYXJzZWQubGVuZ3RoID4gMCA/IHBhcnNlZCA6IFsnZW4nXSxcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7IE5hdmlnYXRvckNvbnRleHQgfSBmcm9tICcuL25hdmlnYXRvci5jb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgTmF2aWdhdG9yUHJvcGVydGllcyB9IGZyb20gJy4vbmF2aWdhdG9yLmNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBDbGllbnRTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuYXZpZ2F0b3JTcG91dCgpOiBDbGllbnRTcG91dDx7XG4gIGdldEluaXRpYWxEYXRhOiAoa2V5OiBzdHJpbmcpID0+IFByb21pc2U8YW55Pjtcbn0+IHtcbiAgcmV0dXJuIG5leHQgPT4gYXN5bmMgcHJvcHMgPT4ge1xuICAgIGNvbnN0IG5leHRQcm9wcyA9IGF3YWl0IG5leHQocHJvcHMpO1xuICAgIGNvbnN0IG5hdmlnYXRvclByb3BzOiBOYXZpZ2F0b3JQcm9wZXJ0aWVzID0gYXdhaXQgcHJvcHNcbiAgICAgIC5nZXRJbml0aWFsRGF0YSgnbmF2aWdhdG9yJylcbiAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdOYXZpZ2F0b3IgaW5pdGlhbCBkYXRhIGNvdWxkIG5vdCBsb2FkLCB1c2luZyBjbGllbnQgbmF2aWdhdG9yLiBFcnJvcjonLFxuICAgICAgICAgIGUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFuZ3VhZ2U6IG5hdmlnYXRvci5sYW5ndWFnZSxcbiAgICAgICAgICBsYW5ndWFnZXM6IFsuLi5uYXZpZ2F0b3IubGFuZ3VhZ2VzXSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm5leHRQcm9wcyxcbiAgICAgIG5hdmlnYXRvcjogbmF2aWdhdG9yUHJvcHMsXG4gICAgICBhcHA6IChcbiAgICAgICAgPE5hdmlnYXRvckNvbnRleHQgdmFsdWU9e25hdmlnYXRvclByb3BzfT5cbiAgICAgICAgICB7bmV4dFByb3BzLmFwcH1cbiAgICAgICAgPC9OYXZpZ2F0b3JDb250ZXh0PlxuICAgICAgKSxcbiAgICB9O1xuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBDbGllbnRTcG91dCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbnRkU3BvdXQoKTogQ2xpZW50U3BvdXQge1xuICByZXR1cm4gbmV4dCA9PiBhc3luYyBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBjcmVhdGVDYWNoZSwgU3R5bGVQcm92aWRlciB9ID0gYXdhaXQgaW1wb3J0KCdAYW50LWRlc2lnbi9jc3NpbmpzJyk7XG4gICAgY29uc3QgY2FjaGUgPSBjcmVhdGVDYWNoZSgpO1xuXG4gICAgY29uc3QgbmV4dFByb3BzID0gYXdhaXQgbmV4dChwcm9wcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubmV4dFByb3BzLFxuICAgICAgYXBwOiA8U3R5bGVQcm92aWRlciBjYWNoZT17Y2FjaGV9PntuZXh0UHJvcHMuYXBwfTwvU3R5bGVQcm92aWRlcj4sXG4gICAgfTtcbiAgfTtcbn1cbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgZmxvb2RTcG91dHMgfSBmcm9tICcuL2Zsb29kU3BvdXRzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZG9jdW1lbnRTcG91dCB9IGZyb20gJy4vc3BvdXRzL2RvY3VtZW50LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZGF0YUNsaWVudFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvZGF0YUNsaWVudC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJvdXRlclNwb3V0IH0gZnJvbSAnLi9zcG91dHMvcm91dGVyLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSlNPTlNwb3V0IH0gZnJvbSAnLi9zcG91dHMvanNvbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFwcFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvYXBwLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbmF2aWdhdG9yU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9uYXZpZ2F0b3IuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhbnRkU3BvdXQgfSBmcm9tICcuL3Nwb3V0cy9hbnRkLmpzJztcbmV4cG9ydCB7IHVzZU5hdmlnYXRvciB9IGZyb20gJy4vc3BvdXRzL25hdmlnYXRvci5jb250ZXh0LmpzJztcbmV4cG9ydCB0eXBlIHsgTmF2aWdhdG9yUHJvcGVydGllcyB9IGZyb20gJy4vc3BvdXRzL25hdmlnYXRvci5jb250ZXh0LmpzJztcbmV4cG9ydCB0eXBlIHsgU2VydmVyUHJvcHMgfSBmcm9tICcuL3Nwb3V0cy90eXBlcy5qcyc7XG5leHBvcnQgdHlwZSB7IENsaWVudFNwb3V0IGFzIFNwb3V0IH0gZnJvbSAnLi9zcG91dHMvdHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbImh5ZHJhdGVSb290IiwiZmxvb2RTcG91dHMiLCJzcG91dHMiLCJyb290SWQiLCJhcHAiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZG9jdW1lbnRTcG91dCIsIm9wdGlvbnMiLCJuZXh0IiwicHJvcHMiLCJuZXh0UHJvcHMiLCJpbml0aWFsU3RhdGUiLCJqc3giLCJfanN4IiwiZGF0YUNsaWVudFNwb3V0IiwiZGF0YSIsIkRhdGFQcm92aWRlciIsIlByb21pc2UiLCJhbGwiLCJnZXRJbml0aWFsRGF0YSIsImNhdGNoIiwiZSIsImNvbnNvbGUiLCJlcnJvciIsIm1hbmFnZXJzIiwiZ2V0TWFuYWdlcnMiLCJjaGlsZHJlbiIsIlJvdXRlUHJvdmlkZXIiLCJjcmVhdGVCcm93c2VySGlzdG9yeSIsIlJlYWN0Iiwicm91dGVyU3BvdXQiLCJjcmVhdGVSb3V0ZUNvbXBvbmVudCIsInJvdXRlciIsIlJvdXRlciIsInJlc29sdmVXaXRoIiwidXNlUmVzb2x2ZVdpdGgiLCJvbkNoYW5nZSIsImhpc3RvcnkiLCJjcmVhdGVSb3V0ZXIiLCJtYXRjaGVkUm91dGVzIiwiZ2V0TWF0Y2hlZFJvdXRlcyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJKU09OU3BvdXQiLCJpZCIsImtleSIsImdsb2JhbElkIiwicmVzb2x2ZSIsInJlamVjdCIsImVsIiwiZ2V0RGF0YUZyb21FbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJFcnJvciIsInRleHQiLCJ1bmRlZmluZWQiLCJKU09OIiwicGFyc2UiLCJhcHBTcG91dCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiTmF2aWdhdG9yQ29udGV4dCIsInVzZU5hdmlnYXRvciIsImNvbnRleHQiLCJwYXJzZUFjY2VwdExhbmd1YWdlIiwiaGVhZGVyIiwibGFuZ3VhZ2UiLCJsYW5ndWFnZXMiLCJwYXJzZWQiLCJzcGxpdCIsIm1hcCIsInBhcnQiLCJsYW5nIiwicVBhcnQiLCJ0cmltIiwicSIsInBhcnNlRmxvYXQiLCJyZXBsYWNlIiwic29ydCIsImEiLCJiIiwibGVuZ3RoIiwibmF2aWdhdG9yU3BvdXQiLCJuYXZpZ2F0b3JQcm9wcyIsIndhcm4iLCJuYXZpZ2F0b3IiLCJ2YWx1ZSIsImFudGRTcG91dCIsImNyZWF0ZUNhY2hlIiwiU3R5bGVQcm92aWRlciIsImNhY2hlIiwiZGVmYXVsdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
|