@openmrs/esm-app-shell 5.5.1-pre.1649 → 5.5.1-pre.1659
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/.turbo/turbo-build.log +103 -103
- package/dist/1b2943adae586d6d.js +1 -0
- package/dist/29ae62d7dea61f4e.js +1 -0
- package/dist/2c566b2eb7d4c244.js +1 -0
- package/dist/36dbff8e7b9a8907.js +1 -0
- package/dist/72749ca23b74ec13.js +1 -0
- package/dist/b0e030cdac260058.js +1 -0
- package/dist/b44e488f33333e3e.js +1 -0
- package/dist/b44e488f33333e3e.js.map +1 -0
- package/dist/cd18961c33262d5e.js +1 -0
- package/dist/dae6aa8bf297bfda.js +1 -0
- package/dist/index.html +1 -1
- package/dist/openmrs.10df091526346730.js +2 -0
- package/dist/openmrs.10df091526346730.js.map +1 -0
- package/dist/service-worker.js +1 -1
- package/dist/service-worker.js.map +1 -1
- package/lib/106d585dd7a35c62.js +22 -0
- package/lib/6783af2ad686c80a.js +22 -0
- package/lib/{2d6f78077a8d36e8.js → 82dec1e32631398b.js} +66 -2
- package/lib/83f956513204a13c.js +22 -0
- package/lib/b0a76e14361e37c1.js +22 -0
- package/lib/b2d16f1e56ce88c5.js +22 -0
- package/lib/beda13d9de073afa.js +22 -0
- package/lib/e0bc6a59e6b7007f.js +22 -0
- package/lib/e3d950de8b82fa70.js +22 -0
- package/lib/esm-devtools-app/667.js +1 -0
- package/lib/esm-devtools-app/667.js.map +1 -0
- package/lib/esm-devtools-app/884.js +1 -0
- package/lib/esm-devtools-app/884.js.map +1 -0
- package/lib/esm-devtools-app/889.js +1 -1
- package/lib/esm-devtools-app/889.js.map +1 -1
- package/lib/esm-devtools-app/main.js +1 -1
- package/lib/esm-devtools-app/main.js.map +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js +1 -1
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json +41 -14
- package/lib/esm-devtools-app/openmrs-esm-devtools-app.js.map +1 -1
- package/lib/esm-devtools-app/routes.json +1 -1
- package/lib/esm-implementer-tools-app/426.js +1 -1
- package/lib/esm-implementer-tools-app/482.js +1 -0
- package/lib/esm-implementer-tools-app/482.js.map +1 -0
- package/lib/esm-implementer-tools-app/560.js +1 -1
- package/lib/esm-implementer-tools-app/587.js +1 -1
- package/lib/esm-implementer-tools-app/657.js +1 -0
- package/lib/esm-implementer-tools-app/657.js.map +1 -0
- package/lib/esm-implementer-tools-app/71.js +1 -0
- package/lib/esm-implementer-tools-app/71.js.map +1 -0
- package/lib/esm-implementer-tools-app/72.js +2 -0
- package/lib/esm-implementer-tools-app/72.js.map +1 -0
- package/lib/esm-implementer-tools-app/727.js +1 -1
- package/lib/esm-implementer-tools-app/791.js +1 -0
- package/lib/esm-implementer-tools-app/791.js.map +1 -0
- package/lib/esm-implementer-tools-app/889.js +1 -1
- package/lib/esm-implementer-tools-app/889.js.map +1 -1
- package/lib/esm-implementer-tools-app/main.js +1 -1
- package/lib/esm-implementer-tools-app/main.js.map +1 -1
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js +1 -1
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json +116 -65
- package/lib/esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.map +1 -1
- package/lib/esm-implementer-tools-app/routes.json +1 -1
- package/lib/esm-login-app/363.js +1 -1
- package/lib/esm-login-app/363.js.map +1 -1
- package/lib/esm-login-app/574.js +1 -1
- package/lib/esm-login-app/667.js +1 -0
- package/lib/esm-login-app/667.js.map +1 -0
- package/lib/esm-login-app/884.js +1 -0
- package/lib/esm-login-app/884.js.map +1 -0
- package/lib/esm-login-app/889.js +1 -1
- package/lib/esm-login-app/889.js.map +1 -1
- package/lib/esm-login-app/main.js +1 -1
- package/lib/esm-login-app/main.js.map +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js +1 -1
- package/lib/esm-login-app/openmrs-esm-login-app.js.buildmanifest.json +60 -33
- package/lib/esm-login-app/openmrs-esm-login-app.js.map +1 -1
- package/lib/esm-login-app/routes.json +1 -1
- package/lib/esm-offline-tools-app/667.js +1 -0
- package/lib/esm-offline-tools-app/667.js.map +1 -0
- package/lib/esm-offline-tools-app/884.js +1 -0
- package/lib/esm-offline-tools-app/884.js.map +1 -0
- package/lib/esm-offline-tools-app/889.js +1 -1
- package/lib/esm-offline-tools-app/889.js.map +1 -1
- package/lib/esm-offline-tools-app/main.js +1 -1
- package/lib/esm-offline-tools-app/main.js.map +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js +1 -1
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json +40 -13
- package/lib/esm-offline-tools-app/openmrs-esm-offline-tools-app.js.map +1 -1
- package/lib/esm-offline-tools-app/routes.json +1 -1
- package/lib/esm-primary-navigation-app/667.js +1 -0
- package/lib/esm-primary-navigation-app/667.js.map +1 -0
- package/lib/esm-primary-navigation-app/884.js +1 -0
- package/lib/esm-primary-navigation-app/884.js.map +1 -0
- package/lib/esm-primary-navigation-app/889.js +1 -1
- package/lib/esm-primary-navigation-app/889.js.map +1 -1
- package/lib/esm-primary-navigation-app/main.js +1 -1
- package/lib/esm-primary-navigation-app/main.js.map +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js +1 -1
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json +40 -13
- package/lib/esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.map +1 -1
- package/lib/esm-primary-navigation-app/routes.json +1 -1
- package/lib/index.html +1 -1
- package/lib/openmrs.js +87 -35
- package/lib/service-worker.js +1 -200
- package/package.json +3 -3
- package/src/locale.ts +16 -7
- package/dist/a2ad6443a3b43c36.js +0 -1
- package/dist/a2ad6443a3b43c36.js.map +0 -1
- package/dist/openmrs.2268cde317dfc66c.js +0 -2
- package/dist/openmrs.2268cde317dfc66c.js.map +0 -1
- package/lib/esm-devtools-app/729.js +0 -1
- package/lib/esm-devtools-app/729.js.map +0 -1
- package/lib/esm-implementer-tools-app/651.js +0 -1
- package/lib/esm-implementer-tools-app/651.js.map +0 -1
- package/lib/esm-implementer-tools-app/738.js +0 -1
- package/lib/esm-implementer-tools-app/738.js.map +0 -1
- package/lib/esm-implementer-tools-app/913.js +0 -2
- package/lib/esm-implementer-tools-app/913.js.map +0 -1
- package/lib/esm-login-app/729.js +0 -1
- package/lib/esm-login-app/729.js.map +0 -1
- package/lib/esm-offline-tools-app/729.js +0 -1
- package/lib/esm-offline-tools-app/729.js.map +0 -1
- package/lib/esm-primary-navigation-app/729.js +0 -1
- package/lib/esm-primary-navigation-app/729.js.map +0 -1
- /package/dist/{openmrs.2268cde317dfc66c.js.LICENSE.txt → openmrs.10df091526346730.js.LICENSE.txt} +0 -0
- /package/lib/esm-implementer-tools-app/{913.js.LICENSE.txt → 72.js.LICENSE.txt} +0 -0
package/lib/service-worker.js
CHANGED
|
@@ -598,7 +598,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
598
598
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
599
599
|
|
|
600
600
|
"use strict";
|
|
601
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ absoluteWbManifestUrls: () => (/* binding */ absoluteWbManifestUrls),\n/* harmony export */ buildManifestSuffix: () => (/* binding */ buildManifestSuffix),\n/* harmony export */ indexUrl: () => (/* binding */ indexUrl),\n/* harmony export */ omrsCacheName: () => (/* binding */ omrsCacheName),\n/* harmony export */ omrsCachePrefix: () => (/* binding */ omrsCachePrefix),\n/* harmony export */ omrsOfflineCachingStrategyHttpHeaderName: () => (/* binding */ omrsOfflineCachingStrategyHttpHeaderName),\n/* harmony export */ omrsOfflineResponseBodyHttpHeaderName: () => (/* binding */ omrsOfflineResponseBodyHttpHeaderName),\n/* harmony export */ omrsOfflineResponseStatusHttpHeaderName: () => (/* binding */ omrsOfflineResponseStatusHttpHeaderName),\n/* harmony export */ wbManifest: () => (/* binding */ wbManifest)\n/* harmony export */ });\n/* harmony import */ var lodash_es_uniq__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es/uniq */ \"../../../node_modules/lodash-es/uniq.js\");\n\n// note that these constants are also defined in @openmrs/esm-offline\nvar omrsOfflineResponseBodyHttpHeaderName = \"x-omrs-offline-response-body\";\nvar omrsOfflineResponseStatusHttpHeaderName = \"x-omrs-offline-response-status\";\nvar omrsOfflineCachingStrategyHttpHeaderName = \"x-omrs-offline-caching-strategy\";\nvar omrsCachePrefix = \"omrs\";\nvar omrsCacheName = \"\".concat(omrsCachePrefix, \"-spa-cache-v1\");\nvar wbManifest = [{'revision':null,'url':'/openmrs/spa/importmap.json'},{'revision':null,'url':'/openmrs/spa/routes.registry.json'},{'revision':null,'url':'023bd53d342b7463.woff'},{'revision':null,'url':'02acc4469a2fe2e4.woff2'},{'revision':null,'url':'033e03f8663ab9b1.woff'},{'revision':null,'url':'052607e67da262ec.woff'},{'revision':null,'url':'081587ca0db8e63f.woff2'},{'revision':null,'url':'08cf53c4e5e71cf1.woff2'},{'revision':null,'url':'090b2bc014d24ea4.woff2'},{'revision':null,'url':'0a28cd0b47497b71.woff'},{'revision':null,'url':'0a9765a89ff0437d.woff'},{'revision':null,'url':'0ae92bcea615e948.woff2'},{'revision':null,'url':'0be8520d8945b3b7.woff2'},{'revision':null,'url':'0bf6b66a8b86b014.woff'},{'revision':null,'url':'0e7dd073cd8bb0ad.woff2'},{'revision':null,'url':'14869ac5d1830304.woff2'},{'revision':null,'url':'14aaceff85fc8b28.woff2'},{'revision':null,'url':'1590052e1cf8f28d.woff'},{'revision':null,'url':'16f443eed01776ca.woff2'},{'revision':null,'url':'183bae0e53a22182.woff2'},{'revision':null,'url':'19b239a0bb74b27e.woff'},{'revision':null,'url':'19c8f94ccd6289f5.woff2'},{'revision':null,'url':'1ae86565eab7451c.woff2'},{'revision':null,'url':'1c7bf8797e0a9be6.woff2'},{'revision':null,'url':'1d9aff9a93a3bb66.woff'},{'revision':null,'url':'1f266d3619b30f16.woff2'},{'revision':null,'url':'1f8c5a4087a524fd.woff2'},{'revision':null,'url':'20ba2b23c5c0cd0b.woff2'},{'revision':null,'url':'2269d45733c5cf8f.woff'},{'revision':null,'url':'258ecbd235953099.woff'},{'revision':null,'url':'295dd01a1fbfee6d.woff2'},{'revision':null,'url':'2d6f78077a8d36e8.js'},{'revision':null,'url':'2d7f835ab7c7c764.woff'},{'revision':null,'url':'2f66cca99eeead63.woff'},{'revision':null,'url':'2f686985e26e7107.woff2'},{'revision':null,'url':'315eff729e4ccbd9.woff2'},{'revision':null,'url':'32f1e5aadf845e08.woff'},{'revision':null,'url':'338484e1c850669c.woff'},{'revision':null,'url':'33b7a82f1e295190.woff'},{'revision':null,'url':'3674d98ec4a9173d.woff'},{'revision':null,'url':'368d16e3259bf207.woff2'},{'revision':null,'url':'36c49aa341a7079a.woff2'},{'revision':null,'url':'36e1e0430475edee.woff2'},{'revision':null,'url':'3bc19662b8630ee9.woff2'},{'revision':null,'url':'3f645f473b3f8fba.woff2'},{'revision':null,'url':'4095df88acae9e98.woff'},{'revision':null,'url':'4218ac9901b9d36d.woff2'},{'revision':null,'url':'4680ba68412e4da9.woff2'},{'revision':null,'url':'47d7a8698d562a0e.woff'},{'revision':null,'url':'47ec6c9dffe776a0.woff'},{'revision':null,'url':'48e37bd7ebf85a1f.woff2'},{'revision':null,'url':'48edfdf51dfb3160.woff'},{'revision':null,'url':'49af280eabf5f1f5.js'},{'revision':null,'url':'4a35a2746c8ad7a5.woff'},{'revision':null,'url':'4e11b8a7c445255f.woff2'},{'revision':null,'url':'4ea1f5c3baf89fe3.woff'},{'revision':null,'url':'4ea99f41c896bf9d.woff'},{'revision':null,'url':'5005db1d1caf70c7.woff'},{'revision':null,'url':'528a8e7c1c141a31.woff'},{'revision':null,'url':'52ca12f5b516d4ea.woff'},{'revision':null,'url':'537ddd61c5c1fce2.woff2'},{'revision':null,'url':'5432f7541ec25c34.woff'},{'revision':null,'url':'54a95d73a9454ba3.woff'},{'revision':null,'url':'56c4118c0907f151.woff2'},{'revision':null,'url':'5938bc2ae7ec60c0.woff2'},{'revision':null,'url':'594306657c4e44e8.woff'},{'revision':null,'url':'5a538aa477a66067.woff'},{'revision':null,'url':'5c6586155f0d278a.woff2'},{'revision':null,'url':'60ec587649ba812a.woff2'},{'revision':null,'url':'616567cd947eb9dd.woff'},{'revision':null,'url':'65168b59f44caab4.woff'},{'revision':null,'url':'65c0982f98374864.woff'},{'revision':null,'url':'65e6511e035870e1.woff2'},{'revision':null,'url':'661425f6798cd16a.woff2'},{'revision':null,'url':'66b864fe213caf46.woff2'},{'revision':null,'url':'6775fee945132ef9.woff'},{'revision':null,'url':'68bbd362c8e4983b.woff'},{'revision':null,'url':'68d6deec87b6b604.woff'},{'revision':null,'url':'69a7e6d31d390296.woff'},{'revision':null,'url':'69d087d970ee9455.woff2'},{'revision':null,'url':'69fa3fc7363bbc04.woff'},{'revision':null,'url':'6a1f0178b45b2e9e.woff'},{'revision':null,'url':'6c6c45e66ff54281.woff2'},{'revision':null,'url':'6ffb9ed97b21fdc0.woff'},{'revision':null,'url':'7073a7323e92bd11.woff2'},{'revision':null,'url':'718c6cc31274ab1a.woff2'},{'revision':null,'url':'72cdbedfe04be9f9.woff2'},{'revision':null,'url':'7509c9f56fe9e532.woff2'},{'revision':null,'url':'75dc5c5b04adc8bf.woff2'},{'revision':null,'url':'76a7c256fc8b3490.woff'},{'revision':null,'url':'77b48bc05299ecca.woff2'},{'revision':null,'url':'787f56efa306ddbc.woff'},{'revision':null,'url':'7a0a0215c248c73d.woff2'},{'revision':null,'url':'7c4463d9c84f263a.woff'},{'revision':null,'url':'7d112a556b7670d2.woff'},{'revision':null,'url':'7d52d6014b5f2bbc.woff'},{'revision':null,'url':'7f00bebb24e40167.woff2'},{'revision':null,'url':'7f2c6ea3e740417e.woff'},{'revision':null,'url':'802c6176541eeed7.woff2'},{'revision':null,'url':'8080081b3379c637.woff2'},{'revision':null,'url':'8274cc1afc7619f1.woff'},{'revision':null,'url':'8605507b7a8487c4.woff2'},{'revision':null,'url':'8a83d654702f6534.woff2'},{'revision':null,'url':'8ccee65f6cf254ee.woff'},{'revision':null,'url':'8d82a082a4aba439.woff'},{'revision':null,'url':'8de04ae985937b56.woff'},{'revision':null,'url':'8fe71173a13fe571.woff2'},{'revision':null,'url':'90edccb224a51cee.woff'},{'revision':null,'url':'94b292fe87831a8b.woff'},{'revision':null,'url':'95dc66c1b88745f8.woff'},{'revision':null,'url':'95fb698be77c85ef.woff'},{'revision':null,'url':'9624cec0f9bdd81e.woff2'},{'revision':null,'url':'9662331fa31e3f20.woff'},{'revision':null,'url':'98a3af55a1698171.woff2'},{'revision':null,'url':'9ba85996af74c5ce.woff2'},{'revision':null,'url':'9bc133b1df25cb74.woff'},{'revision':null,'url':'9ddb22faa35006e7.woff2'},{'revision':null,'url':'9e97352380611b95.woff'},{'revision':null,'url':'a167fb2799dd741b.woff2'},{'revision':null,'url':'a2045a5cc4fdf94f.woff2'},{'revision':null,'url':'a246c73905a31c93.woff2'},{'revision':null,'url':'a3d13dc3f29cc2c8.js'},{'revision':null,'url':'a401aa7939cb6e6f.woff2'},{'revision':null,'url':'a41a71258c38684d.woff'},{'revision':null,'url':'a60d94a72d615a8e.woff'},{'revision':null,'url':'a66764dd0c1fa213.woff'},{'revision':null,'url':'a6ed036f17a1ea29.woff2'},{'revision':null,'url':'a8f635129d660202.woff'},{'revision':null,'url':'a9f25ca430709a1a.woff2'},{'revision':null,'url':'ae14d98ad8a1212c.woff'},{'revision':null,'url':'aeec4f78084adf7f.woff'},{'revision':null,'url':'af11e94b0644eba5.woff'},{'revision':null,'url':'afa9121a49e95351.woff2'},{'revision':null,'url':'afcda12d9f805543.woff2'},{'revision':null,'url':'b09ded85a7da77f1.woff2'},{'revision':null,'url':'b2f4e9d1e821b71c.woff2'},{'revision':null,'url':'b30b06698dc369b2.woff'},{'revision':null,'url':'b4a074bf828bb757.woff2'},{'revision':null,'url':'b7f447da43f6e596.woff2'},{'revision':null,'url':'b7f633b871b84820.woff'},{'revision':null,'url':'bcca84a524572d10.woff2'},{'revision':null,'url':'be4d1f97b11d087c.woff2'},{'revision':null,'url':'be91def2232f6776.woff'},{'revision':null,'url':'bec14780d81164de.woff2'},{'revision':null,'url':'c285f4b15d11f172.woff'},{'revision':null,'url':'c4673617b80801f3.woff'},{'revision':null,'url':'c553f7e0199c5084.woff2'},{'revision':null,'url':'c8470ed2c145ace7.woff'},{'revision':null,'url':'c9d9ce9f465df4fe.woff2'},{'revision':null,'url':'ccb2870475da9fe8.woff'},{'revision':null,'url':'d04134fa33c2606d.woff'},{'revision':null,'url':'d11f9c5cd7d9ea16.woff'},{'revision':null,'url':'d188f7f036ac5779.woff2'},{'revision':null,'url':'d265d81c58525ae4.woff2'},{'revision':null,'url':'d5942cd81663e136.woff2'},{'revision':null,'url':'d6097a5c452acf6d.woff'},{'revision':null,'url':'d66b8ff73d95cabb.woff2'},{'revision':null,'url':'d77f5bf95de8edaa.woff'},{'revision':null,'url':'d8829a685af4f372.woff'},{'revision':null,'url':'d88899ef0fd16719.woff2'},{'revision':null,'url':'d9a5d958e69e058d.woff2'},{'revision':null,'url':'da65d9a514c628c8.woff'},{'revision':null,'url':'dac90d495be353a0.woff2'},{'revision':null,'url':'dd7071bc6306585c.woff'},{'revision':null,'url':'dd8ce598529c3fab.woff2'},{'revision':null,'url':'ddef6f2dd566c2b9.woff'},{'revision':null,'url':'de013f1be25103fa.woff2'},{'revision':null,'url':'dee2ff599db31e5b.woff'},{'revision':null,'url':'dee7c6b5dd954d9b.woff'},{'revision':null,'url':'df222fceeffca849.woff2'},{'revision':null,'url':'e0d2e5b12f028b5d.woff'},{'revision':null,'url':'e33e3db8e4f7559f.woff'},{'revision':null,'url':'e62b00b9199c1ac9.woff2'},{'revision':null,'url':'e696cef1407b2610.woff2'},{'revision':null,'url':'e89ca83b24959664.woff'},{'revision':null,'url':'eb8c0ae77ad55249.woff'},{'revision':null,'url':'ed0997bd7d221b8e.woff'},{'revision':null,'url':'eed48feba743e21c.woff2'},{'revision':'e7b4f5008b462eda0018724c6c76008a','url':'esm-devtools-app/630.js'},{'revision':'aba536965ad79f49357774c3d5f0d621','url':'esm-devtools-app/729.js'},{'revision':'81178d08b8f5ccc23b8b841eaad4c7fc','url':'esm-devtools-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-devtools-app/735.js.LICENSE.txt'},{'revision':'c9ef16a54e7d11fb96bbdb24d3abeaed','url':'esm-devtools-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-devtools-app/788.js.LICENSE.txt'},{'revision':'2a6d986fe2b9cda12b29ff6187c53b27','url':'esm-devtools-app/875.js'},{'revision':'ca93a189cb07af1faf34837fa237942a','url':'esm-devtools-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-devtools-app/889.js.LICENSE.txt'},{'revision':'3805c03ba57cfacf30685ae1b80b9f11','url':'esm-devtools-app/961.js'},{'revision':'773ffc3a8a236699ba59ba6421d6b487','url':'esm-devtools-app/961.js.LICENSE.txt'},{'revision':'a146be39608996f2eedb98f6a2a4f187','url':'esm-devtools-app/988.js'},{'revision':'1692b090fba756185221397aed060c09','url':'esm-devtools-app/main.js'},{'revision':'fe1f7c49121c8e4b5c7acafa5d71be10','url':'esm-devtools-app/openmrs-esm-devtools-app.js'},{'revision':'3ff2a8b3c3e74a9dfe3af9c8a1b98e6f','url':'esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json'},{'revision':'4e9f62fe0366a8a47869befc6fa6a805','url':'esm-devtools-app/routes.json'},{'revision':'b8024c5b27fbd91d723e32ca5a46cff6','url':'esm-implementer-tools-app/271.js'},{'revision':'33f9414270238ac18865a728f2060a83','url':'esm-implementer-tools-app/319.js'},{'revision':'cf7c52e2cc080161628a54c52f5c7726','url':'esm-implementer-tools-app/426.js'},{'revision':'1ddc673a91ca0a2702a98ef174c88a1b','url':'esm-implementer-tools-app/460.js'},{'revision':'4c902c2e4c29dbcb7565a6e5aebf2bea','url':'esm-implementer-tools-app/56.js'},{'revision':'d5fee92445a958410aefc4a0405c271e','url':'esm-implementer-tools-app/560.js'},{'revision':'a4557c274e175127a937057305c8cd29','url':'esm-implementer-tools-app/574.js'},{'revision':'d4747c955af96b563f5aa3ac9025cdbb','url':'esm-implementer-tools-app/587.js'},{'revision':'50fd1e31f96c606d61590f2f75470aae','url':'esm-implementer-tools-app/620.js'},{'revision':'9686ec404915a5cd3724eb5256a48d74','url':'esm-implementer-tools-app/620.js.LICENSE.txt'},{'revision':'f587ed1b9cfd8f7c82677e31da7bc9af','url':'esm-implementer-tools-app/625.js'},{'revision':'e7268be73951be4c40696375103ebf88','url':'esm-implementer-tools-app/644.js'},{'revision':'d6e7bfaf645d6cc3975479ded60c7af3','url':'esm-implementer-tools-app/651.js'},{'revision':'62964907c17bc8e95a42ebaf917ba79b','url':'esm-implementer-tools-app/727.js'},{'revision':'f33d282215d78dfa9d41bfcd6cb75fc0','url':'esm-implementer-tools-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-implementer-tools-app/735.js.LICENSE.txt'},{'revision':'6d5c51d2501044c2b80cec83f36c38b0','url':'esm-implementer-tools-app/738.js'},{'revision':'be0b9393f5013ab64cc7250195c50770','url':'esm-implementer-tools-app/757.js'},{'revision':'c743d52c7552e38f1b69d9f5c5f4263d','url':'esm-implementer-tools-app/767.js'},{'revision':'2f69e2561d6eecda44fa9df650031f92','url':'esm-implementer-tools-app/767.js.LICENSE.txt'},{'revision':'de08264be2fd06897a2d430ffa9db77b','url':'esm-implementer-tools-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-implementer-tools-app/788.js.LICENSE.txt'},{'revision':'4470624e760ec180b9596be3deaaad83','url':'esm-implementer-tools-app/807.js'},{'revision':'6130bdb5838c60e16ffa602c13ebfbd9','url':'esm-implementer-tools-app/833.js'},{'revision':'e6c880c49f391655006a997f6e2d230b','url':'esm-implementer-tools-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-implementer-tools-app/889.js.LICENSE.txt'},{'revision':'44525346beea36236c3ce5dcaa7cf1cb','url':'esm-implementer-tools-app/913.js'},{'revision':'f7b599e3f88bf94d2af5d3f60873a311','url':'esm-implementer-tools-app/913.js.LICENSE.txt'},{'revision':'2d3cbb4648d439794876a106a83f4ec9','url':'esm-implementer-tools-app/main.js'},{'revision':'f7b599e3f88bf94d2af5d3f60873a311','url':'esm-implementer-tools-app/main.js.LICENSE.txt'},{'revision':'61fccb393211cda782192dc42e9f5324','url':'esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js'},{'revision':'8a28e2b6316d5a0f177c67611d9654c1','url':'esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json'},{'revision':'cadceb9c8a4768713fbf3b84189119b8','url':'esm-implementer-tools-app/routes.json'},{'revision':'a36645f1b757149df1d5e2c825c765ca','url':'esm-login-app/111.js'},{'revision':'3078176cbf1eae99ed56ea4c2b063461','url':'esm-login-app/126.js'},{'revision':'61baa3a5fc2eebeed7b52ce72e4992aa','url':'esm-login-app/126.js.LICENSE.txt'},{'revision':'30f7968e0cd251468adcf7058564cf5b','url':'esm-login-app/173.js'},{'revision':'1d2f7efafd96286576306390585e25fa','url':'esm-login-app/224.js'},{'revision':'baa19e2c9bd1171e9431ec3b7298ce0c','url':'esm-login-app/236.js'},{'revision':'c0da7df4e2c938a83718d75afd356eee','url':'esm-login-app/240.js'},{'revision':'c9400e5b776a419fb8dc52319fa833a0','url':'esm-login-app/271.js'},{'revision':'24434c1a6f00484c2248315a706dfcad','url':'esm-login-app/272.js'},{'revision':'9229cd5a6f120bd239fbc59eda8eedfe','url':'esm-login-app/319.js'},{'revision':'26235d83933f96f01678652264b20b0a','url':'esm-login-app/336.js'},{'revision':'989d8e413279f9620f4679452da440f0','url':'esm-login-app/363.js'},{'revision':'519716d48bded70a536882b69c32e7fa','url':'esm-login-app/460.js'},{'revision':'a32c34f8ca6dc0a5ca649b9985301eee','url':'esm-login-app/539.js'},{'revision':'8d77ca90d05bdbf69d133192053fe5b0','url':'esm-login-app/56.js'},{'revision':'1660f2e88b4a4ef4424c990d88e3b125','url':'esm-login-app/574.js'},{'revision':'b2ad0399c4a257e736a33d87d1a9556e','url':'esm-login-app/625.js'},{'revision':'b8f731f7adc306974a1ac296195e533f','url':'esm-login-app/627.js'},{'revision':'2873614f71f534aee953ee6e5e4eeb25','url':'esm-login-app/63.js'},{'revision':'41d15f6ba9fe36eb6cd3043bad6c4548','url':'esm-login-app/63.js.LICENSE.txt'},{'revision':'e52e9478c336449fe856a5d5d7648e79','url':'esm-login-app/644.js'},{'revision':'894dc9453600eaa9e035ae04aeaeb8e3','url':'esm-login-app/673.js'},{'revision':'aad508425a0e29ea8dcb91a5145d04ed','url':'esm-login-app/729.js'},{'revision':'51e446e0d4695c24e2f5ed5939f9fefc','url':'esm-login-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-login-app/735.js.LICENSE.txt'},{'revision':'3d568d5d7086dcba5f12e8cc87fe2d53','url':'esm-login-app/757.js'},{'revision':'fafb30da7459470b01965f0c4ca3bedf','url':'esm-login-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-login-app/788.js.LICENSE.txt'},{'revision':'0bd67d4fb94cb9a9c59224b19ed3fbc1','url':'esm-login-app/807.js'},{'revision':'9b45d63f97161ef6fd327f4c4f0be71a','url':'esm-login-app/833.js'},{'revision':'4732853215babfd09591cf0cd11720d5','url':'esm-login-app/836.js'},{'revision':'f7b599e3f88bf94d2af5d3f60873a311','url':'esm-login-app/836.js.LICENSE.txt'},{'revision':'5a2d2614202942f2ad993460d841978f','url':'esm-login-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-login-app/889.js.LICENSE.txt'},{'revision':'153da1f566b066778c097a8a8e561722','url':'esm-login-app/main.js'},{'revision':'27504acc7c5879b89bbe130a4a612c75','url':'esm-login-app/main.js.LICENSE.txt'},{'revision':'b07c2942e54d2145f6d9d9057dfaa494','url':'esm-login-app/openmrs-esm-login-app.js'},{'revision':'faf4bd5efb31bb2ff5c6b03e8d09706d','url':'esm-login-app/openmrs-esm-login-app.js.buildmanifest.json'},{'revision':'763dd6d2d846bbfbcda048f5218a6112','url':'esm-login-app/routes.json'},{'revision':'cbc9366c0e23bc6694d6e83197d6af9b','url':'esm-offline-tools-app/1584c81d564cacde.svg'},{'revision':'c214f7ba60dd8177ef3f834f6cd24fa6','url':'esm-offline-tools-app/271.js'},{'revision':'06e30329437c2cfb35f4feb66d8bd994','url':'esm-offline-tools-app/319.js'},{'revision':'f77ec6c6078789d704df65e3f211a78b','url':'esm-offline-tools-app/430.js'},{'revision':'ba90e34929b35374a1efaf01752c2d08','url':'esm-offline-tools-app/430.js.LICENSE.txt'},{'revision':'3462e6f700e26090f53519ad3b22d935','url':'esm-offline-tools-app/460.js'},{'revision':'9ec2f20455995bb2fe7f8bbc5e1e5f53','url':'esm-offline-tools-app/56.js'},{'revision':'608d54816bf5749c14cbf260dda593ba','url':'esm-offline-tools-app/574.js'},{'revision':'d9e06b3335543c1a8af3a4a05236bd3b','url':'esm-offline-tools-app/625.js'},{'revision':'1bee5698fd922636fe522923abefc702','url':'esm-offline-tools-app/63.js'},{'revision':'41d15f6ba9fe36eb6cd3043bad6c4548','url':'esm-offline-tools-app/63.js.LICENSE.txt'},{'revision':'57305b79d5915a6d1fdc1249f6fa2fcf','url':'esm-offline-tools-app/644.js'},{'revision':'0936b4e9ad2bd56dbf4d971175b822ac','url':'esm-offline-tools-app/729.js'},{'revision':'7529ec963ec6b4740837986094b97702','url':'esm-offline-tools-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-offline-tools-app/735.js.LICENSE.txt'},{'revision':'6f013c96f504562564a06e93bd941507','url':'esm-offline-tools-app/757.js'},{'revision':'330dcd098efa59843322e6b523e16135','url':'esm-offline-tools-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-offline-tools-app/788.js.LICENSE.txt'},{'revision':'2ac9a7ae2e3a15623c1f6b6bb499d867','url':'esm-offline-tools-app/807.js'},{'revision':'1c91df98625e99d22f544e0d8da2dc32','url':'esm-offline-tools-app/833.js'},{'revision':'18bedf7715a6dcfd276796af6cfda76f','url':'esm-offline-tools-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-offline-tools-app/889.js.LICENSE.txt'},{'revision':'d41988137a085b4b90832d3ff0b9ce21','url':'esm-offline-tools-app/922.js'},{'revision':'d055b43bf74db2e96f23e970e4c0d59b','url':'esm-offline-tools-app/main.js'},{'revision':'ba90e34929b35374a1efaf01752c2d08','url':'esm-offline-tools-app/main.js.LICENSE.txt'},{'revision':'987a1b0978e89ed259e7483a18f441d3','url':'esm-offline-tools-app/openmrs-esm-offline-tools-app.js'},{'revision':'975f518c3a339a8916d622c07c4500d3','url':'esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json'},{'revision':'95e08af4cf1856061c3012c1e9505070','url':'esm-offline-tools-app/routes.json'},{'revision':'36175894b5c1f99152c6011a0ac3dbd6','url':'esm-primary-navigation-app/271.js'},{'revision':'74d102f6163be0330ad9baa64b63b775','url':'esm-primary-navigation-app/319.js'},{'revision':'1167030506ee6f39e56a1ad9671ffba2','url':'esm-primary-navigation-app/460.js'},{'revision':'073172b68e8dae99394acb1040f4fa76','url':'esm-primary-navigation-app/574.js'},{'revision':'4336fcd16de448689e85f2a070668925','url':'esm-primary-navigation-app/625.js'},{'revision':'96199e9aa9c8776d84bfda5131fc1509','url':'esm-primary-navigation-app/63.js'},{'revision':'41d15f6ba9fe36eb6cd3043bad6c4548','url':'esm-primary-navigation-app/63.js.LICENSE.txt'},{'revision':'ac90b17bdf4a67c9816f678a6aefe4e4','url':'esm-primary-navigation-app/644.js'},{'revision':'318998f0f6c86fc39e2ba97a50333ca4','url':'esm-primary-navigation-app/729.js'},{'revision':'25d47c6df4961633992ec2b8488959c0','url':'esm-primary-navigation-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-primary-navigation-app/735.js.LICENSE.txt'},{'revision':'4d24a49fb45f72df90be993840d79322','url':'esm-primary-navigation-app/757.js'},{'revision':'5a81824a7f8c752ffb0d9ffc37a10dc6','url':'esm-primary-navigation-app/762.js'},{'revision':'7373f36cabec648002aa2ac6ec4a0c64','url':'esm-primary-navigation-app/780.js'},{'revision':'773ffc3a8a236699ba59ba6421d6b487','url':'esm-primary-navigation-app/780.js.LICENSE.txt'},{'revision':'af334a681ef89584cce5bd7f5203d436','url':'esm-primary-navigation-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-primary-navigation-app/788.js.LICENSE.txt'},{'revision':'8a5d2e67bea7b7e54cb3de267a80fe7b','url':'esm-primary-navigation-app/807.js'},{'revision':'6d821018d1dbef4a78bae8c6ee3b05cf','url':'esm-primary-navigation-app/833.js'},{'revision':'d853786c91b09c784c35d9f675b86fd6','url':'esm-primary-navigation-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-primary-navigation-app/889.js.LICENSE.txt'},{'revision':'804254cd43347171a78e85fcddd0e8ec','url':'esm-primary-navigation-app/958.js'},{'revision':'add4159109ea1b87604c224fc175fc83','url':'esm-primary-navigation-app/main.js'},{'revision':'773ffc3a8a236699ba59ba6421d6b487','url':'esm-primary-navigation-app/main.js.LICENSE.txt'},{'revision':'70a2b498e3acc6a6ba7e98f9592bca85','url':'esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js'},{'revision':'9a36b9b2fe125fde0e890e7ee974f651','url':'esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json'},{'revision':'081d31ecb2a5d621f6e68821b4982e18','url':'esm-primary-navigation-app/routes.json'},{'revision':null,'url':'f280bda8a6e535a6.woff'},{'revision':null,'url':'f543c88feb236d11.woff2'},{'revision':null,'url':'f591b0079faa93fe.woff2'},{'revision':null,'url':'f6ed27923769ad1d.woff2'},{'revision':null,'url':'f8803bebe640d99a.woff'},{'revision':'30de494bd9e73ae96c18fd0c06fa422b','url':'favicon.ico'},{'revision':null,'url':'fbebeb4336e67012.woff2'},{'revision':null,'url':'fd522cd7a5c646fe.woff'},{'revision':'c90d01b1249902095a585f6476503671','url':'index.html'},{'revision':'6b758b31ea00150986994edcfb033a94','url':'logo-512.png'},{'revision':'b860db243392596e3b875bad9794b4e5','url':'logo.svg'},{'revision':'6e8c9446b54c7ac13991d48f62888e8f','url':'openmrs.js'}];\nvar indexUrl = prefixWithServiceWorkerLocationIfRelative(\"index.html\");\nvar absoluteWbManifestUrls = (0,lodash_es_uniq__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(wbManifest.map(function(param) {\n var url = param.url;\n return prefixWithServiceWorkerLocationIfRelative(url);\n}));\nvar buildManifestSuffix = \".buildmanifest.json\";\nfunction prefixWithServiceWorkerLocationIfRelative(path) {\n return new URL(path, self.location.href).href;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2VydmljZS13b3JrZXIvY29uc3RhbnRzLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBa0M7QUFFbEMscUVBQXFFO0FBQzlELElBQU1DLHdDQUF3QywrQkFBK0I7QUFDN0UsSUFBTUMsMENBQTBDLGlDQUFpQztBQUNqRixJQUFNQywyQ0FBMkMsa0NBQWtDO0FBRW5GLElBQU1DLGtCQUFrQixPQUFPO0FBQy9CLElBQU1DLGdCQUFnQixHQUFtQixPQUFoQkQsaUJBQWdCLGlCQUFlO0FBRXhELElBQU1FLGFBQWFDLEtBQUtDLGFBQWEsQ0FBQztBQUN0QyxJQUFNQyxXQUFXQywwQ0FBMEMsY0FBYztBQUN6RSxJQUFNQyx5QkFBeUJYLDBEQUFJQSxDQUFDTSxXQUFXTSxHQUFHLENBQUM7UUFBR0MsWUFBQUE7V0FBVUgsMENBQTBDRztJQUFPO0FBRWpILElBQU1DLHNCQUFzQixzQkFBc0I7QUFFekQsU0FBU0osMENBQTBDSyxJQUFZLEVBQUU7SUFDL0QsT0FBTyxJQUFJQyxJQUFJRCxNQUFNUixLQUFLVSxRQUFRLENBQUNDLElBQUksRUFBRUEsSUFBSTtBQUMvQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi9zcmMvc2VydmljZS13b3JrZXIvY29uc3RhbnRzLnRzP2U4MTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xuXG4vLyBub3RlIHRoYXQgdGhlc2UgY29uc3RhbnRzIGFyZSBhbHNvIGRlZmluZWQgaW4gQG9wZW5tcnMvZXNtLW9mZmxpbmVcbmV4cG9ydCBjb25zdCBvbXJzT2ZmbGluZVJlc3BvbnNlQm9keUh0dHBIZWFkZXJOYW1lID0gJ3gtb21ycy1vZmZsaW5lLXJlc3BvbnNlLWJvZHknO1xuZXhwb3J0IGNvbnN0IG9tcnNPZmZsaW5lUmVzcG9uc2VTdGF0dXNIdHRwSGVhZGVyTmFtZSA9ICd4LW9tcnMtb2ZmbGluZS1yZXNwb25zZS1zdGF0dXMnO1xuZXhwb3J0IGNvbnN0IG9tcnNPZmZsaW5lQ2FjaGluZ1N0cmF0ZWd5SHR0cEhlYWRlck5hbWUgPSAneC1vbXJzLW9mZmxpbmUtY2FjaGluZy1zdHJhdGVneSc7XG5cbmV4cG9ydCBjb25zdCBvbXJzQ2FjaGVQcmVmaXggPSAnb21ycyc7XG5leHBvcnQgY29uc3Qgb21yc0NhY2hlTmFtZSA9IGAke29tcnNDYWNoZVByZWZpeH0tc3BhLWNhY2hlLXYxYDtcblxuZXhwb3J0IGNvbnN0IHdiTWFuaWZlc3QgPSBzZWxmLl9fV0JfTUFOSUZFU1Q7XG5leHBvcnQgY29uc3QgaW5kZXhVcmwgPSBwcmVmaXhXaXRoU2VydmljZVdvcmtlckxvY2F0aW9uSWZSZWxhdGl2ZSgnaW5kZXguaHRtbCcpO1xuZXhwb3J0IGNvbnN0IGFic29sdXRlV2JNYW5pZmVzdFVybHMgPSB1bmlxKHdiTWFuaWZlc3QubWFwKCh7IHVybCB9KSA9PiBwcmVmaXhXaXRoU2VydmljZVdvcmtlckxvY2F0aW9uSWZSZWxhdGl2ZSh1cmwpKSk7XG5cbmV4cG9ydCBjb25zdCBidWlsZE1hbmlmZXN0U3VmZml4ID0gJy5idWlsZG1hbmlmZXN0Lmpzb24nO1xuXG5mdW5jdGlvbiBwcmVmaXhXaXRoU2VydmljZVdvcmtlckxvY2F0aW9uSWZSZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5ldyBVUkwocGF0aCwgc2VsZi5sb2NhdGlvbi5ocmVmKS5ocmVmO1xufVxuIl0sIm5hbWVzIjpbInVuaXEiLCJvbXJzT2ZmbGluZVJlc3BvbnNlQm9keUh0dHBIZWFkZXJOYW1lIiwib21yc09mZmxpbmVSZXNwb25zZVN0YXR1c0h0dHBIZWFkZXJOYW1lIiwib21yc09mZmxpbmVDYWNoaW5nU3RyYXRlZ3lIdHRwSGVhZGVyTmFtZSIsIm9tcnNDYWNoZVByZWZpeCIsIm9tcnNDYWNoZU5hbWUiLCJ3Yk1hbmlmZXN0Iiwic2VsZiIsIl9fV0JfTUFOSUZFU1QiLCJpbmRleFVybCIsInByZWZpeFdpdGhTZXJ2aWNlV29ya2VyTG9jYXRpb25JZlJlbGF0aXZlIiwiYWJzb2x1dGVXYk1hbmlmZXN0VXJscyIsIm1hcCIsInVybCIsImJ1aWxkTWFuaWZlc3RTdWZmaXgiLCJwYXRoIiwiVVJMIiwibG9jYXRpb24iLCJocmVmIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/service-worker/constants.ts\n");
|
|
601
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ absoluteWbManifestUrls: () => (/* binding */ absoluteWbManifestUrls),\n/* harmony export */ buildManifestSuffix: () => (/* binding */ buildManifestSuffix),\n/* harmony export */ indexUrl: () => (/* binding */ indexUrl),\n/* harmony export */ omrsCacheName: () => (/* binding */ omrsCacheName),\n/* harmony export */ omrsCachePrefix: () => (/* binding */ omrsCachePrefix),\n/* harmony export */ omrsOfflineCachingStrategyHttpHeaderName: () => (/* binding */ omrsOfflineCachingStrategyHttpHeaderName),\n/* harmony export */ omrsOfflineResponseBodyHttpHeaderName: () => (/* binding */ omrsOfflineResponseBodyHttpHeaderName),\n/* harmony export */ omrsOfflineResponseStatusHttpHeaderName: () => (/* binding */ omrsOfflineResponseStatusHttpHeaderName),\n/* harmony export */ wbManifest: () => (/* binding */ wbManifest)\n/* harmony export */ });\n/* harmony import */ var lodash_es_uniq__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lodash-es/uniq */ \"../../../node_modules/lodash-es/uniq.js\");\n\n// note that these constants are also defined in @openmrs/esm-offline\nvar omrsOfflineResponseBodyHttpHeaderName = \"x-omrs-offline-response-body\";\nvar omrsOfflineResponseStatusHttpHeaderName = \"x-omrs-offline-response-status\";\nvar omrsOfflineCachingStrategyHttpHeaderName = \"x-omrs-offline-caching-strategy\";\nvar omrsCachePrefix = \"omrs\";\nvar omrsCacheName = \"\".concat(omrsCachePrefix, \"-spa-cache-v1\");\nvar wbManifest = [{'revision':null,'url':'/openmrs/spa/importmap.json'},{'revision':null,'url':'/openmrs/spa/routes.registry.json'},{'revision':null,'url':'023bd53d342b7463.woff'},{'revision':null,'url':'02acc4469a2fe2e4.woff2'},{'revision':null,'url':'033e03f8663ab9b1.woff'},{'revision':null,'url':'052607e67da262ec.woff'},{'revision':null,'url':'081587ca0db8e63f.woff2'},{'revision':null,'url':'08cf53c4e5e71cf1.woff2'},{'revision':null,'url':'090b2bc014d24ea4.woff2'},{'revision':null,'url':'0a28cd0b47497b71.woff'},{'revision':null,'url':'0a9765a89ff0437d.woff'},{'revision':null,'url':'0ae92bcea615e948.woff2'},{'revision':null,'url':'0be8520d8945b3b7.woff2'},{'revision':null,'url':'0bf6b66a8b86b014.woff'},{'revision':null,'url':'0e7dd073cd8bb0ad.woff2'},{'revision':null,'url':'106d585dd7a35c62.js'},{'revision':null,'url':'14869ac5d1830304.woff2'},{'revision':null,'url':'14aaceff85fc8b28.woff2'},{'revision':null,'url':'1590052e1cf8f28d.woff'},{'revision':null,'url':'16f443eed01776ca.woff2'},{'revision':null,'url':'183bae0e53a22182.woff2'},{'revision':null,'url':'19b239a0bb74b27e.woff'},{'revision':null,'url':'19c8f94ccd6289f5.woff2'},{'revision':null,'url':'1ae86565eab7451c.woff2'},{'revision':null,'url':'1c7bf8797e0a9be6.woff2'},{'revision':null,'url':'1d9aff9a93a3bb66.woff'},{'revision':null,'url':'1f266d3619b30f16.woff2'},{'revision':null,'url':'1f8c5a4087a524fd.woff2'},{'revision':null,'url':'20ba2b23c5c0cd0b.woff2'},{'revision':null,'url':'2269d45733c5cf8f.woff'},{'revision':null,'url':'258ecbd235953099.woff'},{'revision':null,'url':'295dd01a1fbfee6d.woff2'},{'revision':null,'url':'2d7f835ab7c7c764.woff'},{'revision':null,'url':'2f66cca99eeead63.woff'},{'revision':null,'url':'2f686985e26e7107.woff2'},{'revision':null,'url':'315eff729e4ccbd9.woff2'},{'revision':null,'url':'32f1e5aadf845e08.woff'},{'revision':null,'url':'338484e1c850669c.woff'},{'revision':null,'url':'33b7a82f1e295190.woff'},{'revision':null,'url':'3674d98ec4a9173d.woff'},{'revision':null,'url':'368d16e3259bf207.woff2'},{'revision':null,'url':'36c49aa341a7079a.woff2'},{'revision':null,'url':'36e1e0430475edee.woff2'},{'revision':null,'url':'3bc19662b8630ee9.woff2'},{'revision':null,'url':'3f645f473b3f8fba.woff2'},{'revision':null,'url':'4095df88acae9e98.woff'},{'revision':null,'url':'4218ac9901b9d36d.woff2'},{'revision':null,'url':'4680ba68412e4da9.woff2'},{'revision':null,'url':'47d7a8698d562a0e.woff'},{'revision':null,'url':'47ec6c9dffe776a0.woff'},{'revision':null,'url':'48e37bd7ebf85a1f.woff2'},{'revision':null,'url':'48edfdf51dfb3160.woff'},{'revision':null,'url':'49af280eabf5f1f5.js'},{'revision':null,'url':'4a35a2746c8ad7a5.woff'},{'revision':null,'url':'4e11b8a7c445255f.woff2'},{'revision':null,'url':'4ea1f5c3baf89fe3.woff'},{'revision':null,'url':'4ea99f41c896bf9d.woff'},{'revision':null,'url':'5005db1d1caf70c7.woff'},{'revision':null,'url':'528a8e7c1c141a31.woff'},{'revision':null,'url':'52ca12f5b516d4ea.woff'},{'revision':null,'url':'537ddd61c5c1fce2.woff2'},{'revision':null,'url':'5432f7541ec25c34.woff'},{'revision':null,'url':'54a95d73a9454ba3.woff'},{'revision':null,'url':'56c4118c0907f151.woff2'},{'revision':null,'url':'5938bc2ae7ec60c0.woff2'},{'revision':null,'url':'594306657c4e44e8.woff'},{'revision':null,'url':'5a538aa477a66067.woff'},{'revision':null,'url':'5c6586155f0d278a.woff2'},{'revision':null,'url':'60ec587649ba812a.woff2'},{'revision':null,'url':'616567cd947eb9dd.woff'},{'revision':null,'url':'65168b59f44caab4.woff'},{'revision':null,'url':'65c0982f98374864.woff'},{'revision':null,'url':'65e6511e035870e1.woff2'},{'revision':null,'url':'661425f6798cd16a.woff2'},{'revision':null,'url':'66b864fe213caf46.woff2'},{'revision':null,'url':'6775fee945132ef9.woff'},{'revision':null,'url':'6783af2ad686c80a.js'},{'revision':null,'url':'68bbd362c8e4983b.woff'},{'revision':null,'url':'68d6deec87b6b604.woff'},{'revision':null,'url':'69a7e6d31d390296.woff'},{'revision':null,'url':'69d087d970ee9455.woff2'},{'revision':null,'url':'69fa3fc7363bbc04.woff'},{'revision':null,'url':'6a1f0178b45b2e9e.woff'},{'revision':null,'url':'6c6c45e66ff54281.woff2'},{'revision':null,'url':'6ffb9ed97b21fdc0.woff'},{'revision':null,'url':'7073a7323e92bd11.woff2'},{'revision':null,'url':'718c6cc31274ab1a.woff2'},{'revision':null,'url':'72cdbedfe04be9f9.woff2'},{'revision':null,'url':'7509c9f56fe9e532.woff2'},{'revision':null,'url':'75dc5c5b04adc8bf.woff2'},{'revision':null,'url':'76a7c256fc8b3490.woff'},{'revision':null,'url':'77b48bc05299ecca.woff2'},{'revision':null,'url':'787f56efa306ddbc.woff'},{'revision':null,'url':'7a0a0215c248c73d.woff2'},{'revision':null,'url':'7c4463d9c84f263a.woff'},{'revision':null,'url':'7d112a556b7670d2.woff'},{'revision':null,'url':'7d52d6014b5f2bbc.woff'},{'revision':null,'url':'7f00bebb24e40167.woff2'},{'revision':null,'url':'7f2c6ea3e740417e.woff'},{'revision':null,'url':'802c6176541eeed7.woff2'},{'revision':null,'url':'8080081b3379c637.woff2'},{'revision':null,'url':'8274cc1afc7619f1.woff'},{'revision':null,'url':'82dec1e32631398b.js'},{'revision':null,'url':'83f956513204a13c.js'},{'revision':null,'url':'8605507b7a8487c4.woff2'},{'revision':null,'url':'8a83d654702f6534.woff2'},{'revision':null,'url':'8ccee65f6cf254ee.woff'},{'revision':null,'url':'8d82a082a4aba439.woff'},{'revision':null,'url':'8de04ae985937b56.woff'},{'revision':null,'url':'8fe71173a13fe571.woff2'},{'revision':null,'url':'90edccb224a51cee.woff'},{'revision':null,'url':'94b292fe87831a8b.woff'},{'revision':null,'url':'95dc66c1b88745f8.woff'},{'revision':null,'url':'95fb698be77c85ef.woff'},{'revision':null,'url':'9624cec0f9bdd81e.woff2'},{'revision':null,'url':'9662331fa31e3f20.woff'},{'revision':null,'url':'98a3af55a1698171.woff2'},{'revision':null,'url':'9ba85996af74c5ce.woff2'},{'revision':null,'url':'9bc133b1df25cb74.woff'},{'revision':null,'url':'9ddb22faa35006e7.woff2'},{'revision':null,'url':'9e97352380611b95.woff'},{'revision':null,'url':'a167fb2799dd741b.woff2'},{'revision':null,'url':'a2045a5cc4fdf94f.woff2'},{'revision':null,'url':'a246c73905a31c93.woff2'},{'revision':null,'url':'a3d13dc3f29cc2c8.js'},{'revision':null,'url':'a401aa7939cb6e6f.woff2'},{'revision':null,'url':'a41a71258c38684d.woff'},{'revision':null,'url':'a60d94a72d615a8e.woff'},{'revision':null,'url':'a66764dd0c1fa213.woff'},{'revision':null,'url':'a6ed036f17a1ea29.woff2'},{'revision':null,'url':'a8f635129d660202.woff'},{'revision':null,'url':'a9f25ca430709a1a.woff2'},{'revision':null,'url':'ae14d98ad8a1212c.woff'},{'revision':null,'url':'aeec4f78084adf7f.woff'},{'revision':null,'url':'af11e94b0644eba5.woff'},{'revision':null,'url':'afa9121a49e95351.woff2'},{'revision':null,'url':'afcda12d9f805543.woff2'},{'revision':null,'url':'b09ded85a7da77f1.woff2'},{'revision':null,'url':'b0a76e14361e37c1.js'},{'revision':null,'url':'b2d16f1e56ce88c5.js'},{'revision':null,'url':'b2f4e9d1e821b71c.woff2'},{'revision':null,'url':'b30b06698dc369b2.woff'},{'revision':null,'url':'b4a074bf828bb757.woff2'},{'revision':null,'url':'b7f447da43f6e596.woff2'},{'revision':null,'url':'b7f633b871b84820.woff'},{'revision':null,'url':'bcca84a524572d10.woff2'},{'revision':null,'url':'be4d1f97b11d087c.woff2'},{'revision':null,'url':'be91def2232f6776.woff'},{'revision':null,'url':'bec14780d81164de.woff2'},{'revision':null,'url':'beda13d9de073afa.js'},{'revision':null,'url':'c285f4b15d11f172.woff'},{'revision':null,'url':'c4673617b80801f3.woff'},{'revision':null,'url':'c553f7e0199c5084.woff2'},{'revision':null,'url':'c8470ed2c145ace7.woff'},{'revision':null,'url':'c9d9ce9f465df4fe.woff2'},{'revision':null,'url':'ccb2870475da9fe8.woff'},{'revision':null,'url':'d04134fa33c2606d.woff'},{'revision':null,'url':'d11f9c5cd7d9ea16.woff'},{'revision':null,'url':'d188f7f036ac5779.woff2'},{'revision':null,'url':'d265d81c58525ae4.woff2'},{'revision':null,'url':'d5942cd81663e136.woff2'},{'revision':null,'url':'d6097a5c452acf6d.woff'},{'revision':null,'url':'d66b8ff73d95cabb.woff2'},{'revision':null,'url':'d77f5bf95de8edaa.woff'},{'revision':null,'url':'d8829a685af4f372.woff'},{'revision':null,'url':'d88899ef0fd16719.woff2'},{'revision':null,'url':'d9a5d958e69e058d.woff2'},{'revision':null,'url':'da65d9a514c628c8.woff'},{'revision':null,'url':'dac90d495be353a0.woff2'},{'revision':null,'url':'dd7071bc6306585c.woff'},{'revision':null,'url':'dd8ce598529c3fab.woff2'},{'revision':null,'url':'ddef6f2dd566c2b9.woff'},{'revision':null,'url':'de013f1be25103fa.woff2'},{'revision':null,'url':'dee2ff599db31e5b.woff'},{'revision':null,'url':'dee7c6b5dd954d9b.woff'},{'revision':null,'url':'df222fceeffca849.woff2'},{'revision':null,'url':'e0bc6a59e6b7007f.js'},{'revision':null,'url':'e0d2e5b12f028b5d.woff'},{'revision':null,'url':'e33e3db8e4f7559f.woff'},{'revision':null,'url':'e3d950de8b82fa70.js'},{'revision':null,'url':'e62b00b9199c1ac9.woff2'},{'revision':null,'url':'e696cef1407b2610.woff2'},{'revision':null,'url':'e89ca83b24959664.woff'},{'revision':null,'url':'eb8c0ae77ad55249.woff'},{'revision':null,'url':'ed0997bd7d221b8e.woff'},{'revision':null,'url':'eed48feba743e21c.woff2'},{'revision':'e7b4f5008b462eda0018724c6c76008a','url':'esm-devtools-app/630.js'},{'revision':'f1724a66f449049eb74fcdc796981c99','url':'esm-devtools-app/667.js'},{'revision':'81178d08b8f5ccc23b8b841eaad4c7fc','url':'esm-devtools-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-devtools-app/735.js.LICENSE.txt'},{'revision':'c9ef16a54e7d11fb96bbdb24d3abeaed','url':'esm-devtools-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-devtools-app/788.js.LICENSE.txt'},{'revision':'2a6d986fe2b9cda12b29ff6187c53b27','url':'esm-devtools-app/875.js'},{'revision':'6b728a8734225aedd9570634ed6c1a35','url':'esm-devtools-app/884.js'},{'revision':'c2ea8ba493ff470e54293b5a7dea1735','url':'esm-devtools-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-devtools-app/889.js.LICENSE.txt'},{'revision':'3805c03ba57cfacf30685ae1b80b9f11','url':'esm-devtools-app/961.js'},{'revision':'773ffc3a8a236699ba59ba6421d6b487','url':'esm-devtools-app/961.js.LICENSE.txt'},{'revision':'a146be39608996f2eedb98f6a2a4f187','url':'esm-devtools-app/988.js'},{'revision':'84859e01cca3c09e22146e7ee2d3c3d8','url':'esm-devtools-app/main.js'},{'revision':'eb55442f86ebf6725c9b5f0edc7783be','url':'esm-devtools-app/openmrs-esm-devtools-app.js'},{'revision':'f7cdebd34c0e5393c46b0d0079ab2b21','url':'esm-devtools-app/openmrs-esm-devtools-app.js.buildmanifest.json'},{'revision':'895cd80bebb07193f9b7f284cd2ba685','url':'esm-devtools-app/routes.json'},{'revision':'b8024c5b27fbd91d723e32ca5a46cff6','url':'esm-implementer-tools-app/271.js'},{'revision':'33f9414270238ac18865a728f2060a83','url':'esm-implementer-tools-app/319.js'},{'revision':'cb5d151191e6f0be0c5135919b76c2bc','url':'esm-implementer-tools-app/426.js'},{'revision':'1ddc673a91ca0a2702a98ef174c88a1b','url':'esm-implementer-tools-app/460.js'},{'revision':'346935c9694fa8e9c3c5e4c4d6bec6f9','url':'esm-implementer-tools-app/482.js'},{'revision':'4c902c2e4c29dbcb7565a6e5aebf2bea','url':'esm-implementer-tools-app/56.js'},{'revision':'2211383addc800968b1b4c9873d00b8c','url':'esm-implementer-tools-app/560.js'},{'revision':'a4557c274e175127a937057305c8cd29','url':'esm-implementer-tools-app/574.js'},{'revision':'e0ed00ea4baf527c2873c02f6101f0a3','url':'esm-implementer-tools-app/587.js'},{'revision':'50fd1e31f96c606d61590f2f75470aae','url':'esm-implementer-tools-app/620.js'},{'revision':'9686ec404915a5cd3724eb5256a48d74','url':'esm-implementer-tools-app/620.js.LICENSE.txt'},{'revision':'f587ed1b9cfd8f7c82677e31da7bc9af','url':'esm-implementer-tools-app/625.js'},{'revision':'e7268be73951be4c40696375103ebf88','url':'esm-implementer-tools-app/644.js'},{'revision':'2a39a74962fd2ba042a15293658bbe25','url':'esm-implementer-tools-app/657.js'},{'revision':'01d2d98e7dee1730b23d54a9eea2959b','url':'esm-implementer-tools-app/71.js'},{'revision':'deebcb9364a2646161e559abd195cb5a','url':'esm-implementer-tools-app/72.js'},{'revision':'f7b599e3f88bf94d2af5d3f60873a311','url':'esm-implementer-tools-app/72.js.LICENSE.txt'},{'revision':'356195ef6cf7bdc78a649d3b25a1068b','url':'esm-implementer-tools-app/727.js'},{'revision':'f33d282215d78dfa9d41bfcd6cb75fc0','url':'esm-implementer-tools-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-implementer-tools-app/735.js.LICENSE.txt'},{'revision':'be0b9393f5013ab64cc7250195c50770','url':'esm-implementer-tools-app/757.js'},{'revision':'c743d52c7552e38f1b69d9f5c5f4263d','url':'esm-implementer-tools-app/767.js'},{'revision':'2f69e2561d6eecda44fa9df650031f92','url':'esm-implementer-tools-app/767.js.LICENSE.txt'},{'revision':'de08264be2fd06897a2d430ffa9db77b','url':'esm-implementer-tools-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-implementer-tools-app/788.js.LICENSE.txt'},{'revision':'91675f55e65222e3a766febeb5bd005d','url':'esm-implementer-tools-app/791.js'},{'revision':'4470624e760ec180b9596be3deaaad83','url':'esm-implementer-tools-app/807.js'},{'revision':'6130bdb5838c60e16ffa602c13ebfbd9','url':'esm-implementer-tools-app/833.js'},{'revision':'9bc04474f8e0337ee44a5439493ffe2a','url':'esm-implementer-tools-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-implementer-tools-app/889.js.LICENSE.txt'},{'revision':'de17d90cb7645836505d4613654f9a1a','url':'esm-implementer-tools-app/main.js'},{'revision':'f7b599e3f88bf94d2af5d3f60873a311','url':'esm-implementer-tools-app/main.js.LICENSE.txt'},{'revision':'642b7dbcfa26cab81a700613542a430e','url':'esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js'},{'revision':'d7d51552bdca3aff232bc8fc3dfb0785','url':'esm-implementer-tools-app/openmrs-esm-implementer-tools-app.js.buildmanifest.json'},{'revision':'e63d86a970c4a7b052a9d2dccc21990d','url':'esm-implementer-tools-app/routes.json'},{'revision':'a36645f1b757149df1d5e2c825c765ca','url':'esm-login-app/111.js'},{'revision':'3078176cbf1eae99ed56ea4c2b063461','url':'esm-login-app/126.js'},{'revision':'61baa3a5fc2eebeed7b52ce72e4992aa','url':'esm-login-app/126.js.LICENSE.txt'},{'revision':'30f7968e0cd251468adcf7058564cf5b','url':'esm-login-app/173.js'},{'revision':'1d2f7efafd96286576306390585e25fa','url':'esm-login-app/224.js'},{'revision':'baa19e2c9bd1171e9431ec3b7298ce0c','url':'esm-login-app/236.js'},{'revision':'c0da7df4e2c938a83718d75afd356eee','url':'esm-login-app/240.js'},{'revision':'c9400e5b776a419fb8dc52319fa833a0','url':'esm-login-app/271.js'},{'revision':'24434c1a6f00484c2248315a706dfcad','url':'esm-login-app/272.js'},{'revision':'9229cd5a6f120bd239fbc59eda8eedfe','url':'esm-login-app/319.js'},{'revision':'26235d83933f96f01678652264b20b0a','url':'esm-login-app/336.js'},{'revision':'f409778737b0f95971303d5ef85bc6d1','url':'esm-login-app/363.js'},{'revision':'519716d48bded70a536882b69c32e7fa','url':'esm-login-app/460.js'},{'revision':'a32c34f8ca6dc0a5ca649b9985301eee','url':'esm-login-app/539.js'},{'revision':'8d77ca90d05bdbf69d133192053fe5b0','url':'esm-login-app/56.js'},{'revision':'b8d507b71030cb84ecc69755ea5214c6','url':'esm-login-app/574.js'},{'revision':'b2ad0399c4a257e736a33d87d1a9556e','url':'esm-login-app/625.js'},{'revision':'b8f731f7adc306974a1ac296195e533f','url':'esm-login-app/627.js'},{'revision':'2873614f71f534aee953ee6e5e4eeb25','url':'esm-login-app/63.js'},{'revision':'41d15f6ba9fe36eb6cd3043bad6c4548','url':'esm-login-app/63.js.LICENSE.txt'},{'revision':'e52e9478c336449fe856a5d5d7648e79','url':'esm-login-app/644.js'},{'revision':'98c3f1c5407873b7f94b379b24e65b4b','url':'esm-login-app/667.js'},{'revision':'894dc9453600eaa9e035ae04aeaeb8e3','url':'esm-login-app/673.js'},{'revision':'51e446e0d4695c24e2f5ed5939f9fefc','url':'esm-login-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-login-app/735.js.LICENSE.txt'},{'revision':'3d568d5d7086dcba5f12e8cc87fe2d53','url':'esm-login-app/757.js'},{'revision':'fafb30da7459470b01965f0c4ca3bedf','url':'esm-login-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-login-app/788.js.LICENSE.txt'},{'revision':'0bd67d4fb94cb9a9c59224b19ed3fbc1','url':'esm-login-app/807.js'},{'revision':'9b45d63f97161ef6fd327f4c4f0be71a','url':'esm-login-app/833.js'},{'revision':'4732853215babfd09591cf0cd11720d5','url':'esm-login-app/836.js'},{'revision':'f7b599e3f88bf94d2af5d3f60873a311','url':'esm-login-app/836.js.LICENSE.txt'},{'revision':'3fe734cec35a9c04b73b4ecb5a0b6279','url':'esm-login-app/884.js'},{'revision':'4fed559c2e2ab8134d49d7f3e817ac9f','url':'esm-login-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-login-app/889.js.LICENSE.txt'},{'revision':'19f506bbafca1c9d9ce4f64ab4283abe','url':'esm-login-app/main.js'},{'revision':'27504acc7c5879b89bbe130a4a612c75','url':'esm-login-app/main.js.LICENSE.txt'},{'revision':'8b093aa1453b210cb768febd396d3be2','url':'esm-login-app/openmrs-esm-login-app.js'},{'revision':'fd915e6f634682aa7837ba5f9b6d246b','url':'esm-login-app/openmrs-esm-login-app.js.buildmanifest.json'},{'revision':'80bd715aab203bd85b5e49769a210bd7','url':'esm-login-app/routes.json'},{'revision':'cbc9366c0e23bc6694d6e83197d6af9b','url':'esm-offline-tools-app/1584c81d564cacde.svg'},{'revision':'c214f7ba60dd8177ef3f834f6cd24fa6','url':'esm-offline-tools-app/271.js'},{'revision':'06e30329437c2cfb35f4feb66d8bd994','url':'esm-offline-tools-app/319.js'},{'revision':'f77ec6c6078789d704df65e3f211a78b','url':'esm-offline-tools-app/430.js'},{'revision':'ba90e34929b35374a1efaf01752c2d08','url':'esm-offline-tools-app/430.js.LICENSE.txt'},{'revision':'3462e6f700e26090f53519ad3b22d935','url':'esm-offline-tools-app/460.js'},{'revision':'9ec2f20455995bb2fe7f8bbc5e1e5f53','url':'esm-offline-tools-app/56.js'},{'revision':'608d54816bf5749c14cbf260dda593ba','url':'esm-offline-tools-app/574.js'},{'revision':'d9e06b3335543c1a8af3a4a05236bd3b','url':'esm-offline-tools-app/625.js'},{'revision':'1bee5698fd922636fe522923abefc702','url':'esm-offline-tools-app/63.js'},{'revision':'41d15f6ba9fe36eb6cd3043bad6c4548','url':'esm-offline-tools-app/63.js.LICENSE.txt'},{'revision':'57305b79d5915a6d1fdc1249f6fa2fcf','url':'esm-offline-tools-app/644.js'},{'revision':'167ce8f4b901bfa86ef97432a99fc9ee','url':'esm-offline-tools-app/667.js'},{'revision':'7529ec963ec6b4740837986094b97702','url':'esm-offline-tools-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-offline-tools-app/735.js.LICENSE.txt'},{'revision':'6f013c96f504562564a06e93bd941507','url':'esm-offline-tools-app/757.js'},{'revision':'330dcd098efa59843322e6b523e16135','url':'esm-offline-tools-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-offline-tools-app/788.js.LICENSE.txt'},{'revision':'2ac9a7ae2e3a15623c1f6b6bb499d867','url':'esm-offline-tools-app/807.js'},{'revision':'1c91df98625e99d22f544e0d8da2dc32','url':'esm-offline-tools-app/833.js'},{'revision':'1af27c61d574e01b20110bb66b6cd8c1','url':'esm-offline-tools-app/884.js'},{'revision':'70e4ea9e74e36f1af2d7a96583e9bde2','url':'esm-offline-tools-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-offline-tools-app/889.js.LICENSE.txt'},{'revision':'d41988137a085b4b90832d3ff0b9ce21','url':'esm-offline-tools-app/922.js'},{'revision':'9031f2d5b937880a5fe2e672df90326e','url':'esm-offline-tools-app/main.js'},{'revision':'ba90e34929b35374a1efaf01752c2d08','url':'esm-offline-tools-app/main.js.LICENSE.txt'},{'revision':'e71b96279d5a870e7fb278c25c29df19','url':'esm-offline-tools-app/openmrs-esm-offline-tools-app.js'},{'revision':'f254c537471828e4bd4e01f07c7aeaed','url':'esm-offline-tools-app/openmrs-esm-offline-tools-app.js.buildmanifest.json'},{'revision':'ed17fcf101bebff7051eff9b2531c2f9','url':'esm-offline-tools-app/routes.json'},{'revision':'36175894b5c1f99152c6011a0ac3dbd6','url':'esm-primary-navigation-app/271.js'},{'revision':'74d102f6163be0330ad9baa64b63b775','url':'esm-primary-navigation-app/319.js'},{'revision':'1167030506ee6f39e56a1ad9671ffba2','url':'esm-primary-navigation-app/460.js'},{'revision':'073172b68e8dae99394acb1040f4fa76','url':'esm-primary-navigation-app/574.js'},{'revision':'4336fcd16de448689e85f2a070668925','url':'esm-primary-navigation-app/625.js'},{'revision':'96199e9aa9c8776d84bfda5131fc1509','url':'esm-primary-navigation-app/63.js'},{'revision':'41d15f6ba9fe36eb6cd3043bad6c4548','url':'esm-primary-navigation-app/63.js.LICENSE.txt'},{'revision':'ac90b17bdf4a67c9816f678a6aefe4e4','url':'esm-primary-navigation-app/644.js'},{'revision':'1b79f15f00f2f6e0c22a163b77c91acd','url':'esm-primary-navigation-app/667.js'},{'revision':'25d47c6df4961633992ec2b8488959c0','url':'esm-primary-navigation-app/735.js'},{'revision':'7167f42af12ff076e153f9028d4aa6bf','url':'esm-primary-navigation-app/735.js.LICENSE.txt'},{'revision':'4d24a49fb45f72df90be993840d79322','url':'esm-primary-navigation-app/757.js'},{'revision':'5a81824a7f8c752ffb0d9ffc37a10dc6','url':'esm-primary-navigation-app/762.js'},{'revision':'7373f36cabec648002aa2ac6ec4a0c64','url':'esm-primary-navigation-app/780.js'},{'revision':'773ffc3a8a236699ba59ba6421d6b487','url':'esm-primary-navigation-app/780.js.LICENSE.txt'},{'revision':'af334a681ef89584cce5bd7f5203d436','url':'esm-primary-navigation-app/788.js'},{'revision':'6973c4dc40d031fe098d652147281cf0','url':'esm-primary-navigation-app/788.js.LICENSE.txt'},{'revision':'8a5d2e67bea7b7e54cb3de267a80fe7b','url':'esm-primary-navigation-app/807.js'},{'revision':'6d821018d1dbef4a78bae8c6ee3b05cf','url':'esm-primary-navigation-app/833.js'},{'revision':'976bdccd4481e8af4d1469ab41ada5cd','url':'esm-primary-navigation-app/884.js'},{'revision':'b193065a43f5d494cb8f57d0b304e250','url':'esm-primary-navigation-app/889.js'},{'revision':'f5e20cbfa3f4a704d14167ef3749a9ce','url':'esm-primary-navigation-app/889.js.LICENSE.txt'},{'revision':'804254cd43347171a78e85fcddd0e8ec','url':'esm-primary-navigation-app/958.js'},{'revision':'8c6aea0a37af358d33e98372f06e15d5','url':'esm-primary-navigation-app/main.js'},{'revision':'773ffc3a8a236699ba59ba6421d6b487','url':'esm-primary-navigation-app/main.js.LICENSE.txt'},{'revision':'c92ac7faa52a0e1edf9ced3b63505604','url':'esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js'},{'revision':'33fde738174446a1ccaad5bfde6b4e40','url':'esm-primary-navigation-app/openmrs-esm-primary-navigation-app.js.buildmanifest.json'},{'revision':'3c707f97a7466755b65280cbd5b65f6e','url':'esm-primary-navigation-app/routes.json'},{'revision':null,'url':'f280bda8a6e535a6.woff'},{'revision':null,'url':'f543c88feb236d11.woff2'},{'revision':null,'url':'f591b0079faa93fe.woff2'},{'revision':null,'url':'f6ed27923769ad1d.woff2'},{'revision':null,'url':'f8803bebe640d99a.woff'},{'revision':'30de494bd9e73ae96c18fd0c06fa422b','url':'favicon.ico'},{'revision':null,'url':'fbebeb4336e67012.woff2'},{'revision':null,'url':'fd522cd7a5c646fe.woff'},{'revision':'43347c4a6b0feddb09054167e99b657b','url':'index.html'},{'revision':'6b758b31ea00150986994edcfb033a94','url':'logo-512.png'},{'revision':'b860db243392596e3b875bad9794b4e5','url':'logo.svg'},{'revision':'a07055f04fdd724536a739b049b9b966','url':'openmrs.js'}];\nvar indexUrl = prefixWithServiceWorkerLocationIfRelative(\"index.html\");\nvar absoluteWbManifestUrls = (0,lodash_es_uniq__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(wbManifest.map(function(param) {\n var url = param.url;\n return prefixWithServiceWorkerLocationIfRelative(url);\n}));\nvar buildManifestSuffix = \".buildmanifest.json\";\nfunction prefixWithServiceWorkerLocationIfRelative(path) {\n return new URL(path, self.location.href).href;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2VydmljZS13b3JrZXIvY29uc3RhbnRzLnRzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBa0M7QUFFbEMscUVBQXFFO0FBQzlELElBQU1DLHdDQUF3QywrQkFBK0I7QUFDN0UsSUFBTUMsMENBQTBDLGlDQUFpQztBQUNqRixJQUFNQywyQ0FBMkMsa0NBQWtDO0FBRW5GLElBQU1DLGtCQUFrQixPQUFPO0FBQy9CLElBQU1DLGdCQUFnQixHQUFtQixPQUFoQkQsaUJBQWdCLGlCQUFlO0FBRXhELElBQU1FLGFBQWFDLEtBQUtDLGFBQWEsQ0FBQztBQUN0QyxJQUFNQyxXQUFXQywwQ0FBMEMsY0FBYztBQUN6RSxJQUFNQyx5QkFBeUJYLDBEQUFJQSxDQUFDTSxXQUFXTSxHQUFHLENBQUM7UUFBR0MsWUFBQUE7V0FBVUgsMENBQTBDRztJQUFPO0FBRWpILElBQU1DLHNCQUFzQixzQkFBc0I7QUFFekQsU0FBU0osMENBQTBDSyxJQUFZLEVBQUU7SUFDL0QsT0FBTyxJQUFJQyxJQUFJRCxNQUFNUixLQUFLVSxRQUFRLENBQUNDLElBQUksRUFBRUEsSUFBSTtBQUMvQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi9zcmMvc2VydmljZS13b3JrZXIvY29uc3RhbnRzLnRzP2U4MTEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLWVzL3VuaXEnO1xuXG4vLyBub3RlIHRoYXQgdGhlc2UgY29uc3RhbnRzIGFyZSBhbHNvIGRlZmluZWQgaW4gQG9wZW5tcnMvZXNtLW9mZmxpbmVcbmV4cG9ydCBjb25zdCBvbXJzT2ZmbGluZVJlc3BvbnNlQm9keUh0dHBIZWFkZXJOYW1lID0gJ3gtb21ycy1vZmZsaW5lLXJlc3BvbnNlLWJvZHknO1xuZXhwb3J0IGNvbnN0IG9tcnNPZmZsaW5lUmVzcG9uc2VTdGF0dXNIdHRwSGVhZGVyTmFtZSA9ICd4LW9tcnMtb2ZmbGluZS1yZXNwb25zZS1zdGF0dXMnO1xuZXhwb3J0IGNvbnN0IG9tcnNPZmZsaW5lQ2FjaGluZ1N0cmF0ZWd5SHR0cEhlYWRlck5hbWUgPSAneC1vbXJzLW9mZmxpbmUtY2FjaGluZy1zdHJhdGVneSc7XG5cbmV4cG9ydCBjb25zdCBvbXJzQ2FjaGVQcmVmaXggPSAnb21ycyc7XG5leHBvcnQgY29uc3Qgb21yc0NhY2hlTmFtZSA9IGAke29tcnNDYWNoZVByZWZpeH0tc3BhLWNhY2hlLXYxYDtcblxuZXhwb3J0IGNvbnN0IHdiTWFuaWZlc3QgPSBzZWxmLl9fV0JfTUFOSUZFU1Q7XG5leHBvcnQgY29uc3QgaW5kZXhVcmwgPSBwcmVmaXhXaXRoU2VydmljZVdvcmtlckxvY2F0aW9uSWZSZWxhdGl2ZSgnaW5kZXguaHRtbCcpO1xuZXhwb3J0IGNvbnN0IGFic29sdXRlV2JNYW5pZmVzdFVybHMgPSB1bmlxKHdiTWFuaWZlc3QubWFwKCh7IHVybCB9KSA9PiBwcmVmaXhXaXRoU2VydmljZVdvcmtlckxvY2F0aW9uSWZSZWxhdGl2ZSh1cmwpKSk7XG5cbmV4cG9ydCBjb25zdCBidWlsZE1hbmlmZXN0U3VmZml4ID0gJy5idWlsZG1hbmlmZXN0Lmpzb24nO1xuXG5mdW5jdGlvbiBwcmVmaXhXaXRoU2VydmljZVdvcmtlckxvY2F0aW9uSWZSZWxhdGl2ZShwYXRoOiBzdHJpbmcpIHtcbiAgcmV0dXJuIG5ldyBVUkwocGF0aCwgc2VsZi5sb2NhdGlvbi5ocmVmKS5ocmVmO1xufVxuIl0sIm5hbWVzIjpbInVuaXEiLCJvbXJzT2ZmbGluZVJlc3BvbnNlQm9keUh0dHBIZWFkZXJOYW1lIiwib21yc09mZmxpbmVSZXNwb25zZVN0YXR1c0h0dHBIZWFkZXJOYW1lIiwib21yc09mZmxpbmVDYWNoaW5nU3RyYXRlZ3lIdHRwSGVhZGVyTmFtZSIsIm9tcnNDYWNoZVByZWZpeCIsIm9tcnNDYWNoZU5hbWUiLCJ3Yk1hbmlmZXN0Iiwic2VsZiIsIl9fV0JfTUFOSUZFU1QiLCJpbmRleFVybCIsInByZWZpeFdpdGhTZXJ2aWNlV29ya2VyTG9jYXRpb25JZlJlbGF0aXZlIiwiYWJzb2x1dGVXYk1hbmlmZXN0VXJscyIsIm1hcCIsInVybCIsImJ1aWxkTWFuaWZlc3RTdWZmaXgiLCJwYXRoIiwiVVJMIiwibG9jYXRpb24iLCJocmVmIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/service-worker/constants.ts\n");
|
|
602
602
|
|
|
603
603
|
/***/ }),
|
|
604
604
|
|
|
@@ -679,204 +679,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
679
679
|
|
|
680
680
|
/***/ }),
|
|
681
681
|
|
|
682
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
|
|
683
|
-
/*!****************************************************************************!*\
|
|
684
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
|
|
685
|
-
\****************************************************************************/
|
|
686
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
687
|
-
|
|
688
|
-
"use strict";
|
|
689
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _arrayLikeToArray)\n/* harmony export */ });\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];\n return arr2;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlLFNBQVNBLGtCQUFrQkMsR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDbEQsSUFBSUEsT0FBTyxJQUFJLElBQUlBLE1BQU1ELElBQUlFLE1BQU0sRUFBRUQsTUFBTUQsSUFBSUUsTUFBTTtJQUNyRCxJQUFLLElBQUlDLElBQUksR0FBR0MsT0FBTyxJQUFJQyxNQUFNSixNQUFNRSxJQUFJRixLQUFLRSxJQUFLQyxJQUFJLENBQUNELEVBQUUsR0FBR0gsR0FBRyxDQUFDRyxFQUFFO0lBQ3JFLE9BQU9DO0FBQ1QsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5TGlrZVRvQXJyYXkuanM/MTllYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuICByZXR1cm4gYXJyMjtcbn0iXSwibmFtZXMiOlsiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIiLCJsZW4iLCJsZW5ndGgiLCJpIiwiYXJyMiIsIkFycmF5Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\n");
|
|
690
|
-
|
|
691
|
-
/***/ }),
|
|
692
|
-
|
|
693
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
|
|
694
|
-
/*!**************************************************************************!*\
|
|
695
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
|
|
696
|
-
\**************************************************************************/
|
|
697
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
698
|
-
|
|
699
|
-
"use strict";
|
|
700
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _arrayWithHoles)\n/* harmony export */ });\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSxnQkFBZ0JDLEdBQUcsRUFBRTtJQUMzQyxJQUFJQyxNQUFNQyxPQUFPLENBQUNGLE1BQU0sT0FBT0E7QUFDakMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FycmF5V2l0aEhvbGVzLmpzPzM2NzEiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSJdLCJuYW1lcyI6WyJfYXJyYXlXaXRoSG9sZXMiLCJhcnIiLCJBcnJheSIsImlzQXJyYXkiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\n");
|
|
701
|
-
|
|
702
|
-
/***/ }),
|
|
703
|
-
|
|
704
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
|
|
705
|
-
/*!*********************************************************************************!*\
|
|
706
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
|
|
707
|
-
\*********************************************************************************/
|
|
708
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
709
|
-
|
|
710
|
-
"use strict";
|
|
711
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _assertThisInitialized)\n/* harmony export */ });\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsdUJBQXVCQyxJQUFJLEVBQUU7SUFDbkQsSUFBSUEsU0FBUyxLQUFLLEdBQUc7UUFDbkIsTUFBTSxJQUFJQyxlQUFlLDZEQUE2RDtJQUN4RixDQUFDO0lBQ0QsT0FBT0Q7QUFDVCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzPzJkMTYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59Il0sIm5hbWVzIjpbIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\n");
|
|
712
|
-
|
|
713
|
-
/***/ }),
|
|
714
|
-
|
|
715
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js":
|
|
716
|
-
/*!**************************************************************************!*\
|
|
717
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
|
|
718
|
-
\**************************************************************************/
|
|
719
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
720
|
-
|
|
721
|
-
"use strict";
|
|
722
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _classCallCheck)\n/* harmony export */ });\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!_instanceof(instance, Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NsYXNzQ2FsbENoZWNrLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQWUsU0FBU0EsZ0JBQWdCQyxRQUFRLEVBQUVDLFdBQVcsRUFBRTtJQUM3RCxJQUFJLENBQUVELFlBQUFBLFVBQW9CQyxjQUFjO1FBQ3RDLE1BQU0sSUFBSUMsVUFBVSxxQ0FBcUM7SUFDM0QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjay5qcz9mM2Q3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59Il0sIm5hbWVzIjpbIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJUeXBlRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js\n");
|
|
723
|
-
|
|
724
|
-
/***/ }),
|
|
725
|
-
|
|
726
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/createClass.js":
|
|
727
|
-
/*!***********************************************************************!*\
|
|
728
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/createClass.js ***!
|
|
729
|
-
\***********************************************************************/
|
|
730
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
731
|
-
|
|
732
|
-
"use strict";
|
|
733
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _createClass)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperties(target, props) {\n for(var i = 0; i < props.length; i++){\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDO0FBQy9DLFNBQVNDLGtCQUFrQkMsTUFBTSxFQUFFQyxLQUFLLEVBQUU7SUFDeEMsSUFBSyxJQUFJQyxJQUFJLEdBQUdBLElBQUlELE1BQU1FLE1BQU0sRUFBRUQsSUFBSztRQUNyQyxJQUFJRSxhQUFhSCxLQUFLLENBQUNDLEVBQUU7UUFDekJFLFdBQVdDLFVBQVUsR0FBR0QsV0FBV0MsVUFBVSxJQUFJLEtBQUs7UUFDdERELFdBQVdFLFlBQVksR0FBRyxJQUFJO1FBQzlCLElBQUksV0FBV0YsWUFBWUEsV0FBV0csUUFBUSxHQUFHLElBQUk7UUFDckRDLE9BQU9DLGNBQWMsQ0FBQ1QsUUFBUUYsNkRBQWFBLENBQUNNLFdBQVdNLEdBQUcsR0FBR047SUFDL0Q7QUFDRjtBQUNlLFNBQVNPLGFBQWFDLFdBQVcsRUFBRUMsVUFBVSxFQUFFQyxXQUFXLEVBQUU7SUFDekUsSUFBSUQsWUFBWWQsa0JBQWtCYSxZQUFZRyxTQUFTLEVBQUVGO0lBQ3pELElBQUlDLGFBQWFmLGtCQUFrQmEsYUFBYUU7SUFDaEROLE9BQU9DLGNBQWMsQ0FBQ0csYUFBYSxhQUFhO1FBQzlDTCxVQUFVLEtBQUs7SUFDakI7SUFDQSxPQUFPSztBQUNULENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jcmVhdGVDbGFzcy5qcz9lZDBlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0b1Byb3BlcnR5S2V5IGZyb20gXCIuL3RvUHJvcGVydHlLZXkuanNcIjtcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHRvUHJvcGVydHlLZXkoZGVzY3JpcHRvci5rZXkpLCBkZXNjcmlwdG9yKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29uc3RydWN0b3IsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn0iXSwibmFtZXMiOlsidG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwibGVuZ3RoIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwcm90b3R5cGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/createClass.js\n");
|
|
734
|
-
|
|
735
|
-
/***/ }),
|
|
736
|
-
|
|
737
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js":
|
|
738
|
-
/*!**************************************************************************!*\
|
|
739
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
|
|
740
|
-
\**************************************************************************/
|
|
741
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
742
|
-
|
|
743
|
-
"use strict";
|
|
744
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _defineProperty)\n/* harmony export */ });\n/* harmony import */ var _toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toPropertyKey.js */ \"../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\");\n\nfunction _defineProperty(obj, key, value) {\n key = (0,_toPropertyKey_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStDO0FBQ2hDLFNBQVNDLGdCQUFnQkMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLEtBQUssRUFBRTtJQUN2REQsTUFBTUgsNkRBQWFBLENBQUNHO0lBQ3BCLElBQUlBLE9BQU9ELEtBQUs7UUFDZEcsT0FBT0MsY0FBYyxDQUFDSixLQUFLQyxLQUFLO1lBQzlCQyxPQUFPQTtZQUNQRyxZQUFZLElBQUk7WUFDaEJDLGNBQWMsSUFBSTtZQUNsQkMsVUFBVSxJQUFJO1FBQ2hCO0lBQ0YsT0FBTztRQUNMUCxHQUFHLENBQUNDLElBQUksR0FBR0M7SUFDYixDQUFDO0lBQ0QsT0FBT0Y7QUFDVCxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanM/NjhkMiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIG9iajtcbn0iXSwibmFtZXMiOlsidG9Qcm9wZXJ0eUtleSIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\n");
|
|
745
|
-
|
|
746
|
-
/***/ }),
|
|
747
|
-
|
|
748
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js":
|
|
749
|
-
/*!**************************************************************************!*\
|
|
750
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js ***!
|
|
751
|
-
\**************************************************************************/
|
|
752
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
753
|
-
|
|
754
|
-
"use strict";
|
|
755
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _getPrototypeOf)\n/* harmony export */ });\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2dldFByb3RvdHlwZU9mLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSxnQkFBZ0JDLENBQUMsRUFBRTtJQUN6Q0Qsa0JBQWtCRSxPQUFPQyxjQUFjLEdBQUdELE9BQU9FLGNBQWMsQ0FBQ0MsSUFBSSxLQUFLLFNBQVNMLGdCQUFnQkMsQ0FBQyxFQUFFO1FBQ25HLE9BQU9BLEVBQUVLLFNBQVMsSUFBSUosT0FBT0UsY0FBYyxDQUFDSDtJQUM5QyxDQUFDO0lBQ0QsT0FBT0QsZ0JBQWdCQztBQUN6QixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YuanM/NmI4YSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2Yobykge1xuICBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufSJdLCJuYW1lcyI6WyJfZ2V0UHJvdG90eXBlT2YiLCJvIiwiT2JqZWN0Iiwic2V0UHJvdG90eXBlT2YiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJfX3Byb3RvX18iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\n");
|
|
756
|
-
|
|
757
|
-
/***/ }),
|
|
758
|
-
|
|
759
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/inherits.js":
|
|
760
|
-
/*!********************************************************************!*\
|
|
761
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/inherits.js ***!
|
|
762
|
-
\********************************************************************/
|
|
763
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
764
|
-
|
|
765
|
-
"use strict";
|
|
766
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _inherits)\n/* harmony export */ });\n/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ \"../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(subClass, superClass);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWlEO0FBQ2xDLFNBQVNDLFVBQVVDLFFBQVEsRUFBRUMsVUFBVSxFQUFFO0lBQ3RELElBQUksT0FBT0EsZUFBZSxjQUFjQSxlQUFlLElBQUksRUFBRTtRQUMzRCxNQUFNLElBQUlDLFVBQVUsc0RBQXNEO0lBQzVFLENBQUM7SUFDREYsU0FBU0csU0FBUyxHQUFHQyxPQUFPQyxNQUFNLENBQUNKLGNBQWNBLFdBQVdFLFNBQVMsRUFBRTtRQUNyRUcsYUFBYTtZQUNYQyxPQUFPUDtZQUNQUSxVQUFVLElBQUk7WUFDZEMsY0FBYyxJQUFJO1FBQ3BCO0lBQ0Y7SUFDQUwsT0FBT00sY0FBYyxDQUFDVixVQUFVLGFBQWE7UUFDM0NRLFVBQVUsS0FBSztJQUNqQjtJQUNBLElBQUlQLFlBQVlILDhEQUFjQSxDQUFDRSxVQUFVQztBQUMzQyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHMuanM/NThhNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICB9XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcywgXCJwcm90b3R5cGVcIiwge1xuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIHNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn0iXSwibmFtZXMiOlsic2V0UHJvdG90eXBlT2YiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJUeXBlRXJyb3IiLCJwcm90b3R5cGUiLCJPYmplY3QiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsInZhbHVlIiwid3JpdGFibGUiLCJjb25maWd1cmFibGUiLCJkZWZpbmVQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/inherits.js\n");
|
|
767
|
-
|
|
768
|
-
/***/ }),
|
|
769
|
-
|
|
770
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
|
|
771
|
-
/*!***************************************************************************!*\
|
|
772
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
|
|
773
|
-
\***************************************************************************/
|
|
774
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
775
|
-
|
|
776
|
-
"use strict";
|
|
777
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _iterableToArray)\n/* harmony export */ });\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2l0ZXJhYmxlVG9BcnJheS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsaUJBQWlCQyxJQUFJLEVBQUU7SUFDN0MsSUFBSSxPQUFPQyxXQUFXLGVBQWVELElBQUksQ0FBQ0MsT0FBT0MsUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJRixJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxPQUFPRyxNQUFNQyxJQUFJLENBQUNKO0FBQ3RILENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pdGVyYWJsZVRvQXJyYXkuanM/ZjlmYyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHtcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG59Il0sIm5hbWVzIjpbIl9pdGVyYWJsZVRvQXJyYXkiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImZyb20iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js\n");
|
|
778
|
-
|
|
779
|
-
/***/ }),
|
|
780
|
-
|
|
781
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
|
|
782
|
-
/*!***************************************************************************!*\
|
|
783
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
|
|
784
|
-
\***************************************************************************/
|
|
785
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
786
|
-
|
|
787
|
-
"use strict";
|
|
788
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _nonIterableRest)\n/* harmony export */ });\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsbUJBQW1CO0lBQ3pDLE1BQU0sSUFBSUMsVUFBVSw2SUFBNkk7QUFDbkssQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL25vbkl0ZXJhYmxlUmVzdC5qcz9iNGYzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59Il0sIm5hbWVzIjpbIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\n");
|
|
789
|
-
|
|
790
|
-
/***/ }),
|
|
791
|
-
|
|
792
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js":
|
|
793
|
-
/*!*************************************************************************************!*\
|
|
794
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js ***!
|
|
795
|
-
\*************************************************************************************/
|
|
796
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
797
|
-
|
|
798
|
-
"use strict";
|
|
799
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _possibleConstructorReturn)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assertThisInitialized.js */ \"../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return (0,_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(self);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWtDO0FBQzZCO0FBQ2hELFNBQVNFLDJCQUEyQkMsSUFBSSxFQUFFQyxJQUFJLEVBQUU7SUFDN0QsSUFBSUEsUUFBU0osQ0FBQUEsc0RBQU9BLENBQUNJLFVBQVUsWUFBWSxPQUFPQSxTQUFTLFVBQVMsR0FBSTtRQUN0RSxPQUFPQTtJQUNULE9BQU8sSUFBSUEsU0FBUyxLQUFLLEdBQUc7UUFDMUIsTUFBTSxJQUFJQyxVQUFVLDREQUE0RDtJQUNsRixDQUFDO0lBQ0QsT0FBT0oscUVBQXFCQSxDQUFDRTtBQUMvQixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcz8zMDRlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IGFzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiLi9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHtcbiAgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHtcbiAgICByZXR1cm4gY2FsbDtcbiAgfSBlbHNlIGlmIChjYWxsICE9PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIGFzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTtcbn0iXSwibmFtZXMiOlsiX3R5cGVvZiIsImFzc2VydFRoaXNJbml0aWFsaXplZCIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2VsZiIsImNhbGwiLCJUeXBlRXJyb3IiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\n");
|
|
800
|
-
|
|
801
|
-
/***/ }),
|
|
802
|
-
|
|
803
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":
|
|
804
|
-
/*!**************************************************************************!*\
|
|
805
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***!
|
|
806
|
-
\**************************************************************************/
|
|
807
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
808
|
-
|
|
809
|
-
"use strict";
|
|
810
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _setPrototypeOf)\n/* harmony export */ });\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZSxTQUFTQSxnQkFBZ0JDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0lBQzVDRixrQkFBa0JHLE9BQU9DLGNBQWMsR0FBR0QsT0FBT0MsY0FBYyxDQUFDQyxJQUFJLEtBQUssU0FBU0wsZ0JBQWdCQyxDQUFDLEVBQUVDLENBQUMsRUFBRTtRQUN0R0QsRUFBRUssU0FBUyxHQUFHSjtRQUNkLE9BQU9EO0lBQ1QsQ0FBQztJQUNELE9BQU9ELGdCQUFnQkMsR0FBR0M7QUFDNUIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NldFByb3RvdHlwZU9mLmpzPzlhY2MiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xufSJdLCJuYW1lcyI6WyJfc2V0UHJvdG90eXBlT2YiLCJvIiwicCIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwiYmluZCIsIl9fcHJvdG9fXyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js\n");
|
|
811
|
-
|
|
812
|
-
/***/ }),
|
|
813
|
-
|
|
814
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/toArray.js":
|
|
815
|
-
/*!*******************************************************************!*\
|
|
816
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/toArray.js ***!
|
|
817
|
-
\*******************************************************************/
|
|
818
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
819
|
-
|
|
820
|
-
"use strict";
|
|
821
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toArray)\n/* harmony export */ });\n/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ \"../../../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js\");\n/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ \"../../../node_modules/@babel/runtime/helpers/esm/iterableToArray.js\");\n/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ \"../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\");\n/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ \"../../../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js\");\n\n\n\n\nfunction _toArray(arr) {\n return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(arr) || (0,_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arr) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(arr) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])();\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQXJyYXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBaUQ7QUFDRTtBQUNzQjtBQUN0QjtBQUNwQyxTQUFTSSxTQUFTQyxHQUFHLEVBQUU7SUFDcEMsT0FBT0wsOERBQWNBLENBQUNLLFFBQVFKLCtEQUFlQSxDQUFDSSxRQUFRSCwwRUFBMEJBLENBQUNHLFFBQVFGLCtEQUFlQTtBQUMxRyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9BcnJheS5qcz8wZjhhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcnJheVdpdGhIb2xlcyBmcm9tIFwiLi9hcnJheVdpdGhIb2xlcy5qc1wiO1xuaW1wb3J0IGl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90b0FycmF5KGFycikge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IG5vbkl0ZXJhYmxlUmVzdCgpO1xufSJdLCJuYW1lcyI6WyJhcnJheVdpdGhIb2xlcyIsIml0ZXJhYmxlVG9BcnJheSIsInVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5Iiwibm9uSXRlcmFibGVSZXN0IiwiX3RvQXJyYXkiLCJhcnIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/toArray.js\n");
|
|
822
|
-
|
|
823
|
-
/***/ }),
|
|
824
|
-
|
|
825
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js":
|
|
826
|
-
/*!***********************************************************************!*\
|
|
827
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js ***!
|
|
828
|
-
\***********************************************************************/
|
|
829
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
830
|
-
|
|
831
|
-
"use strict";
|
|
832
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toPrimitive)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n\nfunction _toPrimitive(input, hint) {\n if ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWtDO0FBQ25CLFNBQVNDLGFBQWFDLEtBQUssRUFBRUMsSUFBSSxFQUFFO0lBQ2hELElBQUlILHNEQUFPQSxDQUFDRSxXQUFXLFlBQVlBLFVBQVUsSUFBSSxFQUFFLE9BQU9BO0lBQzFELElBQUlFLE9BQU9GLEtBQUssQ0FBQ0csT0FBT0MsV0FBVyxDQUFDO0lBQ3BDLElBQUlGLFNBQVNHLFdBQVc7UUFDdEIsSUFBSUMsTUFBTUosS0FBS0ssSUFBSSxDQUFDUCxPQUFPQyxRQUFRO1FBQ25DLElBQUlILHNEQUFPQSxDQUFDUSxTQUFTLFVBQVUsT0FBT0E7UUFDdEMsTUFBTSxJQUFJRSxVQUFVLGdEQUFnRDtJQUN0RSxDQUFDO0lBQ0QsT0FBTyxDQUFDUCxTQUFTLFdBQVdRLFNBQVNDLE1BQU0sRUFBRVY7QUFDL0MsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzPzI0YTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHtcbiAgaWYgKF90eXBlb2YoaW5wdXQpICE9PSBcIm9iamVjdFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBwcmltID0gaW5wdXRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHByaW0gIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZXMgPSBwcmltLmNhbGwoaW5wdXQsIGhpbnQgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChfdHlwZW9mKHJlcykgIT09IFwib2JqZWN0XCIpIHJldHVybiByZXM7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoaGludCA9PT0gXCJzdHJpbmdcIiA/IFN0cmluZyA6IE51bWJlcikoaW5wdXQpO1xufSJdLCJuYW1lcyI6WyJfdHlwZW9mIiwiX3RvUHJpbWl0aXZlIiwiaW5wdXQiLCJoaW50IiwicHJpbSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwidW5kZWZpbmVkIiwicmVzIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js\n");
|
|
833
|
-
|
|
834
|
-
/***/ }),
|
|
835
|
-
|
|
836
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js":
|
|
837
|
-
/*!*************************************************************************!*\
|
|
838
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js ***!
|
|
839
|
-
\*************************************************************************/
|
|
840
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
841
|
-
|
|
842
|
-
"use strict";
|
|
843
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _toPropertyKey)\n/* harmony export */ });\n/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./toPrimitive.js */ \"../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js\");\n\n\nfunction _toPropertyKey(arg) {\n var key = (0,_toPrimitive_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arg, \"string\");\n return (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(key) === \"symbol\" ? key : String(key);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWtDO0FBQ1M7QUFDNUIsU0FBU0UsZUFBZUMsR0FBRyxFQUFFO0lBQzFDLElBQUlDLE1BQU1ILDJEQUFXQSxDQUFDRSxLQUFLO0lBQzNCLE9BQU9ILHNEQUFPQSxDQUFDSSxTQUFTLFdBQVdBLE1BQU1DLE9BQU9ELElBQUk7QUFDdEQsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanM/MzIzNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX3RvUHJvcGVydHlLZXkoYXJnKSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gX3R5cGVvZihrZXkpID09PSBcInN5bWJvbFwiID8ga2V5IDogU3RyaW5nKGtleSk7XG59Il0sIm5hbWVzIjpbIl90eXBlb2YiLCJ0b1ByaW1pdGl2ZSIsIl90b1Byb3BlcnR5S2V5IiwiYXJnIiwia2V5IiwiU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js\n");
|
|
844
|
-
|
|
845
|
-
/***/ }),
|
|
846
|
-
|
|
847
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/typeof.js":
|
|
848
|
-
/*!******************************************************************!*\
|
|
849
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/typeof.js ***!
|
|
850
|
-
\******************************************************************/
|
|
851
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
852
|
-
|
|
853
|
-
"use strict";
|
|
854
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _typeof)\n/* harmony export */ });\nfunction _typeof(o) {\n \"@babel/helpers - typeof\";\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function _typeof(o) {\n return typeof o;\n } : function(o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWUsU0FBU0EsUUFBUUMsQ0FBQyxFQUFFO0lBQ2pDO0lBRUEsT0FBT0QsVUFBVSxjQUFjLE9BQU9FLFVBQVUsWUFBWSxPQUFPQSxPQUFPQyxRQUFRLEdBQUcsU0FBOUVILFFBQXdGQyxDQUFDLEVBQUU7UUFDaEcsT0FBTyxPQUFPQTtJQUNoQixJQUFJLFNBQVVBLENBQUMsRUFBRTtRQUNmLE9BQU9BLEtBQUssY0FBYyxPQUFPQyxVQUFVRCxFQUFFRyxXQUFXLEtBQUtGLFVBQVVELE1BQU1DLE9BQU9HLFNBQVMsR0FBRyxXQUFXLE9BQU9KLENBQUM7SUFDckgsQ0FBQyxFQUFFRCxRQUFRQyxFQUFFO0FBQ2YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcz83NjIxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59Il0sIm5hbWVzIjpbIl90eXBlb2YiLCJvIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/typeof.js\n");
|
|
855
|
-
|
|
856
|
-
/***/ }),
|
|
857
|
-
|
|
858
|
-
/***/ "../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
|
|
859
|
-
/*!**************************************************************************************!*\
|
|
860
|
-
!*** ../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
|
|
861
|
-
\**************************************************************************************/
|
|
862
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
863
|
-
|
|
864
|
-
"use strict";
|
|
865
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ _unsupportedIterableToArray)\n/* harmony export */ });\n/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ \"../../../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(o, minLen);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFEO0FBQ3RDLFNBQVNDLDRCQUE0QkMsQ0FBQyxFQUFFQyxNQUFNLEVBQUU7SUFDN0QsSUFBSSxDQUFDRCxHQUFHO0lBQ1IsSUFBSSxPQUFPQSxNQUFNLFVBQVUsT0FBT0YsZ0VBQWdCQSxDQUFDRSxHQUFHQztJQUN0RCxJQUFJQyxJQUFJQyxPQUFPQyxTQUFTLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDTixHQUFHTyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3BELElBQUlMLE1BQU0sWUFBWUYsRUFBRVEsV0FBVyxFQUFFTixJQUFJRixFQUFFUSxXQUFXLENBQUNDLElBQUk7SUFDM0QsSUFBSVAsTUFBTSxTQUFTQSxNQUFNLE9BQU8sT0FBT1EsTUFBTUMsSUFBSSxDQUFDWDtJQUNsRCxJQUFJRSxNQUFNLGVBQWUsMkNBQTJDVSxJQUFJLENBQUNWLElBQUksT0FBT0osZ0VBQWdCQSxDQUFDRSxHQUFHQztBQUMxRyxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanM/MWQzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSJdLCJuYW1lcyI6WyJhcnJheUxpa2VUb0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibyIsIm1pbkxlbiIsIm4iLCJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js\n");
|
|
866
|
-
|
|
867
|
-
/***/ }),
|
|
868
|
-
|
|
869
|
-
/***/ "../../../node_modules/i18next/dist/esm/i18next.js":
|
|
870
|
-
/*!*********************************************************!*\
|
|
871
|
-
!*** ../../../node_modules/i18next/dist/esm/i18next.js ***!
|
|
872
|
-
\*********************************************************/
|
|
873
|
-
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
874
|
-
|
|
875
|
-
"use strict";
|
|
876
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ changeLanguage: () => (/* binding */ changeLanguage),\n/* harmony export */ createInstance: () => (/* binding */ createInstance),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ exists: () => (/* binding */ exists),\n/* harmony export */ getFixedT: () => (/* binding */ getFixedT),\n/* harmony export */ hasLoadedNamespace: () => (/* binding */ hasLoadedNamespace),\n/* harmony export */ init: () => (/* binding */ init),\n/* harmony export */ loadLanguages: () => (/* binding */ loadLanguages),\n/* harmony export */ loadNamespaces: () => (/* binding */ loadNamespaces),\n/* harmony export */ loadResources: () => (/* binding */ loadResources),\n/* harmony export */ reloadResources: () => (/* binding */ reloadResources),\n/* harmony export */ setDefaultNamespace: () => (/* binding */ setDefaultNamespace),\n/* harmony export */ t: () => (/* binding */ t),\n/* harmony export */ use: () => (/* binding */ use)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ \"../../../node_modules/@babel/runtime/helpers/esm/typeof.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ \"../../../node_modules/@babel/runtime/helpers/esm/classCallCheck.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ \"../../../node_modules/@babel/runtime/helpers/esm/createClass.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ \"../../../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ \"../../../node_modules/@babel/runtime/helpers/esm/inherits.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/possibleConstructorReturn */ \"../../../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/getPrototypeOf */ \"../../../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ \"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toArray */ \"../../../node_modules/@babel/runtime/helpers/esm/toArray.js\");\nfunction _instanceof(left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return !!right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n}\n\n\n\n\n\n\n\n\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nvar consoleLogger = {\n type: \"logger\",\n log: function log(args) {\n this.output(\"log\", args);\n },\n warn: function warn(args) {\n this.output(\"warn\", args);\n },\n error: function error(args) {\n this.output(\"error\", args);\n },\n output: function output(type, args) {\n if (console && console[type]) console[type].apply(console, args);\n }\n};\nvar Logger = function() {\n function Logger(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Logger);\n this.init(concreteLogger, options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Logger, [\n {\n key: \"init\",\n value: function init(concreteLogger) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n this.prefix = options.prefix || \"i18next:\";\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n },\n {\n key: \"setDebug\",\n value: function setDebug(bool) {\n this.debug = bool;\n }\n },\n {\n key: \"log\",\n value: function log() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n return this.forward(args, \"log\", \"\", true);\n }\n },\n {\n key: \"warn\",\n value: function warn() {\n for(var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++){\n args[_key2] = arguments[_key2];\n }\n return this.forward(args, \"warn\", \"\", true);\n }\n },\n {\n key: \"error\",\n value: function error() {\n for(var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++){\n args[_key3] = arguments[_key3];\n }\n return this.forward(args, \"error\", \"\");\n }\n },\n {\n key: \"deprecate\",\n value: function deprecate() {\n for(var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++){\n args[_key4] = arguments[_key4];\n }\n return this.forward(args, \"warn\", \"WARNING DEPRECATED: \", true);\n }\n },\n {\n key: \"forward\",\n value: function forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (typeof args[0] === \"string\") args[0] = \"\".concat(prefix).concat(this.prefix, \" \").concat(args[0]);\n return this.logger[lvl](args);\n }\n },\n {\n key: \"create\",\n value: function create(moduleName) {\n return new Logger(this.logger, _objectSpread(_objectSpread({}, {\n prefix: \"\".concat(this.prefix, \":\").concat(moduleName, \":\")\n }), this.options));\n }\n },\n {\n key: \"clone\",\n value: function clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n }\n ]);\n return Logger;\n}();\nvar baseLogger = new Logger();\nvar EventEmitter = function() {\n function EventEmitter() {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, EventEmitter);\n this.observers = {};\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(EventEmitter, [\n {\n key: \"on\",\n value: function on(events, listener) {\n var _this = this;\n events.split(\" \").forEach(function(event) {\n _this.observers[event] = _this.observers[event] || [];\n _this.observers[event].push(listener);\n });\n return this;\n }\n },\n {\n key: \"off\",\n value: function off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event] = this.observers[event].filter(function(l) {\n return l !== listener;\n });\n }\n },\n {\n key: \"emit\",\n value: function emit(event) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n if (this.observers[event]) {\n var cloned = [].concat(this.observers[event]);\n cloned.forEach(function(observer) {\n observer.apply(void 0, args);\n });\n }\n if (this.observers[\"*\"]) {\n var _cloned = [].concat(this.observers[\"*\"]);\n _cloned.forEach(function(observer) {\n observer.apply(observer, [\n event\n ].concat(args));\n });\n }\n }\n }\n ]);\n return EventEmitter;\n}();\nfunction defer() {\n var res;\n var rej;\n var promise = new Promise(function(resolve, reject) {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n}\nfunction makeString(object) {\n if (object == null) return \"\";\n return \"\" + object;\n}\nfunction copy(a, s, t) {\n a.forEach(function(m) {\n if (s[m]) t[m] = s[m];\n });\n}\nfunction getLastOfPath(object, path, Empty) {\n var cleanKey = function cleanKey(key) {\n return key && key.indexOf(\"###\") > -1 ? key.replace(/###/g, \".\") : key;\n };\n var canNotTraverseDeeper = function canNotTraverseDeeper() {\n return !object || typeof object === \"string\";\n };\n var stack = typeof path !== \"string\" ? [].concat(path) : path.split(\".\");\n while(stack.length > 1){\n if (canNotTraverseDeeper()) return {};\n var key = cleanKey(stack.shift());\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n }\n if (canNotTraverseDeeper()) return {};\n return {\n obj: object,\n k: cleanKey(stack.shift())\n };\n}\nfunction setPath(object, path, newValue) {\n var _getLastOfPath = getLastOfPath(object, path, Object), obj = _getLastOfPath.obj, k = _getLastOfPath.k;\n obj[k] = newValue;\n}\nfunction pushPath(object, path, newValue, concat) {\n var _getLastOfPath2 = getLastOfPath(object, path, Object), obj = _getLastOfPath2.obj, k = _getLastOfPath2.k;\n obj[k] = obj[k] || [];\n if (concat) obj[k] = obj[k].concat(newValue);\n if (!concat) obj[k].push(newValue);\n}\nfunction getPath(object, path) {\n var _getLastOfPath3 = getLastOfPath(object, path), obj = _getLastOfPath3.obj, k = _getLastOfPath3.k;\n if (!obj) return undefined;\n return obj[k];\n}\nfunction getPathWithDefaults(data, defaultData, key) {\n var value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n}\nfunction deepExtend(target, source, overwrite) {\n for(var prop in source){\n if (prop !== \"__proto__\" && prop !== \"constructor\") {\n if (prop in target) {\n if (typeof target[prop] === \"string\" || _instanceof(target[prop], String) || typeof source[prop] === \"string\" || _instanceof(source[prop], String)) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n}\nfunction regexEscape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\nvar _entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"/\": \"/\"\n};\nfunction escape(data) {\n if (typeof data === \"string\") {\n return data.replace(/[&<>\"'\\/]/g, function(s) {\n return _entityMap[s];\n });\n }\n return data;\n}\nvar isIE10 = typeof window !== \"undefined\" && window.navigator && typeof window.navigator.userAgentData === \"undefined\" && window.navigator.userAgent && window.navigator.userAgent.indexOf(\"MSIE\") > -1;\nvar chars = [\n \" \",\n \",\",\n \"?\",\n \"!\",\n \";\"\n];\nfunction looksLikeObjectPath(key, nsSeparator, keySeparator) {\n nsSeparator = nsSeparator || \"\";\n keySeparator = keySeparator || \"\";\n var possibleChars = chars.filter(function(c) {\n return nsSeparator.indexOf(c) < 0 && keySeparator.indexOf(c) < 0;\n });\n if (possibleChars.length === 0) return true;\n var r = new RegExp(\"(\".concat(possibleChars.map(function(c) {\n return c === \"?\" ? \"\\\\?\" : c;\n }).join(\"|\"), \")\"));\n var matched = !r.test(key);\n if (!matched) {\n var ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n}\nfunction ownKeys$1(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$1(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$1(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$1(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction deepFind(obj, path) {\n var keySeparator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : \".\";\n if (!obj) return undefined;\n if (obj[path]) return obj[path];\n var paths = path.split(keySeparator);\n var current = obj;\n for(var i = 0; i < paths.length; ++i){\n if (!current) return undefined;\n if (typeof current[paths[i]] === \"string\" && i + 1 < paths.length) {\n return undefined;\n }\n if (current[paths[i]] === undefined) {\n var j = 2;\n var p = paths.slice(i, i + j).join(keySeparator);\n var mix = current[p];\n while(mix === undefined && paths.length > i + j){\n j++;\n p = paths.slice(i, i + j).join(keySeparator);\n mix = current[p];\n }\n if (mix === undefined) return undefined;\n if (mix === null) return null;\n if (path.endsWith(p)) {\n if (typeof mix === \"string\") return mix;\n if (p && typeof mix[p] === \"string\") return mix[p];\n }\n var joinedPath = paths.slice(i + j).join(keySeparator);\n if (joinedPath) return deepFind(mix, joinedPath, keySeparator);\n return undefined;\n }\n current = current[paths[i]];\n }\n return current;\n}\nvar ResourceStore = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(ResourceStore, _EventEmitter);\n var _super = _createSuper(ResourceStore);\n function ResourceStore(data) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n ns: [\n \"translation\"\n ],\n defaultNS: \"translation\"\n };\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, ResourceStore);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n _this.data = data || {};\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = \".\";\n }\n if (_this.options.ignoreJSONStructure === undefined) {\n _this.options.ignoreJSONStructure = true;\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(ResourceStore, [\n {\n key: \"addNamespaces\",\n value: function addNamespaces(ns) {\n if (this.options.ns.indexOf(ns) < 0) {\n this.options.ns.push(ns);\n }\n }\n },\n {\n key: \"removeNamespaces\",\n value: function removeNamespaces(ns) {\n var index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n },\n {\n key: \"getResource\",\n value: function getResource(lng, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n var path = [\n lng,\n ns\n ];\n if (key && typeof key !== \"string\") path = path.concat(key);\n if (key && typeof key === \"string\") path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n }\n var result = getPath(this.data, path);\n if (result || !ignoreJSONStructure || typeof key !== \"string\") return result;\n return deepFind(this.data && this.data[lng] && this.data[lng][ns], key, keySeparator);\n }\n },\n {\n key: \"addResource\",\n value: function addResource(lng, ns, key, value) {\n var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {\n silent: false\n };\n var keySeparator = this.options.keySeparator;\n if (keySeparator === undefined) keySeparator = \".\";\n var path = [\n lng,\n ns\n ];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit(\"added\", lng, ns, key, value);\n }\n },\n {\n key: \"addResources\",\n value: function addResources(lng, ns, resources) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {\n silent: false\n };\n for(var m in resources){\n if (typeof resources[m] === \"string\" || Object.prototype.toString.apply(resources[m]) === \"[object Array]\") this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit(\"added\", lng, ns, resources);\n }\n },\n {\n key: \"addResourceBundle\",\n value: function addResourceBundle(lng, ns, resources, deep, overwrite) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {\n silent: false\n };\n var path = [\n lng,\n ns\n ];\n if (lng.indexOf(\".\") > -1) {\n path = lng.split(\".\");\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n var pack = getPath(this.data, path) || {};\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = _objectSpread$1(_objectSpread$1({}, pack), resources);\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit(\"added\", lng, ns, resources);\n }\n },\n {\n key: \"removeResourceBundle\",\n value: function removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit(\"removed\", lng, ns);\n }\n },\n {\n key: \"hasResourceBundle\",\n value: function hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n },\n {\n key: \"getResourceBundle\",\n value: function getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n if (this.options.compatibilityAPI === \"v1\") return _objectSpread$1(_objectSpread$1({}, {}), this.getResource(lng, ns));\n return this.getResource(lng, ns);\n }\n },\n {\n key: \"getDataByLanguage\",\n value: function getDataByLanguage(lng) {\n return this.data[lng];\n }\n },\n {\n key: \"hasLanguageSomeTranslations\",\n value: function hasLanguageSomeTranslations(lng) {\n var data = this.getDataByLanguage(lng);\n var n = data && Object.keys(data) || [];\n return !!n.find(function(v) {\n return data[v] && Object.keys(data[v]).length > 0;\n });\n }\n },\n {\n key: \"toJSON\",\n value: function toJSON() {\n return this.data;\n }\n }\n ]);\n return ResourceStore;\n}(EventEmitter);\nvar postProcessor = {\n processors: {},\n addPostProcessor: function addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle: function handle(processors, value, key, options, translator) {\n var _this = this;\n processors.forEach(function(processor) {\n if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);\n });\n return value;\n }\n};\nfunction ownKeys$2(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$2(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$2(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$2(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper$1(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct$1();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct$1() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nvar checkedLoadedFor = {};\nvar Translator = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Translator, _EventEmitter);\n var _super = _createSuper$1(Translator);\n function Translator(services) {\n var _this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Translator);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n copy([\n \"resourceStore\",\n \"languageUtils\",\n \"pluralResolver\",\n \"interpolator\",\n \"backendConnector\",\n \"i18nFormat\",\n \"utils\"\n ], services, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n _this.options = options;\n if (_this.options.keySeparator === undefined) {\n _this.options.keySeparator = \".\";\n }\n _this.logger = baseLogger.create(\"translator\");\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Translator, [\n {\n key: \"changeLanguage\",\n value: function changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n },\n {\n key: \"exists\",\n value: function exists(key) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n if (key === undefined || key === null) {\n return false;\n }\n var resolved = this.resolve(key, options);\n return resolved && resolved.res !== undefined;\n }\n },\n {\n key: \"extractFromKey\",\n value: function extractFromKey(key, options) {\n var nsSeparator = options.nsSeparator !== undefined ? options.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = \":\";\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var namespaces = options.ns || this.options.defaultNS || [];\n var wouldCheckForNsInKey = nsSeparator && key.indexOf(nsSeparator) > -1;\n var seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !options.keySeparator && !this.options.userDefinedNsSeparator && !options.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n var m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key: key,\n namespaces: namespaces\n };\n }\n var parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.indexOf(parts[0]) > -1) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n if (typeof namespaces === \"string\") namespaces = [\n namespaces\n ];\n return {\n key: key,\n namespaces: namespaces\n };\n }\n },\n {\n key: \"translate\",\n value: function translate(keys, options, lastKey) {\n var _this2 = this;\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(options) !== \"object\" && this.options.overloadTranslationOptionHandler) {\n options = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (!options) options = {};\n if (keys === undefined || keys === null) return \"\";\n if (!Array.isArray(keys)) keys = [\n String(keys)\n ];\n var returnDetails = options.returnDetails !== undefined ? options.returnDetails : this.options.returnDetails;\n var keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n var _this$extractFromKey = this.extractFromKey(keys[keys.length - 1], options), key = _this$extractFromKey.key, namespaces = _this$extractFromKey.namespaces;\n var namespace = namespaces[namespaces.length - 1];\n var lng = options.lng || this.language;\n var appendNamespaceToCIMode = options.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng && lng.toLowerCase() === \"cimode\") {\n if (appendNamespaceToCIMode) {\n var nsSeparator = options.nsSeparator || this.options.nsSeparator;\n if (returnDetails) {\n resolved.res = \"\".concat(namespace).concat(nsSeparator).concat(key);\n return resolved;\n }\n return \"\".concat(namespace).concat(nsSeparator).concat(key);\n }\n if (returnDetails) {\n resolved.res = key;\n return resolved;\n }\n return key;\n }\n var resolved = this.resolve(keys, options);\n var res = resolved && resolved.res;\n var resUsedKey = resolved && resolved.usedKey || key;\n var resExactUsedKey = resolved && resolved.exactUsedKey || key;\n var resType = Object.prototype.toString.apply(res);\n var noObject = [\n \"[object Number]\",\n \"[object Function]\",\n \"[object RegExp]\"\n ];\n var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;\n var handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n var handleAsObject = typeof res !== \"string\" && typeof res !== \"boolean\" && typeof res !== \"number\";\n if (handleAsObjectInI18nFormat && res && handleAsObject && noObject.indexOf(resType) < 0 && !(typeof joinArrays === \"string\" && resType === \"[object Array]\")) {\n if (!options.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn(\"accessing an object - but returnObjects options is not enabled!\");\n }\n var r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, res, _objectSpread$2(_objectSpread$2({}, options), {}, {\n ns: namespaces\n })) : \"key '\".concat(key, \" (\").concat(this.language, \")' returned an object instead of string.\");\n if (returnDetails) {\n resolved.res = r;\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n var resTypeIsArray = resType === \"[object Array]\";\n var copy = resTypeIsArray ? [] : {};\n var newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for(var m in res){\n if (Object.prototype.hasOwnProperty.call(res, m)) {\n var deepKey = \"\".concat(newKeyToUse).concat(keySeparator).concat(m);\n copy[m] = this.translate(deepKey, _objectSpread$2(_objectSpread$2({}, options), {\n joinArrays: false,\n ns: namespaces\n }));\n if (copy[m] === deepKey) copy[m] = res[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && typeof joinArrays === \"string\" && resType === \"[object Array]\") {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, options, lastKey);\n } else {\n var usedDefault = false;\n var usedKey = false;\n var needsPluralHandling = options.count !== undefined && typeof options.count !== \"string\";\n var hasDefaultValue = Translator.hasDefaultValue(options);\n var defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, options.count, options) : \"\";\n var defaultValue = options[\"defaultValue\".concat(defaultValueSuffix)] || options.defaultValue;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n var missingKeyNoValueFallbackToKey = options.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n var resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n var updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? \"updateKey\" : \"missingKey\", lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n var fk = this.resolve(key, _objectSpread$2(_objectSpread$2({}, options), {}, {\n keySeparator: false\n }));\n if (fk && fk.res) this.logger.warn(\"Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.\");\n }\n var lngs = [];\n var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);\n if (this.options.saveMissingTo === \"fallback\" && fallbackLngs && fallbackLngs[0]) {\n for(var i = 0; i < fallbackLngs.length; i++){\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === \"all\") {\n lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);\n } else {\n lngs.push(options.lng || this.language);\n }\n var send = function send(l, k, specificDefaultValue) {\n var defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (_this2.options.missingKeyHandler) {\n _this2.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, options);\n } else if (_this2.backendConnector && _this2.backendConnector.saveMissing) {\n _this2.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, options);\n }\n _this2.emit(\"missingKey\", l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(function(language) {\n _this2.pluralResolver.getSuffixes(language, options).forEach(function(suffix) {\n send([\n language\n ], key + suffix, options[\"defaultValue\".concat(suffix)] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, options, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = \"\".concat(namespace, \":\").concat(key);\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n if (this.options.compatibilityAPI !== \"v1\") {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? \"\".concat(namespace, \":\").concat(key) : key, usedDefault ? res : undefined);\n } else {\n res = this.options.parseMissingKeyHandler(res);\n }\n }\n }\n if (returnDetails) {\n resolved.res = res;\n return resolved;\n }\n return res;\n }\n },\n {\n key: \"extendTranslation\",\n value: function extendTranslation(res, key, options, resolved, lastKey) {\n var _this3 = this;\n if (this.i18nFormat && this.i18nFormat.parse) {\n res = this.i18nFormat.parse(res, _objectSpread$2(_objectSpread$2({}, this.options.interpolation.defaultVariables), options), resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved: resolved\n });\n } else if (!options.skipInterpolation) {\n if (options.interpolation) this.interpolator.init(_objectSpread$2(_objectSpread$2({}, options), {\n interpolation: _objectSpread$2(_objectSpread$2({}, this.options.interpolation), options.interpolation)\n }));\n var skipOnVariables = typeof res === \"string\" && (options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n var nestBef;\n if (skipOnVariables) {\n var nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n var data = options.replace && typeof options.replace !== \"string\" ? options.replace : options;\n if (this.options.interpolation.defaultVariables) data = _objectSpread$2(_objectSpread$2({}, this.options.interpolation.defaultVariables), data);\n res = this.interpolator.interpolate(res, data, options.lng || this.language, options);\n if (skipOnVariables) {\n var na = res.match(this.interpolator.nestingRegexp);\n var nestAft = na && na.length;\n if (nestBef < nestAft) options.nest = false;\n }\n if (options.nest !== false) res = this.interpolator.nest(res, function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (lastKey && lastKey[0] === args[0] && !options.context) {\n _this3.logger.warn(\"It seems you are nesting recursively key: \".concat(args[0], \" in key: \").concat(key[0]));\n return null;\n }\n return _this3.translate.apply(_this3, args.concat([\n key\n ]));\n }, options);\n if (options.interpolation) this.interpolator.reset();\n }\n var postProcess = options.postProcess || this.options.postProcess;\n var postProcessorNames = typeof postProcess === \"string\" ? [\n postProcess\n ] : postProcess;\n if (res !== undefined && res !== null && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? _objectSpread$2({\n i18nResolved: resolved\n }, options) : options, this);\n }\n return res;\n }\n },\n {\n key: \"resolve\",\n value: function resolve(keys) {\n var _this4 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var found;\n var usedKey;\n var exactUsedKey;\n var usedLng;\n var usedNS;\n if (typeof keys === \"string\") keys = [\n keys\n ];\n keys.forEach(function(k) {\n if (_this4.isValidLookup(found)) return;\n var extracted = _this4.extractFromKey(k, options);\n var key = extracted.key;\n usedKey = key;\n var namespaces = extracted.namespaces;\n if (_this4.options.fallbackNS) namespaces = namespaces.concat(_this4.options.fallbackNS);\n var needsPluralHandling = options.count !== undefined && typeof options.count !== \"string\";\n var needsZeroSuffixLookup = needsPluralHandling && !options.ordinal && options.count === 0 && _this4.pluralResolver.shouldUseIntlApi();\n var needsContextHandling = options.context !== undefined && (typeof options.context === \"string\" || typeof options.context === \"number\") && options.context !== \"\";\n var codes = options.lngs ? options.lngs : _this4.languageUtils.toResolveHierarchy(options.lng || _this4.language, options.fallbackLng);\n namespaces.forEach(function(ns) {\n if (_this4.isValidLookup(found)) return;\n usedNS = ns;\n if (!checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] && _this4.utils && _this4.utils.hasLoadedNamespace && !_this4.utils.hasLoadedNamespace(usedNS)) {\n checkedLoadedFor[\"\".concat(codes[0], \"-\").concat(ns)] = true;\n _this4.logger.warn('key \"'.concat(usedKey, '\" for languages \"').concat(codes.join(\", \"), '\" won\\'t get resolved as namespace \"').concat(usedNS, '\" was not yet loaded'), \"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");\n }\n codes.forEach(function(code) {\n if (_this4.isValidLookup(found)) return;\n usedLng = code;\n var finalKeys = [\n key\n ];\n if (_this4.i18nFormat && _this4.i18nFormat.addLookupKeys) {\n _this4.i18nFormat.addLookupKeys(finalKeys, key, code, ns, options);\n } else {\n var pluralSuffix;\n if (needsPluralHandling) pluralSuffix = _this4.pluralResolver.getSuffix(code, options.count, options);\n var zeroSuffix = \"\".concat(_this4.options.pluralSeparator, \"zero\");\n if (needsPluralHandling) {\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n var contextKey = \"\".concat(key).concat(_this4.options.contextSeparator).concat(options.context);\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n var possibleKey;\n while(possibleKey = finalKeys.pop()){\n if (!_this4.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = _this4.getResource(code, ns, possibleKey, options);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey: usedKey,\n exactUsedKey: exactUsedKey,\n usedLng: usedLng,\n usedNS: usedNS\n };\n }\n },\n {\n key: \"isValidLookup\",\n value: function isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === \"\");\n }\n },\n {\n key: \"getResource\",\n value: function getResource(code, ns, key) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n if (this.i18nFormat && this.i18nFormat.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n }\n ], [\n {\n key: \"hasDefaultValue\",\n value: function hasDefaultValue(options) {\n var prefix = \"defaultValue\";\n for(var option in options){\n if (Object.prototype.hasOwnProperty.call(options, option) && prefix === option.substring(0, prefix.length) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n }\n ]);\n return Translator;\n}(EventEmitter);\nfunction capitalize(string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\nvar LanguageUtil = function() {\n function LanguageUtil(options) {\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, LanguageUtil);\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create(\"languageUtils\");\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(LanguageUtil, [\n {\n key: \"getScriptPartFromCode\",\n value: function getScriptPartFromCode(code) {\n if (!code || code.indexOf(\"-\") < 0) return null;\n var p = code.split(\"-\");\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === \"x\") return null;\n return this.formatLanguageCode(p.join(\"-\"));\n }\n },\n {\n key: \"getLanguagePartFromCode\",\n value: function getLanguagePartFromCode(code) {\n if (!code || code.indexOf(\"-\") < 0) return code;\n var p = code.split(\"-\");\n return this.formatLanguageCode(p[0]);\n }\n },\n {\n key: \"formatLanguageCode\",\n value: function formatLanguageCode(code) {\n if (typeof code === \"string\" && code.indexOf(\"-\") > -1) {\n var specialCases = [\n \"hans\",\n \"hant\",\n \"latn\",\n \"cyrl\",\n \"cans\",\n \"mong\",\n \"arab\"\n ];\n var p = code.split(\"-\");\n if (this.options.lowerCaseLng) {\n p = p.map(function(part) {\n return part.toLowerCase();\n });\n } else if (p.length === 2) {\n p[0] = p[0].toLowerCase();\n p[1] = p[1].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n } else if (p.length === 3) {\n p[0] = p[0].toLowerCase();\n if (p[1].length === 2) p[1] = p[1].toUpperCase();\n if (p[0] !== \"sgn\" && p[2].length === 2) p[2] = p[2].toUpperCase();\n if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());\n if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());\n }\n return p.join(\"-\");\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n },\n {\n key: \"isSupportedCode\",\n value: function isSupportedCode(code) {\n if (this.options.load === \"languageOnly\" || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.indexOf(code) > -1;\n }\n },\n {\n key: \"getBestMatchFromCodes\",\n value: function getBestMatchFromCodes(codes) {\n var _this = this;\n if (!codes) return null;\n var found;\n codes.forEach(function(code) {\n if (found) return;\n var cleanedLng = _this.formatLanguageCode(code);\n if (!_this.options.supportedLngs || _this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(function(code) {\n if (found) return;\n var lngOnly = _this.getLanguagePartFromCode(code);\n if (_this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = _this.options.supportedLngs.find(function(supportedLng) {\n if (supportedLng.indexOf(lngOnly) === 0) return supportedLng;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n },\n {\n key: \"getFallbackCodes\",\n value: function getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === \"function\") fallbacks = fallbacks(code);\n if (typeof fallbacks === \"string\") fallbacks = [\n fallbacks\n ];\n if (Object.prototype.toString.apply(fallbacks) === \"[object Array]\") return fallbacks;\n if (!code) return fallbacks[\"default\"] || [];\n var found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks[\"default\"];\n return found || [];\n }\n },\n {\n key: \"toResolveHierarchy\",\n value: function toResolveHierarchy(code, fallbackCode) {\n var _this2 = this;\n var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);\n var codes = [];\n var addCode = function addCode(c) {\n if (!c) return;\n if (_this2.isSupportedCode(c)) {\n codes.push(c);\n } else {\n _this2.logger.warn(\"rejecting language code not found in supportedLngs: \".concat(c));\n }\n };\n if (typeof code === \"string\" && code.indexOf(\"-\") > -1) {\n if (this.options.load !== \"languageOnly\") addCode(this.formatLanguageCode(code));\n if (this.options.load !== \"languageOnly\" && this.options.load !== \"currentOnly\") addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== \"currentOnly\") addCode(this.getLanguagePartFromCode(code));\n } else if (typeof code === \"string\") {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(function(fc) {\n if (codes.indexOf(fc) < 0) addCode(_this2.formatLanguageCode(fc));\n });\n return codes;\n }\n }\n ]);\n return LanguageUtil;\n}();\nvar sets = [\n {\n lngs: [\n \"ach\",\n \"ak\",\n \"am\",\n \"arn\",\n \"br\",\n \"fil\",\n \"gun\",\n \"ln\",\n \"mfe\",\n \"mg\",\n \"mi\",\n \"oc\",\n \"pt\",\n \"pt-BR\",\n \"tg\",\n \"tl\",\n \"ti\",\n \"tr\",\n \"uz\",\n \"wa\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 1\n },\n {\n lngs: [\n \"af\",\n \"an\",\n \"ast\",\n \"az\",\n \"bg\",\n \"bn\",\n \"ca\",\n \"da\",\n \"de\",\n \"dev\",\n \"el\",\n \"en\",\n \"eo\",\n \"es\",\n \"et\",\n \"eu\",\n \"fi\",\n \"fo\",\n \"fur\",\n \"fy\",\n \"gl\",\n \"gu\",\n \"ha\",\n \"hi\",\n \"hu\",\n \"hy\",\n \"ia\",\n \"it\",\n \"kk\",\n \"kn\",\n \"ku\",\n \"lb\",\n \"mai\",\n \"ml\",\n \"mn\",\n \"mr\",\n \"nah\",\n \"nap\",\n \"nb\",\n \"ne\",\n \"nl\",\n \"nn\",\n \"no\",\n \"nso\",\n \"pa\",\n \"pap\",\n \"pms\",\n \"ps\",\n \"pt-PT\",\n \"rm\",\n \"sco\",\n \"se\",\n \"si\",\n \"so\",\n \"son\",\n \"sq\",\n \"sv\",\n \"sw\",\n \"ta\",\n \"te\",\n \"tk\",\n \"ur\",\n \"yo\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 2\n },\n {\n lngs: [\n \"ay\",\n \"bo\",\n \"cgg\",\n \"fa\",\n \"ht\",\n \"id\",\n \"ja\",\n \"jbo\",\n \"ka\",\n \"km\",\n \"ko\",\n \"ky\",\n \"lo\",\n \"ms\",\n \"sah\",\n \"su\",\n \"th\",\n \"tt\",\n \"ug\",\n \"vi\",\n \"wo\",\n \"zh\"\n ],\n nr: [\n 1\n ],\n fc: 3\n },\n {\n lngs: [\n \"be\",\n \"bs\",\n \"cnr\",\n \"dz\",\n \"hr\",\n \"ru\",\n \"sr\",\n \"uk\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 4\n },\n {\n lngs: [\n \"ar\"\n ],\n nr: [\n 0,\n 1,\n 2,\n 3,\n 11,\n 100\n ],\n fc: 5\n },\n {\n lngs: [\n \"cs\",\n \"sk\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 6\n },\n {\n lngs: [\n \"csb\",\n \"pl\"\n ],\n nr: [\n 1,\n 2,\n 5\n ],\n fc: 7\n },\n {\n lngs: [\n \"cy\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 8\n ],\n fc: 8\n },\n {\n lngs: [\n \"fr\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 9\n },\n {\n lngs: [\n \"ga\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 7,\n 11\n ],\n fc: 10\n },\n {\n lngs: [\n \"gd\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 20\n ],\n fc: 11\n },\n {\n lngs: [\n \"is\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 12\n },\n {\n lngs: [\n \"jv\"\n ],\n nr: [\n 0,\n 1\n ],\n fc: 13\n },\n {\n lngs: [\n \"kw\"\n ],\n nr: [\n 1,\n 2,\n 3,\n 4\n ],\n fc: 14\n },\n {\n lngs: [\n \"lt\"\n ],\n nr: [\n 1,\n 2,\n 10\n ],\n fc: 15\n },\n {\n lngs: [\n \"lv\"\n ],\n nr: [\n 1,\n 2,\n 0\n ],\n fc: 16\n },\n {\n lngs: [\n \"mk\"\n ],\n nr: [\n 1,\n 2\n ],\n fc: 17\n },\n {\n lngs: [\n \"mnk\"\n ],\n nr: [\n 0,\n 1,\n 2\n ],\n fc: 18\n },\n {\n lngs: [\n \"mt\"\n ],\n nr: [\n 1,\n 2,\n 11,\n 20\n ],\n fc: 19\n },\n {\n lngs: [\n \"or\"\n ],\n nr: [\n 2,\n 1\n ],\n fc: 2\n },\n {\n lngs: [\n \"ro\"\n ],\n nr: [\n 1,\n 2,\n 20\n ],\n fc: 20\n },\n {\n lngs: [\n \"sl\"\n ],\n nr: [\n 5,\n 1,\n 2,\n 3\n ],\n fc: 21\n },\n {\n lngs: [\n \"he\",\n \"iw\"\n ],\n nr: [\n 1,\n 2,\n 20,\n 21\n ],\n fc: 22\n }\n];\nvar _rulesPluralsTypes = {\n 1: function _(n) {\n return Number(n > 1);\n },\n 2: function _(n) {\n return Number(n != 1);\n },\n 3: function _(n) {\n return 0;\n },\n 4: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 5: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);\n },\n 6: function _(n) {\n return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);\n },\n 7: function _(n) {\n return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 8: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);\n },\n 9: function _(n) {\n return Number(n >= 2);\n },\n 10: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);\n },\n 11: function _(n) {\n return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);\n },\n 12: function _(n) {\n return Number(n % 10 != 1 || n % 100 == 11);\n },\n 13: function _(n) {\n return Number(n !== 0);\n },\n 14: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);\n },\n 15: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);\n },\n 16: function _(n) {\n return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);\n },\n 17: function _(n) {\n return Number(n == 1 || n % 10 == 1 && n % 100 != 11 ? 0 : 1);\n },\n 18: function _(n) {\n return Number(n == 0 ? 0 : n == 1 ? 1 : 2);\n },\n 19: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);\n },\n 20: function _(n) {\n return Number(n == 1 ? 0 : n == 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);\n },\n 21: function _(n) {\n return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);\n },\n 22: function _(n) {\n return Number(n == 1 ? 0 : n == 2 ? 1 : (n < 0 || n > 10) && n % 10 == 0 ? 2 : 3);\n }\n};\nvar deprecatedJsonVersions = [\n \"v1\",\n \"v2\",\n \"v3\"\n];\nvar suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nfunction createRules() {\n var rules = {};\n sets.forEach(function(set) {\n set.lngs.forEach(function(l) {\n rules[l] = {\n numbers: set.nr,\n plurals: _rulesPluralsTypes[set.fc]\n };\n });\n });\n return rules;\n}\nvar PluralResolver = function() {\n function PluralResolver(languageUtils) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, PluralResolver);\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create(\"pluralResolver\");\n if ((!this.options.compatibilityJSON || this.options.compatibilityJSON === \"v4\") && (typeof Intl === \"undefined\" || !Intl.PluralRules)) {\n this.options.compatibilityJSON = \"v3\";\n this.logger.error(\"Your environment seems not to be Intl API compatible, use an Intl.PluralRules polyfill. Will fallback to the compatibilityJSON v3 format handling.\");\n }\n this.rules = createRules();\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(PluralResolver, [\n {\n key: \"addRule\",\n value: function addRule(lng, obj) {\n this.rules[lng] = obj;\n }\n },\n {\n key: \"getRule\",\n value: function getRule(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (this.shouldUseIntlApi()) {\n try {\n return new Intl.PluralRules(code, {\n type: options.ordinal ? \"ordinal\" : \"cardinal\"\n });\n } catch (_unused) {\n return;\n }\n }\n return this.rules[code] || this.rules[this.languageUtils.getLanguagePartFromCode(code)];\n }\n },\n {\n key: \"needsPlural\",\n value: function needsPlural(code) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n if (this.shouldUseIntlApi()) {\n return rule && rule.resolvedOptions().pluralCategories.length > 1;\n }\n return rule && rule.numbers.length > 1;\n }\n },\n {\n key: \"getPluralFormsOfKey\",\n value: function getPluralFormsOfKey(code, key) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n return this.getSuffixes(code, options).map(function(suffix) {\n return \"\".concat(key).concat(suffix);\n });\n }\n },\n {\n key: \"getSuffixes\",\n value: function getSuffixes(code) {\n var _this = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var rule = this.getRule(code, options);\n if (!rule) {\n return [];\n }\n if (this.shouldUseIntlApi()) {\n return rule.resolvedOptions().pluralCategories.sort(function(pluralCategory1, pluralCategory2) {\n return suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2];\n }).map(function(pluralCategory) {\n return \"\".concat(_this.options.prepend).concat(pluralCategory);\n });\n }\n return rule.numbers.map(function(number) {\n return _this.getSuffix(code, number, options);\n });\n }\n },\n {\n key: \"getSuffix\",\n value: function getSuffix(code, count) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var rule = this.getRule(code, options);\n if (rule) {\n if (this.shouldUseIntlApi()) {\n return \"\".concat(this.options.prepend).concat(rule.select(count));\n }\n return this.getSuffixRetroCompatible(rule, count);\n }\n this.logger.warn(\"no plural rule found for: \".concat(code));\n return \"\";\n }\n },\n {\n key: \"getSuffixRetroCompatible\",\n value: function getSuffixRetroCompatible(rule, count) {\n var _this2 = this;\n var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));\n var suffix = rule.numbers[idx];\n if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n if (suffix === 2) {\n suffix = \"plural\";\n } else if (suffix === 1) {\n suffix = \"\";\n }\n }\n var returnSuffix = function returnSuffix() {\n return _this2.options.prepend && suffix.toString() ? _this2.options.prepend + suffix.toString() : suffix.toString();\n };\n if (this.options.compatibilityJSON === \"v1\") {\n if (suffix === 1) return \"\";\n if (typeof suffix === \"number\") return \"_plural_\".concat(suffix.toString());\n return returnSuffix();\n } else if (this.options.compatibilityJSON === \"v2\") {\n return returnSuffix();\n } else if (this.options.simplifyPluralSuffix && rule.numbers.length === 2 && rule.numbers[0] === 1) {\n return returnSuffix();\n }\n return this.options.prepend && idx.toString() ? this.options.prepend + idx.toString() : idx.toString();\n }\n },\n {\n key: \"shouldUseIntlApi\",\n value: function shouldUseIntlApi() {\n return !deprecatedJsonVersions.includes(this.options.compatibilityJSON);\n }\n }\n ]);\n return PluralResolver;\n}();\nfunction ownKeys$3(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$3(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$3(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$3(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nvar Interpolator = function() {\n function Interpolator() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Interpolator);\n this.logger = baseLogger.create(\"interpolator\");\n this.options = options;\n this.format = options.interpolation && options.interpolation.format || function(value) {\n return value;\n };\n this.init(options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Interpolator, [\n {\n key: \"init\",\n value: function init() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n var iOpts = options.interpolation;\n this.escape = iOpts.escape !== undefined ? iOpts.escape : escape;\n this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;\n this.useRawValueToEscape = iOpts.useRawValueToEscape !== undefined ? iOpts.useRawValueToEscape : false;\n this.prefix = iOpts.prefix ? regexEscape(iOpts.prefix) : iOpts.prefixEscaped || \"{{\";\n this.suffix = iOpts.suffix ? regexEscape(iOpts.suffix) : iOpts.suffixEscaped || \"}}\";\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || \",\";\n this.unescapePrefix = iOpts.unescapeSuffix ? \"\" : iOpts.unescapePrefix || \"-\";\n this.unescapeSuffix = this.unescapePrefix ? \"\" : iOpts.unescapeSuffix || \"\";\n this.nestingPrefix = iOpts.nestingPrefix ? regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || regexEscape(\"$t(\");\n this.nestingSuffix = iOpts.nestingSuffix ? regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || regexEscape(\")\");\n this.nestingOptionsSeparator = iOpts.nestingOptionsSeparator ? iOpts.nestingOptionsSeparator : iOpts.nestingOptionsSeparator || \",\";\n this.maxReplaces = iOpts.maxReplaces ? iOpts.maxReplaces : 1000;\n this.alwaysFormat = iOpts.alwaysFormat !== undefined ? iOpts.alwaysFormat : false;\n this.resetRegExp();\n }\n },\n {\n key: \"reset\",\n value: function reset() {\n if (this.options) this.init(this.options);\n }\n },\n {\n key: \"resetRegExp\",\n value: function resetRegExp() {\n var regexpStr = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n this.regexp = new RegExp(regexpStr, \"g\");\n var regexpUnescapeStr = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n this.regexpUnescape = new RegExp(regexpUnescapeStr, \"g\");\n var nestingRegexpStr = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n this.nestingRegexp = new RegExp(nestingRegexpStr, \"g\");\n }\n },\n {\n key: \"interpolate\",\n value: function interpolate(str, data, lng, options) {\n var regexSafe = function regexSafe(val) {\n return val.replace(/\\$/g, \"$$$$\");\n };\n var _this = this;\n var match;\n var value;\n var replaces;\n var defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n var handleFormat = function handleFormat(key) {\n if (key.indexOf(_this.formatSeparator) < 0) {\n var path = getPathWithDefaults(data, defaultData, key);\n return _this.alwaysFormat ? _this.format(path, undefined, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: key\n })) : path;\n }\n var p = key.split(_this.formatSeparator);\n var k = p.shift().trim();\n var f = p.join(_this.formatSeparator).trim();\n return _this.format(getPathWithDefaults(data, defaultData, k), f, lng, _objectSpread$3(_objectSpread$3(_objectSpread$3({}, options), data), {}, {\n interpolationkey: k\n }));\n };\n this.resetRegExp();\n var missingInterpolationHandler = options && options.missingInterpolationHandler || this.options.missingInterpolationHandler;\n var skipOnVariables = options && options.interpolation && options.interpolation.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n var todos = [\n {\n regex: this.regexpUnescape,\n safeValue: function safeValue(val) {\n return regexSafe(val);\n }\n },\n {\n regex: this.regexp,\n safeValue: function safeValue(val) {\n return _this.escapeValue ? regexSafe(_this.escape(val)) : regexSafe(val);\n }\n }\n ];\n todos.forEach(function(todo) {\n replaces = 0;\n while(match = todo.regex.exec(str)){\n var matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === \"function\") {\n var temp = missingInterpolationHandler(str, match, options);\n value = typeof temp === \"string\" ? temp : \"\";\n } else if (options && options.hasOwnProperty(matchedVar)) {\n value = \"\";\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n _this.logger.warn(\"missed to pass in variable \".concat(matchedVar, \" for interpolating \").concat(str));\n value = \"\";\n }\n } else if (typeof value !== \"string\" && !_this.useRawValueToEscape) {\n value = makeString(value);\n }\n var safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= _this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n },\n {\n key: \"nest\",\n value: function nest(str, fc) {\n var handleHasOptions = function handleHasOptions(key, inheritedOptions) {\n var sep = this.nestingOptionsSeparator;\n if (key.indexOf(sep) < 0) return key;\n var c = key.split(new RegExp(\"\".concat(sep, \"[ ]*{\")));\n var optionsString = \"{\".concat(c[1]);\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n var matchedSingleQuotes = optionsString.match(/'/g);\n var matchedDoubleQuotes = optionsString.match(/\"/g);\n if (matchedSingleQuotes && matchedSingleQuotes.length % 2 === 0 && !matchedDoubleQuotes || matchedDoubleQuotes.length % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = _objectSpread$3(_objectSpread$3({}, inheritedOptions), clonedOptions);\n } catch (e) {\n this.logger.warn(\"failed parsing options string in nesting for key \".concat(key), e);\n return \"\".concat(key).concat(sep).concat(optionsString);\n }\n delete clonedOptions.defaultValue;\n return key;\n };\n var _this2 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var match;\n var value;\n var clonedOptions = _objectSpread$3({}, options);\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n while(match = this.nestingRegexp.exec(str)){\n var formatters = [];\n var doReduce = false;\n if (match[0].indexOf(this.formatSeparator) !== -1 && !/{.*}/.test(match[1])) {\n var r = match[1].split(this.formatSeparator).map(function(elem) {\n return elem.trim();\n });\n match[1] = r.shift();\n formatters = r;\n doReduce = true;\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && typeof value !== \"string\") return value;\n if (typeof value !== \"string\") value = makeString(value);\n if (!value) {\n this.logger.warn(\"missed to resolve \".concat(match[1], \" for nesting \").concat(str));\n value = \"\";\n }\n if (doReduce) {\n value = formatters.reduce(function(v, f) {\n return _this2.format(v, f, options.lng, _objectSpread$3(_objectSpread$3({}, options), {}, {\n interpolationkey: match[1].trim()\n }));\n }, value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n }\n ]);\n return Interpolator;\n}();\nfunction ownKeys$4(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$4(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$4(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$4(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction parseFormatStr(formatStr) {\n var formatName = formatStr.toLowerCase().trim();\n var formatOptions = {};\n if (formatStr.indexOf(\"(\") > -1) {\n var p = formatStr.split(\"(\");\n formatName = p[0].toLowerCase().trim();\n var optStr = p[1].substring(0, p[1].length - 1);\n if (formatName === \"currency\" && optStr.indexOf(\":\") < 0) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === \"relativetime\" && optStr.indexOf(\":\") < 0) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n var opts = optStr.split(\";\");\n opts.forEach(function(opt) {\n if (!opt) return;\n var _opt$split = opt.split(\":\"), _opt$split2 = (0,_babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_opt$split), key = _opt$split2[0], rest = _opt$split2.slice(1);\n var val = rest.join(\":\").trim().replace(/^'+|'+$/g, \"\");\n if (!formatOptions[key.trim()]) formatOptions[key.trim()] = val;\n if (val === \"false\") formatOptions[key.trim()] = false;\n if (val === \"true\") formatOptions[key.trim()] = true;\n if (!isNaN(val)) formatOptions[key.trim()] = parseInt(val, 10);\n });\n }\n }\n return {\n formatName: formatName,\n formatOptions: formatOptions\n };\n}\nfunction createCachedFormatter(fn) {\n var cache = {};\n return function invokeFormatter(val, lng, options) {\n var key = lng + JSON.stringify(options);\n var formatter = cache[key];\n if (!formatter) {\n formatter = fn(lng, options);\n cache[key] = formatter;\n }\n return formatter(val);\n };\n}\nvar Formatter = function() {\n function Formatter() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Formatter);\n this.logger = baseLogger.create(\"formatter\");\n this.options = options;\n this.formats = {\n number: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.NumberFormat(lng, options);\n return function(val) {\n return formatter.format(val);\n };\n }),\n currency: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.NumberFormat(lng, _objectSpread$4(_objectSpread$4({}, options), {}, {\n style: \"currency\"\n }));\n return function(val) {\n return formatter.format(val);\n };\n }),\n datetime: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.DateTimeFormat(lng, _objectSpread$4({}, options));\n return function(val) {\n return formatter.format(val);\n };\n }),\n relativetime: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.RelativeTimeFormat(lng, _objectSpread$4({}, options));\n return function(val) {\n return formatter.format(val, options.range || \"day\");\n };\n }),\n list: createCachedFormatter(function(lng, options) {\n var formatter = new Intl.ListFormat(lng, _objectSpread$4({}, options));\n return function(val) {\n return formatter.format(val);\n };\n })\n };\n this.init(options);\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Formatter, [\n {\n key: \"init\",\n value: function init(services) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n interpolation: {}\n };\n var iOpts = options.interpolation;\n this.formatSeparator = iOpts.formatSeparator ? iOpts.formatSeparator : iOpts.formatSeparator || \",\";\n }\n },\n {\n key: \"add\",\n value: function add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n },\n {\n key: \"addCached\",\n value: function addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n },\n {\n key: \"format\",\n value: function format(value, _format, lng, options) {\n var _this = this;\n var formats = _format.split(this.formatSeparator);\n var result = formats.reduce(function(mem, f) {\n var _parseFormatStr = parseFormatStr(f), formatName = _parseFormatStr.formatName, formatOptions = _parseFormatStr.formatOptions;\n if (_this.formats[formatName]) {\n var formatted = mem;\n try {\n var valOptions = options && options.formatParams && options.formatParams[options.interpolationkey] || {};\n var l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = _this.formats[formatName](mem, l, _objectSpread$4(_objectSpread$4(_objectSpread$4({}, formatOptions), options), valOptions));\n } catch (error) {\n _this.logger.warn(error);\n }\n return formatted;\n } else {\n _this.logger.warn(\"there was no format function for \".concat(formatName));\n }\n return mem;\n }, value);\n return result;\n }\n }\n ]);\n return Formatter;\n}();\nfunction ownKeys$5(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$5(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$5(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$5(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper$2(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct$2();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct$2() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction removePending(q, name) {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n}\nvar Connector = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Connector, _EventEmitter);\n var _super = _createSuper$2(Connector);\n function Connector(backend, store, services) {\n var _this;\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, Connector);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n _this.backend = backend;\n _this.store = store;\n _this.services = services;\n _this.languageUtils = services.languageUtils;\n _this.options = options;\n _this.logger = baseLogger.create(\"backendConnector\");\n _this.waitingReads = [];\n _this.maxParallelReads = options.maxParallelReads || 10;\n _this.readingCalls = 0;\n _this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n _this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n _this.state = {};\n _this.queue = [];\n if (_this.backend && _this.backend.init) {\n _this.backend.init(services, options.backend, options);\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Connector, [\n {\n key: \"queueLoad\",\n value: function queueLoad(languages, namespaces, options, callback) {\n var _this2 = this;\n var toLoad = {};\n var pending = {};\n var toLoadLanguages = {};\n var toLoadNamespaces = {};\n languages.forEach(function(lng) {\n var hasAllNamespaces = true;\n namespaces.forEach(function(ns) {\n var name = \"\".concat(lng, \"|\").concat(ns);\n if (!options.reload && _this2.store.hasResourceBundle(lng, ns)) {\n _this2.state[name] = 2;\n } else if (_this2.state[name] < 0) ;\n else if (_this2.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n _this2.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending: pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback: callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n },\n {\n key: \"loaded\",\n value: function loaded(name, err, data) {\n var s = name.split(\"|\");\n var lng = s[0];\n var ns = s[1];\n if (err) this.emit(\"failedLoading\", lng, ns, err);\n if (data) {\n this.store.addResourceBundle(lng, ns, data);\n }\n this.state[name] = err ? -1 : 2;\n var loaded = {};\n this.queue.forEach(function(q) {\n pushPath(q.loaded, [\n lng\n ], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(function(l) {\n if (!loaded[l]) loaded[l] = {};\n var loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(function(ns) {\n if (loaded[l][ns] === undefined) loaded[l][ns] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit(\"loaded\", loaded);\n this.queue = this.queue.filter(function(q) {\n return !q.done;\n });\n }\n },\n {\n key: \"read\",\n value: function read(lng, ns, fcName) {\n var _this3 = this;\n var tried = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var wait = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : this.retryTimeout;\n var callback = arguments.length > 5 ? arguments[5] : undefined;\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng: lng,\n ns: ns,\n fcName: fcName,\n tried: tried,\n wait: wait,\n callback: callback\n });\n return;\n }\n this.readingCalls++;\n return this.backend[fcName](lng, ns, function(err, data) {\n _this3.readingCalls--;\n if (_this3.waitingReads.length > 0) {\n var next = _this3.waitingReads.shift();\n _this3.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < _this3.maxRetries) {\n setTimeout(function() {\n _this3.read.call(_this3, lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n });\n }\n },\n {\n key: \"prepareLoading\",\n value: function prepareLoading(languages, namespaces) {\n var _this4 = this;\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var callback = arguments.length > 3 ? arguments[3] : undefined;\n if (!this.backend) {\n this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\");\n return callback && callback();\n }\n if (typeof languages === \"string\") languages = this.languageUtils.toResolveHierarchy(languages);\n if (typeof namespaces === \"string\") namespaces = [\n namespaces\n ];\n var toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(function(name) {\n _this4.loadOne(name);\n });\n }\n },\n {\n key: \"load\",\n value: function load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n },\n {\n key: \"reload\",\n value: function reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n },\n {\n key: \"loadOne\",\n value: function loadOne(name) {\n var _this5 = this;\n var prefix = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \"\";\n var s = name.split(\"|\");\n var lng = s[0];\n var ns = s[1];\n this.read(lng, ns, \"read\", undefined, undefined, function(err, data) {\n if (err) _this5.logger.warn(\"\".concat(prefix, \"loading namespace \").concat(ns, \" for language \").concat(lng, \" failed\"), err);\n if (!err && data) _this5.logger.log(\"\".concat(prefix, \"loaded namespace \").concat(ns, \" for language \").concat(lng), data);\n _this5.loaded(name, err, data);\n });\n }\n },\n {\n key: \"saveMissing\",\n value: function saveMissing(languages, namespace, key, fallbackValue, isUpdate) {\n var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n if (this.services.utils && this.services.utils.hasLoadedNamespace && !this.services.utils.hasLoadedNamespace(namespace)) {\n this.logger.warn('did not save key \"'.concat(key, '\" as the namespace \"').concat(namespace, '\" was not yet loaded'), \"This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!\");\n return;\n }\n if (key === undefined || key === null || key === \"\") return;\n if (this.backend && this.backend.create) {\n this.backend.create(languages, namespace, key, fallbackValue, null, _objectSpread$5(_objectSpread$5({}, options), {}, {\n isUpdate: isUpdate\n }));\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n }\n ]);\n return Connector;\n}(EventEmitter);\nfunction get() {\n return {\n debug: false,\n initImmediate: true,\n ns: [\n \"translation\"\n ],\n defaultNS: [\n \"translation\"\n ],\n fallbackLng: [\n \"dev\"\n ],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: \"all\",\n preload: false,\n simplifyPluralSuffix: true,\n keySeparator: \".\",\n nsSeparator: \":\",\n pluralSeparator: \"_\",\n contextSeparator: \"_\",\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: \"fallback\",\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: true,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: function handle(args) {\n var ret = {};\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[1]) === \"object\") ret = args[1];\n if (typeof args[1] === \"string\") ret.defaultValue = args[1];\n if (typeof args[2] === \"string\") ret.tDescription = args[2];\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[2]) === \"object\" || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(args[3]) === \"object\") {\n var options = args[3] || args[2];\n Object.keys(options).forEach(function(key) {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n format: function format(value, _format, lng, options) {\n return value;\n },\n prefix: \"{{\",\n suffix: \"}}\",\n formatSeparator: \",\",\n unescapePrefix: \"-\",\n nestingPrefix: \"$t(\",\n nestingSuffix: \")\",\n nestingOptionsSeparator: \",\",\n maxReplaces: 1000,\n skipOnVariables: true\n }\n };\n}\nfunction transformOptions(options) {\n if (typeof options.ns === \"string\") options.ns = [\n options.ns\n ];\n if (typeof options.fallbackLng === \"string\") options.fallbackLng = [\n options.fallbackLng\n ];\n if (typeof options.fallbackNS === \"string\") options.fallbackNS = [\n options.fallbackNS\n ];\n if (options.supportedLngs && options.supportedLngs.indexOf(\"cimode\") < 0) {\n options.supportedLngs = options.supportedLngs.concat([\n \"cimode\"\n ]);\n }\n return options;\n}\nfunction ownKeys$6(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread$6(target) {\n for(var i = 1; i < arguments.length; i++){\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys$6(Object(source), true).forEach(function(key) {\n (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys$6(Object(source)).forEach(function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _createSuper$3(Derived) {\n var hasNativeReflectConstruct = _isNativeReflectConstruct$3();\n return function _createSuperInternal() {\n var Super = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(Derived), result;\n if (hasNativeReflectConstruct) {\n var NewTarget = (0,_babel_runtime_helpers_esm_getPrototypeOf__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(this, result);\n };\n}\nfunction _isNativeReflectConstruct$3() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));\n return true;\n } catch (e) {\n return false;\n }\n}\nfunction noop() {}\nfunction bindMemberFunctions(inst) {\n var mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(function(mem) {\n if (typeof inst[mem] === \"function\") {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n}\nvar I18n = function(_EventEmitter) {\n (0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(I18n, _EventEmitter);\n var _super = _createSuper$3(I18n);\n function I18n() {\n var _this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n (0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(this, I18n);\n _this = _super.call(this);\n if (isIE10) {\n EventEmitter.call((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n _this.options = transformOptions(options);\n _this.services = {};\n _this.logger = baseLogger;\n _this.modules = {\n external: []\n };\n bindMemberFunctions((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n if (callback && !_this.isInitialized && !options.isClone) {\n if (!_this.options.initImmediate) {\n _this.init(options, callback);\n return (0,_babel_runtime_helpers_esm_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(_this, (0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(_this));\n }\n setTimeout(function() {\n _this.init(options, callback);\n }, 0);\n }\n return _this;\n }\n (0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(I18n, [\n {\n key: \"init\",\n value: function init() {\n var createClassOnDemand = function createClassOnDemand(ClassOrObject) {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === \"function\") return new ClassOrObject();\n return ClassOrObject;\n };\n var _this2 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n if (typeof options === \"function\") {\n callback = options;\n options = {};\n }\n if (!options.defaultNS && options.defaultNS !== false && options.ns) {\n if (typeof options.ns === \"string\") {\n options.defaultNS = options.ns;\n } else if (options.ns.indexOf(\"translation\") < 0) {\n options.defaultNS = options.ns[0];\n }\n }\n var defOpts = get();\n this.options = _objectSpread$6(_objectSpread$6(_objectSpread$6({}, defOpts), this.options), transformOptions(options));\n if (this.options.compatibilityAPI !== \"v1\") {\n this.options.interpolation = _objectSpread$6(_objectSpread$6({}, defOpts.interpolation), this.options.interpolation);\n }\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n var formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else if (typeof Intl !== \"undefined\") {\n formatter = Formatter;\n }\n var lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n var s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator,\n compatibilityJSON: this.options.compatibilityJSON,\n simplifyPluralSuffix: this.options.simplifyPluralSuffix\n });\n if (formatter && (!this.options.interpolation.format || this.options.interpolation.format === defOpts.interpolation.format)) {\n s.formatter = createClassOnDemand(formatter);\n s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on(\"*\", function(event) {\n for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n args[_key - 1] = arguments[_key];\n }\n _this2.emit.apply(_this2, [\n event\n ].concat(args));\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on(\"*\", function(event) {\n for(var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++){\n args[_key2 - 1] = arguments[_key2];\n }\n _this2.emit.apply(_this2, [\n event\n ].concat(args));\n });\n this.modules.external.forEach(function(m) {\n if (m.init) m.init(_this2);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n var codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== \"dev\") this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn(\"init: no languageDetector is used and no lng is defined\");\n }\n var storeApi = [\n \"getResource\",\n \"hasResourceBundle\",\n \"getResourceBundle\",\n \"getDataByLanguage\"\n ];\n storeApi.forEach(function(fcName) {\n _this2[fcName] = function() {\n var _this2$store;\n return (_this2$store = _this2.store)[fcName].apply(_this2$store, arguments);\n };\n });\n var storeApiChained = [\n \"addResource\",\n \"addResources\",\n \"addResourceBundle\",\n \"removeResourceBundle\"\n ];\n storeApiChained.forEach(function(fcName) {\n _this2[fcName] = function() {\n var _this2$store2;\n (_this2$store2 = _this2.store)[fcName].apply(_this2$store2, arguments);\n return _this2;\n };\n });\n var deferred = defer();\n var load = function load() {\n var finish = function finish(err, t) {\n if (_this2.isInitialized && !_this2.initializedStoreOnce) _this2.logger.warn(\"init: i18next is already initialized. You should call init just once!\");\n _this2.isInitialized = true;\n if (!_this2.options.isClone) _this2.logger.log(\"initialized\", _this2.options);\n _this2.emit(\"initialized\", _this2.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (_this2.languages && _this2.options.compatibilityAPI !== \"v1\" && !_this2.isInitialized) return finish(null, _this2.t.bind(_this2));\n _this2.changeLanguage(_this2.options.lng, finish);\n };\n if (this.options.resources || !this.options.initImmediate) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n },\n {\n key: \"loadResources\",\n value: function loadResources(language) {\n var _this3 = this;\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var usedCallback = callback;\n var usedLng = typeof language === \"string\" ? language : this.language;\n if (typeof language === \"function\") usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng && usedLng.toLowerCase() === \"cimode\") return usedCallback();\n var toLoad = [];\n var append = function append(lng) {\n if (!lng) return;\n var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(function(l) {\n if (toLoad.indexOf(l) < 0) toLoad.push(l);\n });\n };\n if (!usedLng) {\n var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(function(l) {\n return append(l);\n });\n } else {\n append(usedLng);\n }\n if (this.options.preload) {\n this.options.preload.forEach(function(l) {\n return append(l);\n });\n }\n this.services.backendConnector.load(toLoad, this.options.ns, function(e) {\n if (!e && !_this3.resolvedLanguage && _this3.language) _this3.setResolvedLanguage(_this3.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n },\n {\n key: \"reloadResources\",\n value: function reloadResources(lngs, ns, callback) {\n var deferred = defer();\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, function(err) {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"use\",\n value: function use(module) {\n if (!module) throw new Error(\"You are passing an undefined module! Please check the object you are passing to i18next.use()\");\n if (!module.type) throw new Error(\"You are passing a wrong module! Please check the object you are passing to i18next.use()\");\n if (module.type === \"backend\") {\n this.modules.backend = module;\n }\n if (module.type === \"logger\" || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === \"languageDetector\") {\n this.modules.languageDetector = module;\n }\n if (module.type === \"i18nFormat\") {\n this.modules.i18nFormat = module;\n }\n if (module.type === \"postProcessor\") {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === \"formatter\") {\n this.modules.formatter = module;\n }\n if (module.type === \"3rdParty\") {\n this.modules.external.push(module);\n }\n return this;\n }\n },\n {\n key: \"setResolvedLanguage\",\n value: function setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if ([\n \"cimode\",\n \"dev\"\n ].indexOf(l) > -1) return;\n for(var li = 0; li < this.languages.length; li++){\n var lngInLngs = this.languages[li];\n if ([\n \"cimode\",\n \"dev\"\n ].indexOf(lngInLngs) > -1) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n }\n },\n {\n key: \"changeLanguage\",\n value: function changeLanguage(lng, callback) {\n var _this4 = this;\n this.isLanguageChangingTo = lng;\n var deferred = defer();\n this.emit(\"languageChanging\", lng);\n var setLngProps = function setLngProps(l) {\n _this4.language = l;\n _this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);\n _this4.resolvedLanguage = undefined;\n _this4.setResolvedLanguage(l);\n };\n var done = function done(err, l) {\n if (l) {\n setLngProps(l);\n _this4.translator.changeLanguage(l);\n _this4.isLanguageChangingTo = undefined;\n _this4.emit(\"languageChanged\", l);\n _this4.logger.log(\"languageChanged\", l);\n } else {\n _this4.isLanguageChangingTo = undefined;\n }\n deferred.resolve(function() {\n return _this4.t.apply(_this4, arguments);\n });\n if (callback) callback(err, function() {\n return _this4.t.apply(_this4, arguments);\n });\n };\n var setLng = function setLng(lngs) {\n if (!lng && !lngs && _this4.services.languageDetector) lngs = [];\n var l = typeof lngs === \"string\" ? lngs : _this4.services.languageUtils.getBestMatchFromCodes(lngs);\n if (l) {\n if (!_this4.language) {\n setLngProps(l);\n }\n if (!_this4.translator.language) _this4.translator.changeLanguage(l);\n if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);\n }\n _this4.loadResources(l, function(err) {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n this.services.languageDetector.detect(setLng);\n } else {\n setLng(lng);\n }\n return deferred;\n }\n },\n {\n key: \"getFixedT\",\n value: function getFixedT(lng, ns, keyPrefix) {\n var _this5 = this;\n var fixedT = function fixedT(key, opts) {\n var options;\n if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(opts) !== \"object\") {\n for(var _len3 = arguments.length, rest = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++){\n rest[_key3 - 2] = arguments[_key3];\n }\n options = _this5.options.overloadTranslationOptionHandler([\n key,\n opts\n ].concat(rest));\n } else {\n options = _objectSpread$6({}, opts);\n }\n options.lng = options.lng || fixedT.lng;\n options.lngs = options.lngs || fixedT.lngs;\n options.ns = options.ns || fixedT.ns;\n options.keyPrefix = options.keyPrefix || keyPrefix || fixedT.keyPrefix;\n var keySeparator = _this5.options.keySeparator || \".\";\n var resultKey = options.keyPrefix ? \"\".concat(options.keyPrefix).concat(keySeparator).concat(key) : key;\n return _this5.t(resultKey, options);\n };\n if (typeof lng === \"string\") {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n },\n {\n key: \"t\",\n value: function t() {\n var _this$translator;\n return this.translator && (_this$translator = this.translator).translate.apply(_this$translator, arguments);\n }\n },\n {\n key: \"exists\",\n value: function exists() {\n var _this$translator2;\n return this.translator && (_this$translator2 = this.translator).exists.apply(_this$translator2, arguments);\n }\n },\n {\n key: \"setDefaultNamespace\",\n value: function setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n },\n {\n key: \"hasLoadedNamespace\",\n value: function hasLoadedNamespace(ns) {\n var _this6 = this;\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n if (!this.isInitialized) {\n this.logger.warn(\"hasLoadedNamespace: i18next was not initialized\", this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn(\"hasLoadedNamespace: i18n.languages were undefined or empty\", this.languages);\n return false;\n }\n var lng = this.resolvedLanguage || this.languages[0];\n var fallbackLng = this.options ? this.options.fallbackLng : false;\n var lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === \"cimode\") return true;\n var loadNotPending = function loadNotPending(l, n) {\n var loadState = _this6.services.backendConnector.state[\"\".concat(l, \"|\").concat(n)];\n return loadState === -1 || loadState === 2;\n };\n if (options.precheck) {\n var preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n },\n {\n key: \"loadNamespaces\",\n value: function loadNamespaces(ns, callback) {\n var _this7 = this;\n var deferred = defer();\n if (!this.options.ns) {\n callback && callback();\n return Promise.resolve();\n }\n if (typeof ns === \"string\") ns = [\n ns\n ];\n ns.forEach(function(n) {\n if (_this7.options.ns.indexOf(n) < 0) _this7.options.ns.push(n);\n });\n this.loadResources(function(err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"loadLanguages\",\n value: function loadLanguages(lngs, callback) {\n var deferred = defer();\n if (typeof lngs === \"string\") lngs = [\n lngs\n ];\n var preloaded = this.options.preload || [];\n var newLngs = lngs.filter(function(lng) {\n return preloaded.indexOf(lng) < 0;\n });\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(function(err) {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n },\n {\n key: \"dir\",\n value: function dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages && this.languages.length > 0 ? this.languages[0] : this.language);\n if (!lng) return \"rtl\";\n var rtlLngs = [\n \"ar\",\n \"shu\",\n \"sqr\",\n \"ssh\",\n \"xaa\",\n \"yhd\",\n \"yud\",\n \"aao\",\n \"abh\",\n \"abv\",\n \"acm\",\n \"acq\",\n \"acw\",\n \"acx\",\n \"acy\",\n \"adf\",\n \"ads\",\n \"aeb\",\n \"aec\",\n \"afb\",\n \"ajp\",\n \"apc\",\n \"apd\",\n \"arb\",\n \"arq\",\n \"ars\",\n \"ary\",\n \"arz\",\n \"auz\",\n \"avl\",\n \"ayh\",\n \"ayl\",\n \"ayn\",\n \"ayp\",\n \"bbz\",\n \"pga\",\n \"he\",\n \"iw\",\n \"ps\",\n \"pbt\",\n \"pbu\",\n \"pst\",\n \"prp\",\n \"prd\",\n \"ug\",\n \"ur\",\n \"ydd\",\n \"yds\",\n \"yih\",\n \"ji\",\n \"yi\",\n \"hbo\",\n \"men\",\n \"xmn\",\n \"fa\",\n \"jpr\",\n \"peo\",\n \"pes\",\n \"prs\",\n \"dv\",\n \"sam\",\n \"ckb\"\n ];\n return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) > -1 || lng.toLowerCase().indexOf(\"-arab\") > 1 ? \"rtl\" : \"ltr\";\n }\n },\n {\n key: \"cloneInstance\",\n value: function cloneInstance() {\n var _this8 = this;\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;\n var mergedOptions = _objectSpread$6(_objectSpread$6(_objectSpread$6({}, this.options), options), {\n isClone: true\n });\n var clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n var membersToCopy = [\n \"store\",\n \"services\",\n \"language\"\n ];\n membersToCopy.forEach(function(m) {\n clone[m] = _this8[m];\n });\n clone.services = _objectSpread$6({}, this.services);\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n clone.translator = new Translator(clone.services, clone.options);\n clone.translator.on(\"*\", function(event) {\n for(var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++){\n args[_key4 - 1] = arguments[_key4];\n }\n clone.emit.apply(clone, [\n event\n ].concat(args));\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = clone.options;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n },\n {\n key: \"toJSON\",\n value: function toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n }\n ]);\n return I18n;\n}(EventEmitter);\n(0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(I18n, \"createInstance\", function() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var callback = arguments.length > 1 ? arguments[1] : undefined;\n return new I18n(options, callback);\n});\nvar instance = I18n.createInstance();\ninstance.createInstance = I18n.createInstance;\nvar createInstance = instance.createInstance;\nvar init = instance.init;\nvar loadResources = instance.loadResources;\nvar reloadResources = instance.reloadResources;\nvar use = instance.use;\nvar changeLanguage = instance.changeLanguage;\nvar getFixedT = instance.getFixedT;\nvar t = instance.t;\nvar exists = instance.exists;\nvar setDefaultNamespace = instance.setDefaultNamespace;\nvar hasLoadedNamespace = instance.hasLoadedNamespace;\nvar loadNamespaces = instance.loadNamespaces;\nvar loadLanguages = instance.loadLanguages;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (instance);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2kxOG5leHQvZGlzdC9lc20vaTE4bmV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBd0Q7QUFDZ0I7QUFDTjtBQUNvQjtBQUMxQjtBQUNrQztBQUN0QjtBQUNBO0FBQ2Q7QUFFMUQsU0FBU1MsUUFBUUMsTUFBTSxFQUFFQyxjQUFjLEVBQUU7SUFBRSxJQUFJQyxPQUFPQyxPQUFPRCxJQUFJLENBQUNGO0lBQVMsSUFBSUcsT0FBT0MscUJBQXFCLEVBQUU7UUFBRSxJQUFJQyxVQUFVRixPQUFPQyxxQkFBcUIsQ0FBQ0o7UUFBUyxJQUFJQyxnQkFBZ0I7WUFBRUksVUFBVUEsUUFBUUMsTUFBTSxDQUFDLFNBQVVDLEdBQUcsRUFBRTtnQkFBRSxPQUFPSixPQUFPSyx3QkFBd0IsQ0FBQ1IsUUFBUU8sS0FBS0UsVUFBVTtZQUFFO1FBQUksQ0FBQztRQUFDUCxLQUFLUSxJQUFJLENBQUNDLEtBQUssQ0FBQ1QsTUFBTUc7SUFBVSxDQUFDO0lBQUMsT0FBT0g7QUFBTTtBQUV4VixTQUFTVSxjQUFjQyxNQUFNLEVBQUU7SUFBRSxJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUMsVUFBVUMsTUFBTSxFQUFFRixJQUFLO1FBQUUsSUFBSUcsU0FBU0YsU0FBUyxDQUFDRCxFQUFFLElBQUksSUFBSSxHQUFHQyxTQUFTLENBQUNELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFBRSxJQUFJQSxJQUFJLEdBQUc7WUFBRWYsUUFBUUksT0FBT2MsU0FBUyxJQUFJLEVBQUVDLE9BQU8sQ0FBQyxTQUFVQyxHQUFHLEVBQUU7Z0JBQUV0QixxRkFBZUEsQ0FBQ2dCLFFBQVFNLEtBQUtGLE1BQU0sQ0FBQ0UsSUFBSTtZQUFHO1FBQUksT0FBTyxJQUFJaEIsT0FBT2lCLHlCQUF5QixFQUFFO1lBQUVqQixPQUFPa0IsZ0JBQWdCLENBQUNSLFFBQVFWLE9BQU9pQix5QkFBeUIsQ0FBQ0g7UUFBVSxPQUFPO1lBQUVs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QWM7QUFFN0MsSUFBSUEsaUJBQWlCRCxTQUFTQyxjQUFjO0FBQzVDLElBQUloa0IsT0FBTytqQixTQUFTL2pCLElBQUk7QUFDeEIsSUFBSXVoQixnQkFBZ0J3QyxTQUFTeEMsYUFBYTtBQUMxQyxJQUFJSyxrQkFBa0JtQyxTQUFTbkMsZUFBZTtBQUM5QyxJQUFJQyxNQUFNa0MsU0FBU2xDLEdBQUc7QUFDdEIsSUFBSTdXLGlCQUFpQitZLFNBQVMvWSxjQUFjO0FBQzVDLElBQUl1WCxZQUFZd0IsU0FBU3hCLFNBQVM7QUFDbEMsSUFBSXJmLElBQUk2Z0IsU0FBUzdnQixDQUFDO0FBQ2xCLElBQUlnSSxTQUFTNlksU0FBUzdZLE1BQU07QUFDNUIsSUFBSTJYLHNCQUFzQmtCLFNBQVNsQixtQkFBbUI7QUFDdEQsSUFBSXZSLHFCQUFxQnlTLFNBQVN6UyxrQkFBa0I7QUFDcEQsSUFBSThSLGlCQUFpQlcsU0FBU1gsY0FBYztBQUM1QyxJQUFJRSxnQkFBZ0JTLFNBQVNULGFBQWE7QUFFMUMsaUVBQWVTLFFBQVFBLEVBQUM7QUFDMkoiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9pMThuZXh0L2Rpc3QvZXNtL2kxOG5leHQuanM/ZTQ0OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX3R5cGVvZiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YnO1xuaW1wb3J0IF9jbGFzc0NhbGxDaGVjayBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9jbGFzc0NhbGxDaGVjayc7XG5pbXBvcnQgX2NyZWF0ZUNsYXNzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUNsYXNzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzJztcbmltcG9ydCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuJztcbmltcG9ydCBfZ2V0UHJvdG90eXBlT2YgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZ2V0UHJvdG90eXBlT2YnO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eSc7XG5pbXBvcnQgX3RvQXJyYXkgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9BcnJheSc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxudmFyIGNvbnNvbGVMb2dnZXIgPSB7XG4gIHR5cGU6ICdsb2dnZXInLFxuICBsb2c6IGZ1bmN0aW9uIGxvZyhhcmdzKSB7XG4gICAgdGhpcy5vdXRwdXQoJ2xvZycsIGFyZ3MpO1xuICB9LFxuICB3YXJuOiBmdW5jdGlvbiB3YXJuKGFyZ3MpIHtcbiAgICB0aGlzLm91dHB1dCgnd2FybicsIGFyZ3MpO1xuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IoYXJncykge1xuICAgIHRoaXMub3V0cHV0KCdlcnJvcicsIGFyZ3MpO1xuICB9LFxuICBvdXRwdXQ6IGZ1bmN0aW9uIG91dHB1dCh0eXBlLCBhcmdzKSB7XG4gICAgaWYgKGNvbnNvbGUgJiYgY29uc29sZVt0eXBlXSkgY29uc29sZVt0eXBlXS5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufTtcblxudmFyIExvZ2dlciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gTG9nZ2VyKGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvZ2dlcik7XG5cbiAgICB0aGlzLmluaXQoY29uY3JldGVMb2dnZXIsIG9wdGlvbnMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKExvZ2dlciwgW3tcbiAgICBrZXk6IFwiaW5pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0KGNvbmNyZXRlTG9nZ2VyKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB0aGlzLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8ICdpMThuZXh0Oic7XG4gICAgICB0aGlzLmxvZ2dlciA9IGNvbmNyZXRlTG9nZ2VyIHx8IGNvbnNvbGVMb2dnZXI7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5kZWJ1ZyA9IG9wdGlvbnMuZGVidWc7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldERlYnVnXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlYnVnKGJvb2wpIHtcbiAgICAgIHRoaXMuZGVidWcgPSBib29sO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2dcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9nKCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ2xvZycsICcnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwid2FyblwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB3YXJuKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZm9yd2FyZChhcmdzLCAnd2FybicsICcnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXJyb3JcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3J3YXJkKGFyZ3MsICdlcnJvcicsICcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZGVwcmVjYXRlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlcHJlY2F0ZSgpIHtcbiAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZvcndhcmQoYXJncywgJ3dhcm4nLCAnV0FSTklORyBERVBSRUNBVEVEOiAnLCB0cnVlKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9yd2FyZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3J3YXJkKGFyZ3MsIGx2bCwgcHJlZml4LCBkZWJ1Z09ubHkpIHtcbiAgICAgIGlmIChkZWJ1Z09ubHkgJiYgIXRoaXMuZGVidWcpIHJldHVybiBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykgYXJnc1swXSA9IFwiXCIuY29uY2F0KHByZWZpeCkuY29uY2F0KHRoaXMucHJlZml4LCBcIiBcIikuY29uY2F0KGFyZ3NbMF0pO1xuICAgICAgcmV0dXJuIHRoaXMubG9nZ2VyW2x2bF0oYXJncyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNyZWF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUobW9kdWxlTmFtZSkge1xuICAgICAgcmV0dXJuIG5ldyBMb2dnZXIodGhpcy5sb2dnZXIsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwge1xuICAgICAgICBwcmVmaXg6IFwiXCIuY29uY2F0KHRoaXMucHJlZml4LCBcIjpcIikuY29uY2F0KG1vZHVsZU5hbWUsIFwiOlwiKVxuICAgICAgfSksIHRoaXMub3B0aW9ucykpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjbG9uZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZShvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB0aGlzLm9wdGlvbnM7XG4gICAgICBvcHRpb25zLnByZWZpeCA9IG9wdGlvbnMucHJlZml4IHx8IHRoaXMucHJlZml4O1xuICAgICAgcmV0dXJuIG5ldyBMb2dnZXIodGhpcy5sb2dnZXIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBMb2dnZXI7XG59KCk7XG5cbnZhciBiYXNlTG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuXG52YXIgRXZlbnRFbWl0dGVyID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV2ZW50RW1pdHRlcik7XG5cbiAgICB0aGlzLm9ic2VydmVycyA9IHt9O1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEV2ZW50RW1pdHRlciwgW3tcbiAgICBrZXk6IFwib25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnRzLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XSA9IF90aGlzLm9ic2VydmVyc1tldmVudF0gfHwgW107XG5cbiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm9mZlwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgICBpZiAoIXRoaXMub2JzZXJ2ZXJzW2V2ZW50XSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIWxpc3RlbmVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm9ic2VydmVyc1tldmVudF07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vYnNlcnZlcnNbZXZlbnRdID0gdGhpcy5vYnNlcnZlcnNbZXZlbnRdLmZpbHRlcihmdW5jdGlvbiAobCkge1xuICAgICAgICByZXR1cm4gbCAhPT0gbGlzdGVuZXI7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZW1pdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vYnNlcnZlcnNbZXZlbnRdKSB7XG4gICAgICAgIHZhciBjbG9uZWQgPSBbXS5jb25jYXQodGhpcy5vYnNlcnZlcnNbZXZlbnRdKTtcbiAgICAgICAgY2xvbmVkLmZvckVhY2goZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgICAgb2JzZXJ2ZXIuYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9ic2VydmVyc1snKiddKSB7XG4gICAgICAgIHZhciBfY2xvbmVkID0gW10uY29uY2F0KHRoaXMub2JzZXJ2ZXJzWycqJ10pO1xuXG4gICAgICAgIF9jbG9uZWQuZm9yRWFjaChmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgICBvYnNlcnZlci5hcHBseShvYnNlcnZlciwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRXZlbnRFbWl0dGVyO1xufSgpO1xuXG5mdW5jdGlvbiBkZWZlcigpIHtcbiAgdmFyIHJlcztcbiAgdmFyIHJlajtcbiAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzID0gcmVzb2x2ZTtcbiAgICByZWogPSByZWplY3Q7XG4gIH0pO1xuICBwcm9taXNlLnJlc29sdmUgPSByZXM7XG4gIHByb21pc2UucmVqZWN0ID0gcmVqO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIG1ha2VTdHJpbmcob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkgcmV0dXJuICcnO1xuICByZXR1cm4gJycgKyBvYmplY3Q7XG59XG5mdW5jdGlvbiBjb3B5KGEsIHMsIHQpIHtcbiAgYS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgaWYgKHNbbV0pIHRbbV0gPSBzW21dO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TGFzdE9mUGF0aChvYmplY3QsIHBhdGgsIEVtcHR5KSB7XG4gIGZ1bmN0aW9uIGNsZWFuS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgJiYga2V5LmluZGV4T2YoJyMjIycpID4gLTEgPyBrZXkucmVwbGFjZSgvIyMjL2csICcuJykgOiBrZXk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5Ob3RUcmF2ZXJzZURlZXBlcigpIHtcbiAgICByZXR1cm4gIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHZhciBzdGFjayA9IHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJyA/IFtdLmNvbmNhdChwYXRoKSA6IHBhdGguc3BsaXQoJy4nKTtcblxuICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMSkge1xuICAgIGlmIChjYW5Ob3RUcmF2ZXJzZURlZXBlcigpKSByZXR1cm4ge307XG4gICAgdmFyIGtleSA9IGNsZWFuS2V5KHN0YWNrLnNoaWZ0KCkpO1xuICAgIGlmICghb2JqZWN0W2tleV0gJiYgRW1wdHkpIG9iamVjdFtrZXldID0gbmV3IEVtcHR5KCk7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9iamVjdCA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYW5Ob3RUcmF2ZXJzZURlZXBlcigpKSByZXR1cm4ge307XG4gIHJldHVybiB7XG4gICAgb2JqOiBvYmplY3QsXG4gICAgazogY2xlYW5LZXkoc3RhY2suc2hpZnQoKSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2V0UGF0aChvYmplY3QsIHBhdGgsIG5ld1ZhbHVlKSB7XG4gIHZhciBfZ2V0TGFzdE9mUGF0aCA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBPYmplY3QpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgub2JqLFxuICAgICAgayA9IF9nZXRMYXN0T2ZQYXRoLms7XG5cbiAgb2JqW2tdID0gbmV3VmFsdWU7XG59XG5mdW5jdGlvbiBwdXNoUGF0aChvYmplY3QsIHBhdGgsIG5ld1ZhbHVlLCBjb25jYXQpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoMiA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoLCBPYmplY3QpLFxuICAgICAgb2JqID0gX2dldExhc3RPZlBhdGgyLm9iaixcbiAgICAgIGsgPSBfZ2V0TGFzdE9mUGF0aDIuaztcblxuICBvYmpba10gPSBvYmpba10gfHwgW107XG4gIGlmIChjb25jYXQpIG9ialtrXSA9IG9ialtrXS5jb25jYXQobmV3VmFsdWUpO1xuICBpZiAoIWNvbmNhdCkgb2JqW2tdLnB1c2gobmV3VmFsdWUpO1xufVxuZnVuY3Rpb24gZ2V0UGF0aChvYmplY3QsIHBhdGgpIHtcbiAgdmFyIF9nZXRMYXN0T2ZQYXRoMyA9IGdldExhc3RPZlBhdGgob2JqZWN0LCBwYXRoKSxcbiAgICAgIG9iaiA9IF9nZXRMYXN0T2ZQYXRoMy5vYmosXG4gICAgICBrID0gX2dldExhc3RPZlBhdGgzLms7XG5cbiAgaWYgKCFvYmopIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBvYmpba107XG59XG5mdW5jdGlvbiBnZXRQYXRoV2l0aERlZmF1bHRzKGRhdGEsIGRlZmF1bHREYXRhLCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0UGF0aChkYXRhLCBrZXkpO1xuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIGdldFBhdGgoZGVmYXVsdERhdGEsIGtleSk7XG59XG5mdW5jdGlvbiBkZWVwRXh0ZW5kKHRhcmdldCwgc291cmNlLCBvdmVyd3JpdGUpIHtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpIHtcbiAgICBpZiAocHJvcCAhPT0gJ19fcHJvdG9fXycgJiYgcHJvcCAhPT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W3Byb3BdID09PSAnc3RyaW5nJyB8fCB0YXJnZXRbcHJvcF0gaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHNvdXJjZVtwcm9wXSA9PT0gJ3N0cmluZycgfHwgc291cmNlW3Byb3BdIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgICAgaWYgKG92ZXJ3cml0ZSkgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlZXBFeHRlbmQodGFyZ2V0W3Byb3BdLCBzb3VyY2VbcHJvcF0sIG92ZXJ3cml0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuZnVuY3Rpb24gcmVnZXhFc2NhcGUoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvW1xcLVxcW1xcXVxcL1xce1xcfVxcKFxcKVxcKlxcK1xcP1xcLlxcXFxcXF5cXCRcXHxdL2csICdcXFxcJCYnKTtcbn1cbnZhciBfZW50aXR5TWFwID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiMzOTsnLFxuICAnLyc6ICcmI3gyRjsnXG59O1xuZnVuY3Rpb24gZXNjYXBlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRhLnJlcGxhY2UoL1smPD5cIidcXC9dL2csIGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gX2VudGl0eU1hcFtzXTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxudmFyIGlzSUUxMCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG52YXIgY2hhcnMgPSBbJyAnLCAnLCcsICc/JywgJyEnLCAnOyddO1xuZnVuY3Rpb24gbG9va3NMaWtlT2JqZWN0UGF0aChrZXksIG5zU2VwYXJhdG9yLCBrZXlTZXBhcmF0b3IpIHtcbiAgbnNTZXBhcmF0b3IgPSBuc1NlcGFyYXRvciB8fCAnJztcbiAga2V5U2VwYXJhdG9yID0ga2V5U2VwYXJhdG9yIHx8ICcnO1xuICB2YXIgcG9zc2libGVDaGFycyA9IGNoYXJzLmZpbHRlcihmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBuc1NlcGFyYXRvci5pbmRleE9mKGMpIDwgMCAmJiBrZXlTZXBhcmF0b3IuaW5kZXhPZihjKSA8IDA7XG4gIH0pO1xuICBpZiAocG9zc2libGVDaGFycy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICB2YXIgciA9IG5ldyBSZWdFeHAoXCIoXCIuY29uY2F0KHBvc3NpYmxlQ2hhcnMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMgPT09ICc/JyA/ICdcXFxcPycgOiBjO1xuICB9KS5qb2luKCd8JyksIFwiKVwiKSk7XG4gIHZhciBtYXRjaGVkID0gIXIudGVzdChrZXkpO1xuXG4gIGlmICghbWF0Y2hlZCkge1xuICAgIHZhciBraSA9IGtleS5pbmRleE9mKGtleVNlcGFyYXRvcik7XG5cbiAgICBpZiAoa2kgPiAwICYmICFyLnRlc3Qoa2V5LnN1YnN0cmluZygwLCBraSkpKSB7XG4gICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyQxKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSB7IHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsgfSBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCQxKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMkMShPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzJDEoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBkZWVwRmluZChvYmosIHBhdGgpIHtcbiAgdmFyIGtleVNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJy4nO1xuICBpZiAoIW9iaikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKG9ialtwYXRoXSkgcmV0dXJuIG9ialtwYXRoXTtcbiAgdmFyIHBhdGhzID0gcGF0aC5zcGxpdChrZXlTZXBhcmF0b3IpO1xuICB2YXIgY3VycmVudCA9IG9iajtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFjdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50W3BhdGhzW2ldXSA9PT0gJ3N0cmluZycgJiYgaSArIDEgPCBwYXRocy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRbcGF0aHNbaV1dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBqID0gMjtcbiAgICAgIHZhciBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIHZhciBtaXggPSBjdXJyZW50W3BdO1xuXG4gICAgICB3aGlsZSAobWl4ID09PSB1bmRlZmluZWQgJiYgcGF0aHMubGVuZ3RoID4gaSArIGopIHtcbiAgICAgICAgaisrO1xuICAgICAgICBwID0gcGF0aHMuc2xpY2UoaSwgaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgICAgbWl4ID0gY3VycmVudFtwXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1peCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgaWYgKG1peCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGlmIChwYXRoLmVuZHNXaXRoKHApKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWl4ID09PSAnc3RyaW5nJykgcmV0dXJuIG1peDtcbiAgICAgICAgaWYgKHAgJiYgdHlwZW9mIG1peFtwXSA9PT0gJ3N0cmluZycpIHJldHVybiBtaXhbcF07XG4gICAgICB9XG5cbiAgICAgIHZhciBqb2luZWRQYXRoID0gcGF0aHMuc2xpY2UoaSArIGopLmpvaW4oa2V5U2VwYXJhdG9yKTtcbiAgICAgIGlmIChqb2luZWRQYXRoKSByZXR1cm4gZGVlcEZpbmQobWl4LCBqb2luZWRQYXRoLCBrZXlTZXBhcmF0b3IpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gY3VycmVudFtwYXRoc1tpXV07XG4gIH1cblxuICByZXR1cm4gY3VycmVudDtcbn1cblxudmFyIFJlc291cmNlU3RvcmUgPSBmdW5jdGlvbiAoX0V2ZW50RW1pdHRlcikge1xuICBfaW5oZXJpdHMoUmVzb3VyY2VTdG9yZSwgX0V2ZW50RW1pdHRlcik7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihSZXNvdXJjZVN0b3JlKTtcblxuICBmdW5jdGlvbiBSZXNvdXJjZVN0b3JlKGRhdGEpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgbnM6IFsndHJhbnNsYXRpb24nXSxcbiAgICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJ1xuICAgIH07XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVzb3VyY2VTdG9yZSk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLmRhdGEgPSBkYXRhIHx8IHt9O1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIF90aGlzLm9wdGlvbnMua2V5U2VwYXJhdG9yID0gJy4nO1xuICAgIH1cblxuICAgIGlmIChfdGhpcy5vcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoUmVzb3VyY2VTdG9yZSwgW3tcbiAgICBrZXk6IFwiYWRkTmFtZXNwYWNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGROYW1lc3BhY2VzKG5zKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpIDwgMCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMucHVzaChucyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbW92ZU5hbWVzcGFjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlcyhucykge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5vcHRpb25zLm5zLmluZGV4T2YobnMpO1xuXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMubnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UobG5nLCBucywga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIHZhciBpZ25vcmVKU09OU3RydWN0dXJlID0gb3B0aW9ucy5pZ25vcmVKU09OU3RydWN0dXJlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmlnbm9yZUpTT05TdHJ1Y3R1cmUgOiB0aGlzLm9wdGlvbnMuaWdub3JlSlNPTlN0cnVjdHVyZTtcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSAmJiB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcGF0aCA9IHBhdGguY29uY2F0KGtleSk7XG4gICAgICBpZiAoa2V5ICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSBwYXRoID0gcGF0aC5jb25jYXQoa2V5U2VwYXJhdG9yID8ga2V5LnNwbGl0KGtleVNlcGFyYXRvcikgOiBrZXkpO1xuXG4gICAgICBpZiAobG5nLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgICAgIHBhdGggPSBsbmcuc3BsaXQoJy4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc3VsdCA9IGdldFBhdGgodGhpcy5kYXRhLCBwYXRoKTtcbiAgICAgIGlmIChyZXN1bHQgfHwgIWlnbm9yZUpTT05TdHJ1Y3R1cmUgfHwgdHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiByZXN1bHQ7XG4gICAgICByZXR1cm4gZGVlcEZpbmQodGhpcy5kYXRhICYmIHRoaXMuZGF0YVtsbmddICYmIHRoaXMuZGF0YVtsbmddW25zXSwga2V5LCBrZXlTZXBhcmF0b3IpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRSZXNvdXJjZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZShsbmcsIG5zLCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIGFyZ3VtZW50c1s0XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzRdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICBpZiAoa2V5U2VwYXJhdG9yID09PSB1bmRlZmluZWQpIGtleVNlcGFyYXRvciA9ICcuJztcbiAgICAgIHZhciBwYXRoID0gW2xuZywgbnNdO1xuICAgICAgaWYgKGtleSkgcGF0aCA9IHBhdGguY29uY2F0KGtleVNlcGFyYXRvciA/IGtleS5zcGxpdChrZXlTZXBhcmF0b3IpIDoga2V5KTtcblxuICAgICAgaWYgKGxuZy5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgICAgICBwYXRoID0gbG5nLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhbHVlID0gbnM7XG4gICAgICAgIG5zID0gcGF0aFsxXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hZGROYW1lc3BhY2VzKG5zKTtcbiAgICAgIHNldFBhdGgodGhpcy5kYXRhLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywga2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRSZXNvdXJjZXMobG5nLCBucywgcmVzb3VyY2VzKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBtIGluIHJlc291cmNlcykge1xuICAgICAgICBpZiAodHlwZW9mIHJlc291cmNlc1ttXSA9PT0gJ3N0cmluZycgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShyZXNvdXJjZXNbbV0pID09PSAnW29iamVjdCBBcnJheV0nKSB0aGlzLmFkZFJlc291cmNlKGxuZywgbnMsIG0sIHJlc291cmNlc1ttXSwge1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkgdGhpcy5lbWl0KCdhZGRlZCcsIGxuZywgbnMsIHJlc291cmNlcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImFkZFJlc291cmNlQnVuZGxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIHJlc291cmNlcywgZGVlcCwgb3ZlcndyaXRlKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDoge1xuICAgICAgICBzaWxlbnQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdmFyIHBhdGggPSBbbG5nLCBuc107XG5cbiAgICAgIGlmIChsbmcuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICAgICAgcGF0aCA9IGxuZy5zcGxpdCgnLicpO1xuICAgICAgICBkZWVwID0gcmVzb3VyY2VzO1xuICAgICAgICByZXNvdXJjZXMgPSBucztcbiAgICAgICAgbnMgPSBwYXRoWzFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFkZE5hbWVzcGFjZXMobnMpO1xuICAgICAgdmFyIHBhY2sgPSBnZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCkgfHwge307XG5cbiAgICAgIGlmIChkZWVwKSB7XG4gICAgICAgIGRlZXBFeHRlbmQocGFjaywgcmVzb3VyY2VzLCBvdmVyd3JpdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFjayA9IF9vYmplY3RTcHJlYWQkMShfb2JqZWN0U3ByZWFkJDEoe30sIHBhY2spLCByZXNvdXJjZXMpO1xuICAgICAgfVxuXG4gICAgICBzZXRQYXRoKHRoaXMuZGF0YSwgcGF0aCwgcGFjayk7XG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB0aGlzLmVtaXQoJ2FkZGVkJywgbG5nLCBucywgcmVzb3VyY2VzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVtb3ZlUmVzb3VyY2VCdW5kbGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlUmVzb3VyY2VCdW5kbGUobG5nLCBucykge1xuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0YVtsbmddW25zXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZW1vdmVOYW1lc3BhY2VzKG5zKTtcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlZCcsIGxuZywgbnMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZShsbmcsIG5zKSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRSZXNvdXJjZUJ1bmRsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSB7XG4gICAgICBpZiAoIW5zKSBucyA9IHRoaXMub3B0aW9ucy5kZWZhdWx0TlM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgPT09ICd2MScpIHJldHVybiBfb2JqZWN0U3ByZWFkJDEoX29iamVjdFNwcmVhZCQxKHt9LCB7fSksIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucykpO1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UobG5nLCBucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldERhdGFCeUxhbmd1YWdlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGFCeUxhbmd1YWdlKGxuZykge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVtsbmddO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJoYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zKGxuZykge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldERhdGFCeUxhbmd1YWdlKGxuZyk7XG4gICAgICB2YXIgbiA9IGRhdGEgJiYgT2JqZWN0LmtleXMoZGF0YSkgfHwgW107XG4gICAgICByZXR1cm4gISFuLmZpbmQoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgcmV0dXJuIGRhdGFbdl0gJiYgT2JqZWN0LmtleXMoZGF0YVt2XSkubGVuZ3RoID4gMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b0pTT05cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gUmVzb3VyY2VTdG9yZTtcbn0oRXZlbnRFbWl0dGVyKTtcblxudmFyIHBvc3RQcm9jZXNzb3IgPSB7XG4gIHByb2Nlc3NvcnM6IHt9LFxuICBhZGRQb3N0UHJvY2Vzc29yOiBmdW5jdGlvbiBhZGRQb3N0UHJvY2Vzc29yKG1vZHVsZSkge1xuICAgIHRoaXMucHJvY2Vzc29yc1ttb2R1bGUubmFtZV0gPSBtb2R1bGU7XG4gIH0sXG4gIGhhbmRsZTogZnVuY3Rpb24gaGFuZGxlKHByb2Nlc3NvcnMsIHZhbHVlLCBrZXksIG9wdGlvbnMsIHRyYW5zbGF0b3IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcHJvY2Vzc29ycy5mb3JFYWNoKGZ1bmN0aW9uIChwcm9jZXNzb3IpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9jZXNzb3JzW3Byb2Nlc3Nvcl0pIHZhbHVlID0gX3RoaXMucHJvY2Vzc29yc1twcm9jZXNzb3JdLnByb2Nlc3ModmFsdWUsIGtleSwgb3B0aW9ucywgdHJhbnNsYXRvcik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59O1xuXG5mdW5jdGlvbiBvd25LZXlzJDIob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDIodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQyKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkMihPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDEoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMSgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMSgpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG52YXIgY2hlY2tlZExvYWRlZEZvciA9IHt9O1xuXG52YXIgVHJhbnNsYXRvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhUcmFuc2xhdG9yLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDEoVHJhbnNsYXRvcik7XG5cbiAgZnVuY3Rpb24gVHJhbnNsYXRvcihzZXJ2aWNlcykge1xuICAgIHZhciBfdGhpcztcblxuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2xhdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgY29weShbJ3Jlc291cmNlU3RvcmUnLCAnbGFuZ3VhZ2VVdGlscycsICdwbHVyYWxSZXNvbHZlcicsICdpbnRlcnBvbGF0b3InLCAnYmFja2VuZENvbm5lY3RvcicsICdpMThuRm9ybWF0JywgJ3V0aWxzJ10sIHNlcnZpY2VzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgX3RoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAoX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgX3RoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3IgPSAnLic7XG4gICAgfVxuXG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3RyYW5zbGF0b3InKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVHJhbnNsYXRvciwgW3tcbiAgICBrZXk6IFwiY2hhbmdlTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2hhbmdlTGFuZ3VhZ2UobG5nKSB7XG4gICAgICBpZiAobG5nKSB0aGlzLmxhbmd1YWdlID0gbG5nO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHtcbiAgICAgICAgaW50ZXJwb2xhdGlvbjoge31cbiAgICAgIH07XG5cbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzb2x2ZWQgPSB0aGlzLnJlc29sdmUoa2V5LCBvcHRpb25zKTtcbiAgICAgIHJldHVybiByZXNvbHZlZCAmJiByZXNvbHZlZC5yZXMgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0cmFjdEZyb21LZXlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0cmFjdEZyb21LZXkoa2V5LCBvcHRpb25zKSB7XG4gICAgICB2YXIgbnNTZXBhcmF0b3IgPSBvcHRpb25zLm5zU2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zU2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuICAgICAgaWYgKG5zU2VwYXJhdG9yID09PSB1bmRlZmluZWQpIG5zU2VwYXJhdG9yID0gJzonO1xuICAgICAgdmFyIGtleVNlcGFyYXRvciA9IG9wdGlvbnMua2V5U2VwYXJhdG9yICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmtleVNlcGFyYXRvciA6IHRoaXMub3B0aW9ucy5rZXlTZXBhcmF0b3I7XG4gICAgICB2YXIgbmFtZXNwYWNlcyA9IG9wdGlvbnMubnMgfHwgdGhpcy5vcHRpb25zLmRlZmF1bHROUyB8fCBbXTtcbiAgICAgIHZhciB3b3VsZENoZWNrRm9yTnNJbktleSA9IG5zU2VwYXJhdG9yICYmIGtleS5pbmRleE9mKG5zU2VwYXJhdG9yKSA+IC0xO1xuICAgICAgdmFyIHNlZW1zTmF0dXJhbExhbmd1YWdlID0gIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZEtleVNlcGFyYXRvciAmJiAhb3B0aW9ucy5rZXlTZXBhcmF0b3IgJiYgIXRoaXMub3B0aW9ucy51c2VyRGVmaW5lZE5zU2VwYXJhdG9yICYmICFvcHRpb25zLm5zU2VwYXJhdG9yICYmICFsb29rc0xpa2VPYmplY3RQYXRoKGtleSwgbnNTZXBhcmF0b3IsIGtleVNlcGFyYXRvcik7XG5cbiAgICAgIGlmICh3b3VsZENoZWNrRm9yTnNJbktleSAmJiAhc2VlbXNOYXR1cmFsTGFuZ3VhZ2UpIHtcbiAgICAgICAgdmFyIG0gPSBrZXkubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG5cbiAgICAgICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgbmFtZXNwYWNlczogbmFtZXNwYWNlc1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFydHMgPSBrZXkuc3BsaXQobnNTZXBhcmF0b3IpO1xuICAgICAgICBpZiAobnNTZXBhcmF0b3IgIT09IGtleVNlcGFyYXRvciB8fCBuc1NlcGFyYXRvciA9PT0ga2V5U2VwYXJhdG9yICYmIHRoaXMub3B0aW9ucy5ucy5pbmRleE9mKHBhcnRzWzBdKSA+IC0xKSBuYW1lc3BhY2VzID0gcGFydHMuc2hpZnQoKTtcbiAgICAgICAga2V5ID0gcGFydHMuam9pbihrZXlTZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnKSBuYW1lc3BhY2VzID0gW25hbWVzcGFjZXNdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIG5hbWVzcGFjZXM6IG5hbWVzcGFjZXNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInRyYW5zbGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0cmFuc2xhdGUoa2V5cywgb3B0aW9ucywgbGFzdEtleSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChfdHlwZW9mKG9wdGlvbnMpICE9PSAnb2JqZWN0JyAmJiB0aGlzLm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucy5vdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlcihhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgICAgIGlmIChrZXlzID09PSB1bmRlZmluZWQgfHwga2V5cyA9PT0gbnVsbCkgcmV0dXJuICcnO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtleXMpKSBrZXlzID0gW1N0cmluZyhrZXlzKV07XG4gICAgICB2YXIgcmV0dXJuRGV0YWlscyA9IG9wdGlvbnMucmV0dXJuRGV0YWlscyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5yZXR1cm5EZXRhaWxzIDogdGhpcy5vcHRpb25zLnJldHVybkRldGFpbHM7XG4gICAgICB2YXIga2V5U2VwYXJhdG9yID0gb3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMua2V5U2VwYXJhdG9yIDogdGhpcy5vcHRpb25zLmtleVNlcGFyYXRvcjtcblxuICAgICAgdmFyIF90aGlzJGV4dHJhY3RGcm9tS2V5ID0gdGhpcy5leHRyYWN0RnJvbUtleShrZXlzW2tleXMubGVuZ3RoIC0gMV0sIG9wdGlvbnMpLFxuICAgICAgICAgIGtleSA9IF90aGlzJGV4dHJhY3RGcm9tS2V5LmtleSxcbiAgICAgICAgICBuYW1lc3BhY2VzID0gX3RoaXMkZXh0cmFjdEZyb21LZXkubmFtZXNwYWNlcztcblxuICAgICAgdmFyIG5hbWVzcGFjZSA9IG5hbWVzcGFjZXNbbmFtZXNwYWNlcy5sZW5ndGggLSAxXTtcbiAgICAgIHZhciBsbmcgPSBvcHRpb25zLmxuZyB8fCB0aGlzLmxhbmd1YWdlO1xuICAgICAgdmFyIGFwcGVuZE5hbWVzcGFjZVRvQ0lNb2RlID0gb3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb0NJTW9kZSB8fCB0aGlzLm9wdGlvbnMuYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU7XG5cbiAgICAgIGlmIChsbmcgJiYgbG5nLnRvTG93ZXJDYXNlKCkgPT09ICdjaW1vZGUnKSB7XG4gICAgICAgIGlmIChhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSkge1xuICAgICAgICAgIHZhciBuc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3IgfHwgdGhpcy5vcHRpb25zLm5zU2VwYXJhdG9yO1xuXG4gICAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICAgIHJlc29sdmVkLnJlcyA9IFwiXCIuY29uY2F0KG5hbWVzcGFjZSkuY29uY2F0KG5zU2VwYXJhdG9yKS5jb25jYXQoa2V5KTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQobmFtZXNwYWNlKS5jb25jYXQobnNTZXBhcmF0b3IpLmNvbmNhdChrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJldHVybkRldGFpbHMpIHtcbiAgICAgICAgICByZXNvbHZlZC5yZXMgPSBrZXk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlc29sdmVkID0gdGhpcy5yZXNvbHZlKGtleXMsIG9wdGlvbnMpO1xuICAgICAgdmFyIHJlcyA9IHJlc29sdmVkICYmIHJlc29sdmVkLnJlcztcbiAgICAgIHZhciByZXNVc2VkS2V5ID0gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQudXNlZEtleSB8fCBrZXk7XG4gICAgICB2YXIgcmVzRXhhY3RVc2VkS2V5ID0gcmVzb2x2ZWQgJiYgcmVzb2x2ZWQuZXhhY3RVc2VkS2V5IHx8IGtleTtcbiAgICAgIHZhciByZXNUeXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShyZXMpO1xuICAgICAgdmFyIG5vT2JqZWN0ID0gWydbb2JqZWN0IE51bWJlcl0nLCAnW29iamVjdCBGdW5jdGlvbl0nLCAnW29iamVjdCBSZWdFeHBdJ107XG4gICAgICB2YXIgam9pbkFycmF5cyA9IG9wdGlvbnMuam9pbkFycmF5cyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5qb2luQXJyYXlzIDogdGhpcy5vcHRpb25zLmpvaW5BcnJheXM7XG4gICAgICB2YXIgaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQgPSAhdGhpcy5pMThuRm9ybWF0IHx8IHRoaXMuaTE4bkZvcm1hdC5oYW5kbGVBc09iamVjdDtcbiAgICAgIHZhciBoYW5kbGVBc09iamVjdCA9IHR5cGVvZiByZXMgIT09ICdzdHJpbmcnICYmIHR5cGVvZiByZXMgIT09ICdib29sZWFuJyAmJiB0eXBlb2YgcmVzICE9PSAnbnVtYmVyJztcblxuICAgICAgaWYgKGhhbmRsZUFzT2JqZWN0SW5JMThuRm9ybWF0ICYmIHJlcyAmJiBoYW5kbGVBc09iamVjdCAmJiBub09iamVjdC5pbmRleE9mKHJlc1R5cGUpIDwgMCAmJiAhKHR5cGVvZiBqb2luQXJyYXlzID09PSAnc3RyaW5nJyAmJiByZXNUeXBlID09PSAnW29iamVjdCBBcnJheV0nKSkge1xuICAgICAgICBpZiAoIW9wdGlvbnMucmV0dXJuT2JqZWN0cyAmJiAhdGhpcy5vcHRpb25zLnJldHVybk9iamVjdHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2FjY2Vzc2luZyBhbiBvYmplY3QgLSBidXQgcmV0dXJuT2JqZWN0cyBvcHRpb25zIGlzIG5vdCBlbmFibGVkIScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByID0gdGhpcy5vcHRpb25zLnJldHVybmVkT2JqZWN0SGFuZGxlciA/IHRoaXMub3B0aW9ucy5yZXR1cm5lZE9iamVjdEhhbmRsZXIocmVzVXNlZEtleSwgcmVzLCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICAgIG5zOiBuYW1lc3BhY2VzXG4gICAgICAgICAgfSkpIDogXCJrZXkgJ1wiLmNvbmNhdChrZXksIFwiIChcIikuY29uY2F0KHRoaXMubGFuZ3VhZ2UsIFwiKScgcmV0dXJuZWQgYW4gb2JqZWN0IGluc3RlYWQgb2Ygc3RyaW5nLlwiKTtcblxuICAgICAgICAgIGlmIChyZXR1cm5EZXRhaWxzKSB7XG4gICAgICAgICAgICByZXNvbHZlZC5yZXMgPSByO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleVNlcGFyYXRvcikge1xuICAgICAgICAgIHZhciByZXNUeXBlSXNBcnJheSA9IHJlc1R5cGUgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgICAgICAgdmFyIGNvcHkgPSByZXNUeXBlSXNBcnJheSA/IFtdIDoge307XG4gICAgICAgICAgdmFyIG5ld0tleVRvVXNlID0gcmVzVHlwZUlzQXJyYXkgPyByZXNFeGFjdFVzZWRLZXkgOiByZXNVc2VkS2V5O1xuXG4gICAgICAgICAgZm9yICh2YXIgbSBpbiByZXMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVzLCBtKSkge1xuICAgICAgICAgICAgICB2YXIgZGVlcEtleSA9IFwiXCIuY29uY2F0KG5ld0tleVRvVXNlKS5jb25jYXQoa2V5U2VwYXJhdG9yKS5jb25jYXQobSk7XG4gICAgICAgICAgICAgIGNvcHlbbV0gPSB0aGlzLnRyYW5zbGF0ZShkZWVwS2V5LCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge1xuICAgICAgICAgICAgICAgIGpvaW5BcnJheXM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5zOiBuYW1lc3BhY2VzXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgaWYgKGNvcHlbbV0gPT09IGRlZXBLZXkpIGNvcHlbbV0gPSByZXNbbV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzID0gY29weTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChoYW5kbGVBc09iamVjdEluSTE4bkZvcm1hdCAmJiB0eXBlb2Ygam9pbkFycmF5cyA9PT0gJ3N0cmluZycgJiYgcmVzVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICByZXMgPSByZXMuam9pbihqb2luQXJyYXlzKTtcbiAgICAgICAgaWYgKHJlcykgcmVzID0gdGhpcy5leHRlbmRUcmFuc2xhdGlvbihyZXMsIGtleXMsIG9wdGlvbnMsIGxhc3RLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHVzZWREZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgIHZhciB1c2VkS2V5ID0gZmFsc2U7XG4gICAgICAgIHZhciBuZWVkc1BsdXJhbEhhbmRsaW5nID0gb3B0aW9ucy5jb3VudCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb25zLmNvdW50ICE9PSAnc3RyaW5nJztcbiAgICAgICAgdmFyIGhhc0RlZmF1bHRWYWx1ZSA9IFRyYW5zbGF0b3IuaGFzRGVmYXVsdFZhbHVlKG9wdGlvbnMpO1xuICAgICAgICB2YXIgZGVmYXVsdFZhbHVlU3VmZml4ID0gbmVlZHNQbHVyYWxIYW5kbGluZyA/IHRoaXMucGx1cmFsUmVzb2x2ZXIuZ2V0U3VmZml4KGxuZywgb3B0aW9ucy5jb3VudCwgb3B0aW9ucykgOiAnJztcbiAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IG9wdGlvbnNbXCJkZWZhdWx0VmFsdWVcIi5jb25jYXQoZGVmYXVsdFZhbHVlU3VmZml4KV0gfHwgb3B0aW9ucy5kZWZhdWx0VmFsdWU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSAmJiBoYXNEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICB1c2VkRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgcmVzID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRMb29rdXAocmVzKSkge1xuICAgICAgICAgIHVzZWRLZXkgPSB0cnVlO1xuICAgICAgICAgIHJlcyA9IGtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaXNzaW5nS2V5Tm9WYWx1ZUZhbGxiYWNrVG9LZXkgPSBvcHRpb25zLm1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSB8fCB0aGlzLm9wdGlvbnMubWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5O1xuICAgICAgICB2YXIgcmVzRm9yTWlzc2luZyA9IG1pc3NpbmdLZXlOb1ZhbHVlRmFsbGJhY2tUb0tleSAmJiB1c2VkS2V5ID8gdW5kZWZpbmVkIDogcmVzO1xuICAgICAgICB2YXIgdXBkYXRlTWlzc2luZyA9IGhhc0RlZmF1bHRWYWx1ZSAmJiBkZWZhdWx0VmFsdWUgIT09IHJlcyAmJiB0aGlzLm9wdGlvbnMudXBkYXRlTWlzc2luZztcblxuICAgICAgICBpZiAodXNlZEtleSB8fCB1c2VkRGVmYXVsdCB8fCB1cGRhdGVNaXNzaW5nKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIubG9nKHVwZGF0ZU1pc3NpbmcgPyAndXBkYXRlS2V5JyA6ICdtaXNzaW5nS2V5JywgbG5nLCBuYW1lc3BhY2UsIGtleSwgdXBkYXRlTWlzc2luZyA/IGRlZmF1bHRWYWx1ZSA6IHJlcyk7XG5cbiAgICAgICAgICBpZiAoa2V5U2VwYXJhdG9yKSB7XG4gICAgICAgICAgICB2YXIgZmsgPSB0aGlzLnJlc29sdmUoa2V5LCBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICAgICAga2V5U2VwYXJhdG9yOiBmYWxzZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgaWYgKGZrICYmIGZrLnJlcykgdGhpcy5sb2dnZXIud2FybignU2VlbXMgdGhlIGxvYWRlZCB0cmFuc2xhdGlvbnMgd2VyZSBpbiBmbGF0IEpTT04gZm9ybWF0IGluc3RlYWQgb2YgbmVzdGVkLiBFaXRoZXIgc2V0IGtleVNlcGFyYXRvcjogZmFsc2Ugb24gaW5pdCBvciBtYWtlIHN1cmUgeW91ciB0cmFuc2xhdGlvbnMgYXJlIHB1Ymxpc2hlZCBpbiBuZXN0ZWQgZm9ybWF0LicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBsbmdzID0gW107XG4gICAgICAgICAgdmFyIGZhbGxiYWNrTG5ncyA9IHRoaXMubGFuZ3VhZ2VVdGlscy5nZXRGYWxsYmFja0NvZGVzKHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZywgb3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNhdmVNaXNzaW5nVG8gPT09ICdmYWxsYmFjaycgJiYgZmFsbGJhY2tMbmdzICYmIGZhbGxiYWNrTG5nc1swXSkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmYWxsYmFja0xuZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgbG5ncy5wdXNoKGZhbGxiYWNrTG5nc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdUbyA9PT0gJ2FsbCcpIHtcbiAgICAgICAgICAgIGxuZ3MgPSB0aGlzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsbmdzLnB1c2gob3B0aW9ucy5sbmcgfHwgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHNlbmQgPSBmdW5jdGlvbiBzZW5kKGwsIGssIHNwZWNpZmljRGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdEZvck1pc3NpbmcgPSBoYXNEZWZhdWx0VmFsdWUgJiYgc3BlY2lmaWNEZWZhdWx0VmFsdWUgIT09IHJlcyA/IHNwZWNpZmljRGVmYXVsdFZhbHVlIDogcmVzRm9yTWlzc2luZztcblxuICAgICAgICAgICAgaWYgKF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIF90aGlzMi5vcHRpb25zLm1pc3NpbmdLZXlIYW5kbGVyKGwsIG5hbWVzcGFjZSwgaywgZGVmYXVsdEZvck1pc3NpbmcsIHVwZGF0ZU1pc3NpbmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfdGhpczIuYmFja2VuZENvbm5lY3RvciAmJiBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZykge1xuICAgICAgICAgICAgICBfdGhpczIuYmFja2VuZENvbm5lY3Rvci5zYXZlTWlzc2luZyhsLCBuYW1lc3BhY2UsIGssIGRlZmF1bHRGb3JNaXNzaW5nLCB1cGRhdGVNaXNzaW5nLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgX3RoaXMyLmVtaXQoJ21pc3NpbmdLZXknLCBsLCBuYW1lc3BhY2UsIGssIHJlcyk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2F2ZU1pc3NpbmdQbHVyYWxzICYmIG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgbG5ncy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5ndWFnZSkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5wbHVyYWxSZXNvbHZlci5nZXRTdWZmaXhlcyhsYW5ndWFnZSwgb3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoc3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICBzZW5kKFtsYW5ndWFnZV0sIGtleSArIHN1ZmZpeCwgb3B0aW9uc1tcImRlZmF1bHRWYWx1ZVwiLmNvbmNhdChzdWZmaXgpXSB8fCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbmQobG5ncywga2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlcyA9IHRoaXMuZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXlzLCBvcHRpb25zLCByZXNvbHZlZCwgbGFzdEtleSk7XG4gICAgICAgIGlmICh1c2VkS2V5ICYmIHJlcyA9PT0ga2V5ICYmIHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkpIHJlcyA9IFwiXCIuY29uY2F0KG5hbWVzcGFjZSwgXCI6XCIpLmNvbmNhdChrZXkpO1xuXG4gICAgICAgIGlmICgodXNlZEtleSB8fCB1c2VkRGVmYXVsdCkgJiYgdGhpcy5vcHRpb25zLnBhcnNlTWlzc2luZ0tleUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScpIHtcbiAgICAgICAgICAgIHJlcyA9IHRoaXMub3B0aW9ucy5wYXJzZU1pc3NpbmdLZXlIYW5kbGVyKHRoaXMub3B0aW9ucy5hcHBlbmROYW1lc3BhY2VUb01pc3NpbmdLZXkgPyBcIlwiLmNvbmNhdChuYW1lc3BhY2UsIFwiOlwiKS5jb25jYXQoa2V5KSA6IGtleSwgdXNlZERlZmF1bHQgPyByZXMgOiB1bmRlZmluZWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSB0aGlzLm9wdGlvbnMucGFyc2VNaXNzaW5nS2V5SGFuZGxlcihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRGV0YWlscykge1xuICAgICAgICByZXNvbHZlZC5yZXMgPSByZXM7XG4gICAgICAgIHJldHVybiByZXNvbHZlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZXh0ZW5kVHJhbnNsYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXh0ZW5kVHJhbnNsYXRpb24ocmVzLCBrZXksIG9wdGlvbnMsIHJlc29sdmVkLCBsYXN0S2V5KSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuaTE4bkZvcm1hdCAmJiB0aGlzLmkxOG5Gb3JtYXQucGFyc2UpIHtcbiAgICAgICAgcmVzID0gdGhpcy5pMThuRm9ybWF0LnBhcnNlKHJlcywgX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyksIG9wdGlvbnMpLCByZXNvbHZlZC51c2VkTG5nLCByZXNvbHZlZC51c2VkTlMsIHJlc29sdmVkLnVzZWRLZXksIHtcbiAgICAgICAgICByZXNvbHZlZDogcmVzb2x2ZWRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnNraXBJbnRlcnBvbGF0aW9uKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVycG9sYXRpb24pIHRoaXMuaW50ZXJwb2xhdG9yLmluaXQoX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgb3B0aW9ucyksIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uOiBfb2JqZWN0U3ByZWFkJDIoX29iamVjdFNwcmVhZCQyKHt9LCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiksIG9wdGlvbnMuaW50ZXJwb2xhdGlvbilcbiAgICAgICAgfSkpO1xuICAgICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgJiYgKG9wdGlvbnMgJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMgOiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5za2lwT25WYXJpYWJsZXMpO1xuICAgICAgICB2YXIgbmVzdEJlZjtcblxuICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgdmFyIG5iID0gcmVzLm1hdGNoKHRoaXMuaW50ZXJwb2xhdG9yLm5lc3RpbmdSZWdleHApO1xuICAgICAgICAgIG5lc3RCZWYgPSBuYiAmJiBuYi5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMucmVwbGFjZSAmJiB0eXBlb2Ygb3B0aW9ucy5yZXBsYWNlICE9PSAnc3RyaW5nJyA/IG9wdGlvbnMucmVwbGFjZSA6IG9wdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzKSBkYXRhID0gX29iamVjdFNwcmVhZCQyKF9vYmplY3RTcHJlYWQkMih7fSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZGVmYXVsdFZhcmlhYmxlcyksIGRhdGEpO1xuICAgICAgICByZXMgPSB0aGlzLmludGVycG9sYXRvci5pbnRlcnBvbGF0ZShyZXMsIGRhdGEsIG9wdGlvbnMubG5nIHx8IHRoaXMubGFuZ3VhZ2UsIG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICB2YXIgbmEgPSByZXMubWF0Y2godGhpcy5pbnRlcnBvbGF0b3IubmVzdGluZ1JlZ2V4cCk7XG4gICAgICAgICAgdmFyIG5lc3RBZnQgPSBuYSAmJiBuYS5sZW5ndGg7XG4gICAgICAgICAgaWYgKG5lc3RCZWYgPCBuZXN0QWZ0KSBvcHRpb25zLm5lc3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLm5lc3QgIT09IGZhbHNlKSByZXMgPSB0aGlzLmludGVycG9sYXRvci5uZXN0KHJlcywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobGFzdEtleSAmJiBsYXN0S2V5WzBdID09PSBhcmdzWzBdICYmICFvcHRpb25zLmNvbnRleHQpIHtcbiAgICAgICAgICAgIF90aGlzMy5sb2dnZXIud2FybihcIkl0IHNlZW1zIHlvdSBhcmUgbmVzdGluZyByZWN1cnNpdmVseSBrZXk6IFwiLmNvbmNhdChhcmdzWzBdLCBcIiBpbiBrZXk6IFwiKS5jb25jYXQoa2V5WzBdKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBfdGhpczMudHJhbnNsYXRlLmFwcGx5KF90aGlzMywgYXJncy5jb25jYXQoW2tleV0pKTtcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIGlmIChvcHRpb25zLmludGVycG9sYXRpb24pIHRoaXMuaW50ZXJwb2xhdG9yLnJlc2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3N0UHJvY2VzcyA9IG9wdGlvbnMucG9zdFByb2Nlc3MgfHwgdGhpcy5vcHRpb25zLnBvc3RQcm9jZXNzO1xuICAgICAgdmFyIHBvc3RQcm9jZXNzb3JOYW1lcyA9IHR5cGVvZiBwb3N0UHJvY2VzcyA9PT0gJ3N0cmluZycgPyBbcG9zdFByb2Nlc3NdIDogcG9zdFByb2Nlc3M7XG5cbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiByZXMgIT09IG51bGwgJiYgcG9zdFByb2Nlc3Nvck5hbWVzICYmIHBvc3RQcm9jZXNzb3JOYW1lcy5sZW5ndGggJiYgb3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgIT09IGZhbHNlKSB7XG4gICAgICAgIHJlcyA9IHBvc3RQcm9jZXNzb3IuaGFuZGxlKHBvc3RQcm9jZXNzb3JOYW1lcywgcmVzLCBrZXksIHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucG9zdFByb2Nlc3NQYXNzUmVzb2x2ZWQgPyBfb2JqZWN0U3ByZWFkJDIoe1xuICAgICAgICAgIGkxOG5SZXNvbHZlZDogcmVzb2x2ZWRcbiAgICAgICAgfSwgb3B0aW9ucykgOiBvcHRpb25zLCB0aGlzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwicmVzb2x2ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlKGtleXMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgZm91bmQ7XG4gICAgICB2YXIgdXNlZEtleTtcbiAgICAgIHZhciBleGFjdFVzZWRLZXk7XG4gICAgICB2YXIgdXNlZExuZztcbiAgICAgIHZhciB1c2VkTlM7XG4gICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnKSBrZXlzID0gW2tleXNdO1xuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcblxuICAgICAgICB2YXIgZXh0cmFjdGVkID0gX3RoaXM0LmV4dHJhY3RGcm9tS2V5KGssIG9wdGlvbnMpO1xuXG4gICAgICAgIHZhciBrZXkgPSBleHRyYWN0ZWQua2V5O1xuICAgICAgICB1c2VkS2V5ID0ga2V5O1xuICAgICAgICB2YXIgbmFtZXNwYWNlcyA9IGV4dHJhY3RlZC5uYW1lc3BhY2VzO1xuICAgICAgICBpZiAoX3RoaXM0Lm9wdGlvbnMuZmFsbGJhY2tOUykgbmFtZXNwYWNlcyA9IG5hbWVzcGFjZXMuY29uY2F0KF90aGlzNC5vcHRpb25zLmZhbGxiYWNrTlMpO1xuICAgICAgICB2YXIgbmVlZHNQbHVyYWxIYW5kbGluZyA9IG9wdGlvbnMuY291bnQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0aW9ucy5jb3VudCAhPT0gJ3N0cmluZyc7XG5cbiAgICAgICAgdmFyIG5lZWRzWmVyb1N1ZmZpeExvb2t1cCA9IG5lZWRzUGx1cmFsSGFuZGxpbmcgJiYgIW9wdGlvbnMub3JkaW5hbCAmJiBvcHRpb25zLmNvdW50ID09PSAwICYmIF90aGlzNC5wbHVyYWxSZXNvbHZlci5zaG91bGRVc2VJbnRsQXBpKCk7XG5cbiAgICAgICAgdmFyIG5lZWRzQ29udGV4dEhhbmRsaW5nID0gb3B0aW9ucy5jb250ZXh0ICE9PSB1bmRlZmluZWQgJiYgKHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvcHRpb25zLmNvbnRleHQgPT09ICdudW1iZXInKSAmJiBvcHRpb25zLmNvbnRleHQgIT09ICcnO1xuICAgICAgICB2YXIgY29kZXMgPSBvcHRpb25zLmxuZ3MgPyBvcHRpb25zLmxuZ3MgOiBfdGhpczQubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkob3B0aW9ucy5sbmcgfHwgX3RoaXM0Lmxhbmd1YWdlLCBvcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgbmFtZXNwYWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChucykge1xuICAgICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcbiAgICAgICAgICB1c2VkTlMgPSBucztcblxuICAgICAgICAgIGlmICghY2hlY2tlZExvYWRlZEZvcltcIlwiLmNvbmNhdChjb2Rlc1swXSwgXCItXCIpLmNvbmNhdChucyldICYmIF90aGlzNC51dGlscyAmJiBfdGhpczQudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlICYmICFfdGhpczQudXRpbHMuaGFzTG9hZGVkTmFtZXNwYWNlKHVzZWROUykpIHtcbiAgICAgICAgICAgIGNoZWNrZWRMb2FkZWRGb3JbXCJcIi5jb25jYXQoY29kZXNbMF0sIFwiLVwiKS5jb25jYXQobnMpXSA9IHRydWU7XG5cbiAgICAgICAgICAgIF90aGlzNC5sb2dnZXIud2FybihcImtleSBcXFwiXCIuY29uY2F0KHVzZWRLZXksIFwiXFxcIiBmb3IgbGFuZ3VhZ2VzIFxcXCJcIikuY29uY2F0KGNvZGVzLmpvaW4oJywgJyksIFwiXFxcIiB3b24ndCBnZXQgcmVzb2x2ZWQgYXMgbmFtZXNwYWNlIFxcXCJcIikuY29uY2F0KHVzZWROUywgXCJcXFwiIHdhcyBub3QgeWV0IGxvYWRlZFwiKSwgJ1RoaXMgbWVhbnMgc29tZXRoaW5nIElTIFdST05HIGluIHlvdXIgc2V0dXAuIFlvdSBhY2Nlc3MgdGhlIHQgZnVuY3Rpb24gYmVmb3JlIGkxOG5leHQuaW5pdCAvIGkxOG5leHQubG9hZE5hbWVzcGFjZSAvIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2Ugd2FzIGRvbmUuIFdhaXQgZm9yIHRoZSBjYWxsYmFjayBvciBQcm9taXNlIHRvIHJlc29sdmUgYmVmb3JlIGFjY2Vzc2luZyBpdCEhIScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvZGVzLmZvckVhY2goZnVuY3Rpb24gKGNvZGUpIHtcbiAgICAgICAgICAgIGlmIChfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHJldHVybjtcbiAgICAgICAgICAgIHVzZWRMbmcgPSBjb2RlO1xuICAgICAgICAgICAgdmFyIGZpbmFsS2V5cyA9IFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoX3RoaXM0LmkxOG5Gb3JtYXQgJiYgX3RoaXM0LmkxOG5Gb3JtYXQuYWRkTG9va3VwS2V5cykge1xuICAgICAgICAgICAgICBfdGhpczQuaTE4bkZvcm1hdC5hZGRMb29rdXBLZXlzKGZpbmFsS2V5cywga2V5LCBjb2RlLCBucywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgcGx1cmFsU3VmZml4O1xuICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykgcGx1cmFsU3VmZml4ID0gX3RoaXM0LnBsdXJhbFJlc29sdmVyLmdldFN1ZmZpeChjb2RlLCBvcHRpb25zLmNvdW50LCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFyIHplcm9TdWZmaXggPSBcIlwiLmNvbmNhdChfdGhpczQub3B0aW9ucy5wbHVyYWxTZXBhcmF0b3IsIFwiemVyb1wiKTtcblxuICAgICAgICAgICAgICBpZiAobmVlZHNQbHVyYWxIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGtleSArIHBsdXJhbFN1ZmZpeCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobmVlZHNaZXJvU3VmZml4TG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICBmaW5hbEtleXMucHVzaChrZXkgKyB6ZXJvU3VmZml4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAobmVlZHNDb250ZXh0SGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dEtleSA9IFwiXCIuY29uY2F0KGtleSkuY29uY2F0KF90aGlzNC5vcHRpb25zLmNvbnRleHRTZXBhcmF0b3IpLmNvbmNhdChvcHRpb25zLmNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRzUGx1cmFsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkgKyBwbHVyYWxTdWZmaXgpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmVlZHNaZXJvU3VmZml4TG9va3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsS2V5cy5wdXNoKGNvbnRleHRLZXkgKyB6ZXJvU3VmZml4KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHBvc3NpYmxlS2V5O1xuXG4gICAgICAgICAgICB3aGlsZSAocG9zc2libGVLZXkgPSBmaW5hbEtleXMucG9wKCkpIHtcbiAgICAgICAgICAgICAgaWYgKCFfdGhpczQuaXNWYWxpZExvb2t1cChmb3VuZCkpIHtcbiAgICAgICAgICAgICAgICBleGFjdFVzZWRLZXkgPSBwb3NzaWJsZUtleTtcbiAgICAgICAgICAgICAgICBmb3VuZCA9IF90aGlzNC5nZXRSZXNvdXJjZShjb2RlLCBucywgcG9zc2libGVLZXksIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXM6IGZvdW5kLFxuICAgICAgICB1c2VkS2V5OiB1c2VkS2V5LFxuICAgICAgICBleGFjdFVzZWRLZXk6IGV4YWN0VXNlZEtleSxcbiAgICAgICAgdXNlZExuZzogdXNlZExuZyxcbiAgICAgICAgdXNlZE5TOiB1c2VkTlNcbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImlzVmFsaWRMb29rdXBcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZExvb2t1cChyZXMpIHtcbiAgICAgIHJldHVybiByZXMgIT09IHVuZGVmaW5lZCAmJiAhKCF0aGlzLm9wdGlvbnMucmV0dXJuTnVsbCAmJiByZXMgPT09IG51bGwpICYmICEoIXRoaXMub3B0aW9ucy5yZXR1cm5FbXB0eVN0cmluZyAmJiByZXMgPT09ICcnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UmVzb3VyY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9O1xuICAgICAgaWYgKHRoaXMuaTE4bkZvcm1hdCAmJiB0aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UpIHJldHVybiB0aGlzLmkxOG5Gb3JtYXQuZ2V0UmVzb3VyY2UoY29kZSwgbnMsIGtleSwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVN0b3JlLmdldFJlc291cmNlKGNvZGUsIG5zLCBrZXksIG9wdGlvbnMpO1xuICAgIH1cbiAgfV0sIFt7XG4gICAga2V5OiBcImhhc0RlZmF1bHRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNEZWZhdWx0VmFsdWUob3B0aW9ucykge1xuICAgICAgdmFyIHByZWZpeCA9ICdkZWZhdWx0VmFsdWUnO1xuXG4gICAgICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9wdGlvbnMsIG9wdGlvbikgJiYgcHJlZml4ID09PSBvcHRpb24uc3Vic3RyaW5nKDAsIHByZWZpeC5sZW5ndGgpICYmIHVuZGVmaW5lZCAhPT0gb3B0aW9uc1tvcHRpb25dKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBUcmFuc2xhdG9yO1xufShFdmVudEVtaXR0ZXIpO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xufVxuXG52YXIgTGFuZ3VhZ2VVdGlsID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBMYW5ndWFnZVV0aWwob3B0aW9ucykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYW5ndWFnZVV0aWwpO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN1cHBvcnRlZExuZ3MgPSB0aGlzLm9wdGlvbnMuc3VwcG9ydGVkTG5ncyB8fCBmYWxzZTtcbiAgICB0aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdsYW5ndWFnZVV0aWxzJyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoTGFuZ3VhZ2VVdGlsLCBbe1xuICAgIGtleTogXCJnZXRTY3JpcHRQYXJ0RnJvbUNvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBudWxsO1xuICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgICBpZiAocC5sZW5ndGggPT09IDIpIHJldHVybiBudWxsO1xuICAgICAgcC5wb3AoKTtcbiAgICAgIGlmIChwW3AubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKSA9PT0gJ3gnKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShwLmpvaW4oJy0nKSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldExhbmd1YWdlUGFydEZyb21Db2RlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldExhbmd1YWdlUGFydEZyb21Db2RlKGNvZGUpIHtcbiAgICAgIGlmICghY29kZSB8fCBjb2RlLmluZGV4T2YoJy0nKSA8IDApIHJldHVybiBjb2RlO1xuICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUocFswXSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZvcm1hdExhbmd1YWdlQ29kZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkge1xuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIHZhciBzcGVjaWFsQ2FzZXMgPSBbJ2hhbnMnLCAnaGFudCcsICdsYXRuJywgJ2N5cmwnLCAnY2FucycsICdtb25nJywgJ2FyYWInXTtcbiAgICAgICAgdmFyIHAgPSBjb2RlLnNwbGl0KCctJyk7XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcpIHtcbiAgICAgICAgICBwID0gcC5tYXAoZnVuY3Rpb24gKHBhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocC5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBwWzBdID0gcFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIHBbMV0gPSBwWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHNwZWNpYWxDYXNlcy5pbmRleE9mKHBbMV0udG9Mb3dlckNhc2UoKSkgPiAtMSkgcFsxXSA9IGNhcGl0YWxpemUocFsxXS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChwLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgIHBbMF0gPSBwWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHBbMV0ubGVuZ3RoID09PSAyKSBwWzFdID0gcFsxXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIGlmIChwWzBdICE9PSAnc2duJyAmJiBwWzJdLmxlbmd0aCA9PT0gMikgcFsyXSA9IHBbMl0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICBpZiAoc3BlY2lhbENhc2VzLmluZGV4T2YocFsxXS50b0xvd2VyQ2FzZSgpKSA+IC0xKSBwWzFdID0gY2FwaXRhbGl6ZShwWzFdLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChzcGVjaWFsQ2FzZXMuaW5kZXhPZihwWzJdLnRvTG93ZXJDYXNlKCkpID4gLTEpIHBbMl0gPSBjYXBpdGFsaXplKHBbMl0udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcC5qb2luKCctJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY2xlYW5Db2RlIHx8IHRoaXMub3B0aW9ucy5sb3dlckNhc2VMbmcgPyBjb2RlLnRvTG93ZXJDYXNlKCkgOiBjb2RlO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJpc1N1cHBvcnRlZENvZGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaXNTdXBwb3J0ZWRDb2RlKGNvZGUpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCA9PT0gJ2xhbmd1YWdlT25seScgfHwgdGhpcy5vcHRpb25zLm5vbkV4cGxpY2l0U3VwcG9ydGVkTG5ncykge1xuICAgICAgICBjb2RlID0gdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICF0aGlzLnN1cHBvcnRlZExuZ3MgfHwgIXRoaXMuc3VwcG9ydGVkTG5ncy5sZW5ndGggfHwgdGhpcy5zdXBwb3J0ZWRMbmdzLmluZGV4T2YoY29kZSkgPiAtMTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlc3RNYXRjaEZyb21Db2Rlcyhjb2Rlcykge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCFjb2RlcykgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZm91bmQ7XG4gICAgICBjb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjb2RlKSB7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgIHZhciBjbGVhbmVkTG5nID0gX3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpO1xuXG4gICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5zdXBwb3J0ZWRMbmdzIHx8IF90aGlzLmlzU3VwcG9ydGVkQ29kZShjbGVhbmVkTG5nKSkgZm91bmQgPSBjbGVhbmVkTG5nO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghZm91bmQgJiYgdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MpIHtcbiAgICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiAoY29kZSkge1xuICAgICAgICAgIGlmIChmb3VuZCkgcmV0dXJuO1xuXG4gICAgICAgICAgdmFyIGxuZ09ubHkgPSBfdGhpcy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKTtcblxuICAgICAgICAgIGlmIChfdGhpcy5pc1N1cHBvcnRlZENvZGUobG5nT25seSkpIHJldHVybiBmb3VuZCA9IGxuZ09ubHk7XG4gICAgICAgICAgZm91bmQgPSBfdGhpcy5vcHRpb25zLnN1cHBvcnRlZExuZ3MuZmluZChmdW5jdGlvbiAoc3VwcG9ydGVkTG5nKSB7XG4gICAgICAgICAgICBpZiAoc3VwcG9ydGVkTG5nLmluZGV4T2YobG5nT25seSkgPT09IDApIHJldHVybiBzdXBwb3J0ZWRMbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvdW5kKSBmb3VuZCA9IHRoaXMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpWzBdO1xuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRGYWxsYmFja0NvZGVzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZhbGxiYWNrQ29kZXMoZmFsbGJhY2tzLCBjb2RlKSB7XG4gICAgICBpZiAoIWZhbGxiYWNrcykgcmV0dXJuIFtdO1xuICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja3MgPT09ICdmdW5jdGlvbicpIGZhbGxiYWNrcyA9IGZhbGxiYWNrcyhjb2RlKTtcbiAgICAgIGlmICh0eXBlb2YgZmFsbGJhY2tzID09PSAnc3RyaW5nJykgZmFsbGJhY2tzID0gW2ZhbGxiYWNrc107XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShmYWxsYmFja3MpID09PSAnW29iamVjdCBBcnJheV0nKSByZXR1cm4gZmFsbGJhY2tzO1xuICAgICAgaWYgKCFjb2RlKSByZXR1cm4gZmFsbGJhY2tzW1wiZGVmYXVsdFwiXSB8fCBbXTtcbiAgICAgIHZhciBmb3VuZCA9IGZhbGxiYWNrc1tjb2RlXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZm9ybWF0TGFuZ3VhZ2VDb2RlKGNvZGUpXTtcbiAgICAgIGlmICghZm91bmQpIGZvdW5kID0gZmFsbGJhY2tzW3RoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSldO1xuICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSBmYWxsYmFja3NbXCJkZWZhdWx0XCJdO1xuICAgICAgcmV0dXJuIGZvdW5kIHx8IFtdO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ0b1Jlc29sdmVIaWVyYXJjaHlcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdG9SZXNvbHZlSGllcmFyY2h5KGNvZGUsIGZhbGxiYWNrQ29kZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBmYWxsYmFja0NvZGVzID0gdGhpcy5nZXRGYWxsYmFja0NvZGVzKGZhbGxiYWNrQ29kZSB8fCB0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcgfHwgW10sIGNvZGUpO1xuICAgICAgdmFyIGNvZGVzID0gW107XG5cbiAgICAgIHZhciBhZGRDb2RlID0gZnVuY3Rpb24gYWRkQ29kZShjKSB7XG4gICAgICAgIGlmICghYykgcmV0dXJuO1xuXG4gICAgICAgIGlmIChfdGhpczIuaXNTdXBwb3J0ZWRDb2RlKGMpKSB7XG4gICAgICAgICAgY29kZXMucHVzaChjKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpczIubG9nZ2VyLndhcm4oXCJyZWplY3RpbmcgbGFuZ3VhZ2UgY29kZSBub3QgZm91bmQgaW4gc3VwcG9ydGVkTG5nczogXCIuY29uY2F0KGMpKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBjb2RlID09PSAnc3RyaW5nJyAmJiBjb2RlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9hZCAhPT0gJ2xhbmd1YWdlT25seScpIGFkZENvZGUodGhpcy5mb3JtYXRMYW5ndWFnZUNvZGUoY29kZSkpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxvYWQgIT09ICdsYW5ndWFnZU9ubHknICYmIHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0U2NyaXB0UGFydEZyb21Db2RlKGNvZGUpKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sb2FkICE9PSAnY3VycmVudE9ubHknKSBhZGRDb2RlKHRoaXMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUoY29kZSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYWRkQ29kZSh0aGlzLmZvcm1hdExhbmd1YWdlQ29kZShjb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIGZhbGxiYWNrQ29kZXMuZm9yRWFjaChmdW5jdGlvbiAoZmMpIHtcbiAgICAgICAgaWYgKGNvZGVzLmluZGV4T2YoZmMpIDwgMCkgYWRkQ29kZShfdGhpczIuZm9ybWF0TGFuZ3VhZ2VDb2RlKGZjKSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2RlcztcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gTGFuZ3VhZ2VVdGlsO1xufSgpO1xuXG52YXIgc2V0cyA9IFt7XG4gIGxuZ3M6IFsnYWNoJywgJ2FrJywgJ2FtJywgJ2FybicsICdicicsICdmaWwnLCAnZ3VuJywgJ2xuJywgJ21mZScsICdtZycsICdtaScsICdvYycsICdwdCcsICdwdC1CUicsICd0ZycsICd0bCcsICd0aScsICd0cicsICd1eicsICd3YSddLFxuICBucjogWzEsIDJdLFxuICBmYzogMVxufSwge1xuICBsbmdzOiBbJ2FmJywgJ2FuJywgJ2FzdCcsICdheicsICdiZycsICdibicsICdjYScsICdkYScsICdkZScsICdkZXYnLCAnZWwnLCAnZW4nLCAnZW8nLCAnZXMnLCAnZXQnLCAnZXUnLCAnZmknLCAnZm8nLCAnZnVyJywgJ2Z5JywgJ2dsJywgJ2d1JywgJ2hhJywgJ2hpJywgJ2h1JywgJ2h5JywgJ2lhJywgJ2l0JywgJ2trJywgJ2tuJywgJ2t1JywgJ2xiJywgJ21haScsICdtbCcsICdtbicsICdtcicsICduYWgnLCAnbmFwJywgJ25iJywgJ25lJywgJ25sJywgJ25uJywgJ25vJywgJ25zbycsICdwYScsICdwYXAnLCAncG1zJywgJ3BzJywgJ3B0LVBUJywgJ3JtJywgJ3NjbycsICdzZScsICdzaScsICdzbycsICdzb24nLCAnc3EnLCAnc3YnLCAnc3cnLCAndGEnLCAndGUnLCAndGsnLCAndXInLCAneW8nXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDJcbn0sIHtcbiAgbG5nczogWydheScsICdibycsICdjZ2cnLCAnZmEnLCAnaHQnLCAnaWQnLCAnamEnLCAnamJvJywgJ2thJywgJ2ttJywgJ2tvJywgJ2t5JywgJ2xvJywgJ21zJywgJ3NhaCcsICdzdScsICd0aCcsICd0dCcsICd1ZycsICd2aScsICd3bycsICd6aCddLFxuICBucjogWzFdLFxuICBmYzogM1xufSwge1xuICBsbmdzOiBbJ2JlJywgJ2JzJywgJ2NucicsICdkeicsICdocicsICdydScsICdzcicsICd1ayddLFxuICBucjogWzEsIDIsIDVdLFxuICBmYzogNFxufSwge1xuICBsbmdzOiBbJ2FyJ10sXG4gIG5yOiBbMCwgMSwgMiwgMywgMTEsIDEwMF0sXG4gIGZjOiA1XG59LCB7XG4gIGxuZ3M6IFsnY3MnLCAnc2snXSxcbiAgbnI6IFsxLCAyLCA1XSxcbiAgZmM6IDZcbn0sIHtcbiAgbG5nczogWydjc2InLCAncGwnXSxcbiAgbnI6IFsxLCAyLCA1XSxcbiAgZmM6IDdcbn0sIHtcbiAgbG5nczogWydjeSddLFxuICBucjogWzEsIDIsIDMsIDhdLFxuICBmYzogOFxufSwge1xuICBsbmdzOiBbJ2ZyJ10sXG4gIG5yOiBbMSwgMl0sXG4gIGZjOiA5XG59LCB7XG4gIGxuZ3M6IFsnZ2EnXSxcbiAgbnI6IFsxLCAyLCAzLCA3LCAxMV0sXG4gIGZjOiAxMFxufSwge1xuICBsbmdzOiBbJ2dkJ10sXG4gIG5yOiBbMSwgMiwgMywgMjBdLFxuICBmYzogMTFcbn0sIHtcbiAgbG5nczogWydpcyddLFxuICBucjogWzEsIDJdLFxuICBmYzogMTJcbn0sIHtcbiAgbG5nczogWydqdiddLFxuICBucjogWzAsIDFdLFxuICBmYzogMTNcbn0sIHtcbiAgbG5nczogWydrdyddLFxuICBucjogWzEsIDIsIDMsIDRdLFxuICBmYzogMTRcbn0sIHtcbiAgbG5nczogWydsdCddLFxuICBucjogWzEsIDIsIDEwXSxcbiAgZmM6IDE1XG59LCB7XG4gIGxuZ3M6IFsnbHYnXSxcbiAgbnI6IFsxLCAyLCAwXSxcbiAgZmM6IDE2XG59LCB7XG4gIGxuZ3M6IFsnbWsnXSxcbiAgbnI6IFsxLCAyXSxcbiAgZmM6IDE3XG59LCB7XG4gIGxuZ3M6IFsnbW5rJ10sXG4gIG5yOiBbMCwgMSwgMl0sXG4gIGZjOiAxOFxufSwge1xuICBsbmdzOiBbJ210J10sXG4gIG5yOiBbMSwgMiwgMTEsIDIwXSxcbiAgZmM6IDE5XG59LCB7XG4gIGxuZ3M6IFsnb3InXSxcbiAgbnI6IFsyLCAxXSxcbiAgZmM6IDJcbn0sIHtcbiAgbG5nczogWydybyddLFxuICBucjogWzEsIDIsIDIwXSxcbiAgZmM6IDIwXG59LCB7XG4gIGxuZ3M6IFsnc2wnXSxcbiAgbnI6IFs1LCAxLCAyLCAzXSxcbiAgZmM6IDIxXG59LCB7XG4gIGxuZ3M6IFsnaGUnLCAnaXcnXSxcbiAgbnI6IFsxLCAyLCAyMCwgMjFdLFxuICBmYzogMjJcbn1dO1xudmFyIF9ydWxlc1BsdXJhbHNUeXBlcyA9IHtcbiAgMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID4gMSk7XG4gIH0sXG4gIDI6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPSAxKTtcbiAgfSxcbiAgMzogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIDQ6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAlIDEwID09IDEgJiYgbiAlIDEwMCAhPSAxMSA/IDAgOiBuICUgMTAgPj0gMiAmJiBuICUgMTAgPD0gNCAmJiAobiAlIDEwMCA8IDEwIHx8IG4gJSAxMDAgPj0gMjApID8gMSA6IDIpO1xuICB9LFxuICA1OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMCA/IDAgOiBuID09IDEgPyAxIDogbiA9PSAyID8gMiA6IG4gJSAxMDAgPj0gMyAmJiBuICUgMTAwIDw9IDEwID8gMyA6IG4gJSAxMDAgPj0gMTEgPyA0IDogNSk7XG4gIH0sXG4gIDY6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPj0gMiAmJiBuIDw9IDQgPyAxIDogMik7XG4gIH0sXG4gIDc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gJSAxMCA+PSAyICYmIG4gJSAxMCA8PSA0ICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDg6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxID8gMCA6IG4gPT0gMiA/IDEgOiBuICE9IDggJiYgbiAhPSAxMSA/IDIgOiAzKTtcbiAgfSxcbiAgOTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID49IDIpO1xuICB9LFxuICAxMDogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuID09IDEgPyAwIDogbiA9PSAyID8gMSA6IG4gPCA3ID8gMiA6IG4gPCAxMSA/IDMgOiA0KTtcbiAgfSxcbiAgMTE6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gPT0gMTEgPyAwIDogbiA9PSAyIHx8IG4gPT0gMTIgPyAxIDogbiA+IDIgJiYgbiA8IDIwID8gMiA6IDMpO1xuICB9LFxuICAxMjogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgIT0gMSB8fCBuICUgMTAwID09IDExKTtcbiAgfSxcbiAgMTM6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiAhPT0gMCk7XG4gIH0sXG4gIDE0OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogbiA9PSAzID8gMiA6IDMpO1xuICB9LFxuICAxNTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAgPT0gMSAmJiBuICUgMTAwICE9IDExID8gMCA6IG4gJSAxMCA+PSAyICYmIChuICUgMTAwIDwgMTAgfHwgbiAlIDEwMCA+PSAyMCkgPyAxIDogMik7XG4gIH0sXG4gIDE2OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogbiAhPT0gMCA/IDEgOiAyKTtcbiAgfSxcbiAgMTc6IGZ1bmN0aW9uIF8obikge1xuICAgIHJldHVybiBOdW1iZXIobiA9PSAxIHx8IG4gJSAxMCA9PSAxICYmIG4gJSAxMDAgIT0gMTEgPyAwIDogMSk7XG4gIH0sXG4gIDE4OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMCA/IDAgOiBuID09IDEgPyAxIDogMik7XG4gIH0sXG4gIDE5OiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDAgfHwgbiAlIDEwMCA+IDEgJiYgbiAlIDEwMCA8IDExID8gMSA6IG4gJSAxMDAgPiAxMCAmJiBuICUgMTAwIDwgMjAgPyAyIDogMyk7XG4gIH0sXG4gIDIwOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDAgfHwgbiAlIDEwMCA+IDAgJiYgbiAlIDEwMCA8IDIwID8gMSA6IDIpO1xuICB9LFxuICAyMTogZnVuY3Rpb24gXyhuKSB7XG4gICAgcmV0dXJuIE51bWJlcihuICUgMTAwID09IDEgPyAxIDogbiAlIDEwMCA9PSAyID8gMiA6IG4gJSAxMDAgPT0gMyB8fCBuICUgMTAwID09IDQgPyAzIDogMCk7XG4gIH0sXG4gIDIyOiBmdW5jdGlvbiBfKG4pIHtcbiAgICByZXR1cm4gTnVtYmVyKG4gPT0gMSA/IDAgOiBuID09IDIgPyAxIDogKG4gPCAwIHx8IG4gPiAxMCkgJiYgbiAlIDEwID09IDAgPyAyIDogMyk7XG4gIH1cbn07XG52YXIgZGVwcmVjYXRlZEpzb25WZXJzaW9ucyA9IFsndjEnLCAndjInLCAndjMnXTtcbnZhciBzdWZmaXhlc09yZGVyID0ge1xuICB6ZXJvOiAwLFxuICBvbmU6IDEsXG4gIHR3bzogMixcbiAgZmV3OiAzLFxuICBtYW55OiA0LFxuICBvdGhlcjogNVxufTtcblxuZnVuY3Rpb24gY3JlYXRlUnVsZXMoKSB7XG4gIHZhciBydWxlcyA9IHt9O1xuICBzZXRzLmZvckVhY2goZnVuY3Rpb24gKHNldCkge1xuICAgIHNldC5sbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgIHJ1bGVzW2xdID0ge1xuICAgICAgICBudW1iZXJzOiBzZXQubnIsXG4gICAgICAgIHBsdXJhbHM6IF9ydWxlc1BsdXJhbHNUeXBlc1tzZXQuZmNdXG4gICAgICB9O1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHJ1bGVzO1xufVxuXG52YXIgUGx1cmFsUmVzb2x2ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFBsdXJhbFJlc29sdmVyKGxhbmd1YWdlVXRpbHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUGx1cmFsUmVzb2x2ZXIpO1xuXG4gICAgdGhpcy5sYW5ndWFnZVV0aWxzID0gbGFuZ3VhZ2VVdGlscztcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ3BsdXJhbFJlc29sdmVyJyk7XG5cbiAgICBpZiAoKCF0aGlzLm9wdGlvbnMuY29tcGF0aWJpbGl0eUpTT04gfHwgdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID09PSAndjQnKSAmJiAodHlwZW9mIEludGwgPT09ICd1bmRlZmluZWQnIHx8ICFJbnRsLlBsdXJhbFJ1bGVzKSkge1xuICAgICAgdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OID0gJ3YzJztcbiAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdZb3VyIGVudmlyb25tZW50IHNlZW1zIG5vdCB0byBiZSBJbnRsIEFQSSBjb21wYXRpYmxlLCB1c2UgYW4gSW50bC5QbHVyYWxSdWxlcyBwb2x5ZmlsbC4gV2lsbCBmYWxsYmFjayB0byB0aGUgY29tcGF0aWJpbGl0eUpTT04gdjMgZm9ybWF0IGhhbmRsaW5nLicpO1xuICAgIH1cblxuICAgIHRoaXMucnVsZXMgPSBjcmVhdGVSdWxlcygpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBsdXJhbFJlc29sdmVyLCBbe1xuICAgIGtleTogXCJhZGRSdWxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFJ1bGUobG5nLCBvYmopIHtcbiAgICAgIHRoaXMucnVsZXNbbG5nXSA9IG9iajtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0UnVsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSdWxlKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLlBsdXJhbFJ1bGVzKGNvZGUsIHtcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMub3JkaW5hbCA/ICdvcmRpbmFsJyA6ICdjYXJkaW5hbCdcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydWxlc1tjb2RlXSB8fCB0aGlzLnJ1bGVzW3RoaXMubGFuZ3VhZ2VVdGlscy5nZXRMYW5ndWFnZVBhcnRGcm9tQ29kZShjb2RlKV07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIm5lZWRzUGx1cmFsXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIG5lZWRzUGx1cmFsKGNvZGUpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgcmV0dXJuIHJ1bGUgJiYgcnVsZS5yZXNvbHZlZE9wdGlvbnMoKS5wbHVyYWxDYXRlZ29yaWVzLmxlbmd0aCA+IDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPiAxO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRQbHVyYWxGb3Jtc09mS2V5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBsdXJhbEZvcm1zT2ZLZXkoY29kZSwga2V5KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdWZmaXhlcyhjb2RlLCBvcHRpb25zKS5tYXAoZnVuY3Rpb24gKHN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQoa2V5KS5jb25jYXQoc3VmZml4KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJnZXRTdWZmaXhlc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXhlcyhjb2RlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICB2YXIgcnVsZSA9IHRoaXMuZ2V0UnVsZShjb2RlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKCFydWxlKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc2hvdWxkVXNlSW50bEFwaSgpKSB7XG4gICAgICAgIHJldHVybiBydWxlLnJlc29sdmVkT3B0aW9ucygpLnBsdXJhbENhdGVnb3JpZXMuc29ydChmdW5jdGlvbiAocGx1cmFsQ2F0ZWdvcnkxLCBwbHVyYWxDYXRlZ29yeTIpIHtcbiAgICAgICAgICByZXR1cm4gc3VmZml4ZXNPcmRlcltwbHVyYWxDYXRlZ29yeTFdIC0gc3VmZml4ZXNPcmRlcltwbHVyYWxDYXRlZ29yeTJdO1xuICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKHBsdXJhbENhdGVnb3J5KSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KF90aGlzLm9wdGlvbnMucHJlcGVuZCkuY29uY2F0KHBsdXJhbENhdGVnb3J5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBydWxlLm51bWJlcnMubWFwKGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmdldFN1ZmZpeChjb2RlLCBudW1iZXIsIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImdldFN1ZmZpeFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdWZmaXgoY29kZSwgY291bnQpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fTtcbiAgICAgIHZhciBydWxlID0gdGhpcy5nZXRSdWxlKGNvZGUsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAocnVsZSkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVc2VJbnRsQXBpKCkpIHtcbiAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5vcHRpb25zLnByZXBlbmQpLmNvbmNhdChydWxlLnNlbGVjdChjb3VudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlKHJ1bGUsIGNvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2dnZXIud2FybihcIm5vIHBsdXJhbCBydWxlIGZvdW5kIGZvcjogXCIuY29uY2F0KGNvZGUpKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0U3VmZml4UmV0cm9Db21wYXRpYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldFN1ZmZpeFJldHJvQ29tcGF0aWJsZShydWxlLCBjb3VudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBpZHggPSBydWxlLm5vQWJzID8gcnVsZS5wbHVyYWxzKGNvdW50KSA6IHJ1bGUucGx1cmFscyhNYXRoLmFicyhjb3VudCkpO1xuICAgICAgdmFyIHN1ZmZpeCA9IHJ1bGUubnVtYmVyc1tpZHhdO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnNpbXBsaWZ5UGx1cmFsU3VmZml4ICYmIHJ1bGUubnVtYmVycy5sZW5ndGggPT09IDIgJiYgcnVsZS5udW1iZXJzWzBdID09PSAxKSB7XG4gICAgICAgIGlmIChzdWZmaXggPT09IDIpIHtcbiAgICAgICAgICBzdWZmaXggPSAncGx1cmFsJztcbiAgICAgICAgfSBlbHNlIGlmIChzdWZmaXggPT09IDEpIHtcbiAgICAgICAgICBzdWZmaXggPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgcmV0dXJuU3VmZml4ID0gZnVuY3Rpb24gcmV0dXJuU3VmZml4KCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMucHJlcGVuZCAmJiBzdWZmaXgudG9TdHJpbmcoKSA/IF90aGlzMi5vcHRpb25zLnByZXBlbmQgKyBzdWZmaXgudG9TdHJpbmcoKSA6IHN1ZmZpeC50b1N0cmluZygpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YxJykge1xuICAgICAgICBpZiAoc3VmZml4ID09PSAxKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh0eXBlb2Ygc3VmZml4ID09PSAnbnVtYmVyJykgcmV0dXJuIFwiX3BsdXJhbF9cIi5jb25jYXQoc3VmZml4LnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTiA9PT0gJ3YyJykge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zaW1wbGlmeVBsdXJhbFN1ZmZpeCAmJiBydWxlLm51bWJlcnMubGVuZ3RoID09PSAyICYmIHJ1bGUubnVtYmVyc1swXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gcmV0dXJuU3VmZml4KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucHJlcGVuZCAmJiBpZHgudG9TdHJpbmcoKSA/IHRoaXMub3B0aW9ucy5wcmVwZW5kICsgaWR4LnRvU3RyaW5nKCkgOiBpZHgudG9TdHJpbmcoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwic2hvdWxkVXNlSW50bEFwaVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRVc2VJbnRsQXBpKCkge1xuICAgICAgcmV0dXJuICFkZXByZWNhdGVkSnNvblZlcnNpb25zLmluY2x1ZGVzKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5SlNPTik7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIFBsdXJhbFJlc29sdmVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDModGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkMyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxudmFyIEludGVycG9sYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gSW50ZXJwb2xhdG9yKCkge1xuICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbnRlcnBvbGF0b3IpO1xuXG4gICAgdGhpcy5sb2dnZXIgPSBiYXNlTG9nZ2VyLmNyZWF0ZSgnaW50ZXJwb2xhdG9yJyk7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHRoaXMuZm9ybWF0ID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uICYmIG9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdChvcHRpb25zKTtcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhJbnRlcnBvbGF0b3IsIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIGlmICghb3B0aW9ucy5pbnRlcnBvbGF0aW9uKSBvcHRpb25zLmludGVycG9sYXRpb24gPSB7XG4gICAgICAgIGVzY2FwZVZhbHVlOiB0cnVlXG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5lc2NhcGUgPSBpT3B0cy5lc2NhcGUgIT09IHVuZGVmaW5lZCA/IGlPcHRzLmVzY2FwZSA6IGVzY2FwZTtcbiAgICAgIHRoaXMuZXNjYXBlVmFsdWUgPSBpT3B0cy5lc2NhcGVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMuZXNjYXBlVmFsdWUgOiB0cnVlO1xuICAgICAgdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlID0gaU9wdHMudXNlUmF3VmFsdWVUb0VzY2FwZSAhPT0gdW5kZWZpbmVkID8gaU9wdHMudXNlUmF3VmFsdWVUb0VzY2FwZSA6IGZhbHNlO1xuICAgICAgdGhpcy5wcmVmaXggPSBpT3B0cy5wcmVmaXggPyByZWdleEVzY2FwZShpT3B0cy5wcmVmaXgpIDogaU9wdHMucHJlZml4RXNjYXBlZCB8fCAne3snO1xuICAgICAgdGhpcy5zdWZmaXggPSBpT3B0cy5zdWZmaXggPyByZWdleEVzY2FwZShpT3B0cy5zdWZmaXgpIDogaU9wdHMuc3VmZml4RXNjYXBlZCB8fCAnfX0nO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgICAgdGhpcy51bmVzY2FwZVByZWZpeCA9IGlPcHRzLnVuZXNjYXBlU3VmZml4ID8gJycgOiBpT3B0cy51bmVzY2FwZVByZWZpeCB8fCAnLSc7XG4gICAgICB0aGlzLnVuZXNjYXBlU3VmZml4ID0gdGhpcy51bmVzY2FwZVByZWZpeCA/ICcnIDogaU9wdHMudW5lc2NhcGVTdWZmaXggfHwgJyc7XG4gICAgICB0aGlzLm5lc3RpbmdQcmVmaXggPSBpT3B0cy5uZXN0aW5nUHJlZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMubmVzdGluZ1ByZWZpeCkgOiBpT3B0cy5uZXN0aW5nUHJlZml4RXNjYXBlZCB8fCByZWdleEVzY2FwZSgnJHQoJyk7XG4gICAgICB0aGlzLm5lc3RpbmdTdWZmaXggPSBpT3B0cy5uZXN0aW5nU3VmZml4ID8gcmVnZXhFc2NhcGUoaU9wdHMubmVzdGluZ1N1ZmZpeCkgOiBpT3B0cy5uZXN0aW5nU3VmZml4RXNjYXBlZCB8fCByZWdleEVzY2FwZSgnKScpO1xuICAgICAgdGhpcy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciA9IGlPcHRzLm5lc3RpbmdPcHRpb25zU2VwYXJhdG9yID8gaU9wdHMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3IgOiBpT3B0cy5uZXN0aW5nT3B0aW9uc1NlcGFyYXRvciB8fCAnLCc7XG4gICAgICB0aGlzLm1heFJlcGxhY2VzID0gaU9wdHMubWF4UmVwbGFjZXMgPyBpT3B0cy5tYXhSZXBsYWNlcyA6IDEwMDA7XG4gICAgICB0aGlzLmFsd2F5c0Zvcm1hdCA9IGlPcHRzLmFsd2F5c0Zvcm1hdCAhPT0gdW5kZWZpbmVkID8gaU9wdHMuYWx3YXlzRm9ybWF0IDogZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0UmVnRXhwKCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc2V0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucykgdGhpcy5pbml0KHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlc2V0UmVnRXhwXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0UmVnRXhwKCkge1xuICAgICAgdmFyIHJlZ2V4cFN0ciA9IFwiXCIuY29uY2F0KHRoaXMucHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnN1ZmZpeCk7XG4gICAgICB0aGlzLnJlZ2V4cCA9IG5ldyBSZWdFeHAocmVnZXhwU3RyLCAnZycpO1xuICAgICAgdmFyIHJlZ2V4cFVuZXNjYXBlU3RyID0gXCJcIi5jb25jYXQodGhpcy5wcmVmaXgpLmNvbmNhdCh0aGlzLnVuZXNjYXBlUHJlZml4LCBcIiguKz8pXCIpLmNvbmNhdCh0aGlzLnVuZXNjYXBlU3VmZml4KS5jb25jYXQodGhpcy5zdWZmaXgpO1xuICAgICAgdGhpcy5yZWdleHBVbmVzY2FwZSA9IG5ldyBSZWdFeHAocmVnZXhwVW5lc2NhcGVTdHIsICdnJyk7XG4gICAgICB2YXIgbmVzdGluZ1JlZ2V4cFN0ciA9IFwiXCIuY29uY2F0KHRoaXMubmVzdGluZ1ByZWZpeCwgXCIoLis/KVwiKS5jb25jYXQodGhpcy5uZXN0aW5nU3VmZml4KTtcbiAgICAgIHRoaXMubmVzdGluZ1JlZ2V4cCA9IG5ldyBSZWdFeHAobmVzdGluZ1JlZ2V4cFN0ciwgJ2cnKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaW50ZXJwb2xhdGVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW50ZXJwb2xhdGUoc3RyLCBkYXRhLCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBtYXRjaDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHZhciByZXBsYWNlcztcbiAgICAgIHZhciBkZWZhdWx0RGF0YSA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbiAmJiB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5kZWZhdWx0VmFyaWFibGVzIHx8IHt9O1xuXG4gICAgICBmdW5jdGlvbiByZWdleFNhZmUodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwucmVwbGFjZSgvXFwkL2csICckJCQkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBoYW5kbGVGb3JtYXQgPSBmdW5jdGlvbiBoYW5kbGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihfdGhpcy5mb3JtYXRTZXBhcmF0b3IpIDwgMCkge1xuICAgICAgICAgIHZhciBwYXRoID0gZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwga2V5KTtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuYWx3YXlzRm9ybWF0ID8gX3RoaXMuZm9ybWF0KHBhdGgsIHVuZGVmaW5lZCwgbG5nLCBfb2JqZWN0U3ByZWFkJDMoX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIGRhdGEpLCB7fSwge1xuICAgICAgICAgICAgaW50ZXJwb2xhdGlvbmtleToga2V5XG4gICAgICAgICAgfSkpIDogcGF0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwID0ga2V5LnNwbGl0KF90aGlzLmZvcm1hdFNlcGFyYXRvcik7XG4gICAgICAgIHZhciBrID0gcC5zaGlmdCgpLnRyaW0oKTtcbiAgICAgICAgdmFyIGYgPSBwLmpvaW4oX3RoaXMuZm9ybWF0U2VwYXJhdG9yKS50cmltKCk7XG4gICAgICAgIHJldHVybiBfdGhpcy5mb3JtYXQoZ2V0UGF0aFdpdGhEZWZhdWx0cyhkYXRhLCBkZWZhdWx0RGF0YSwgayksIGYsIGxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyhfb2JqZWN0U3ByZWFkJDMoe30sIG9wdGlvbnMpLCBkYXRhKSwge30sIHtcbiAgICAgICAgICBpbnRlcnBvbGF0aW9ua2V5OiBrXG4gICAgICAgIH0pKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucmVzZXRSZWdFeHAoKTtcbiAgICAgIHZhciBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXIgPSBvcHRpb25zICYmIG9wdGlvbnMubWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIHx8IHRoaXMub3B0aW9ucy5taXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI7XG4gICAgICB2YXIgc2tpcE9uVmFyaWFibGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLmludGVycG9sYXRpb24gJiYgb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcyA6IHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLnNraXBPblZhcmlhYmxlcztcbiAgICAgIHZhciB0b2RvcyA9IFt7XG4gICAgICAgIHJlZ2V4OiB0aGlzLnJlZ2V4cFVuZXNjYXBlLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHtcbiAgICAgICAgcmVnZXg6IHRoaXMucmVnZXhwLFxuICAgICAgICBzYWZlVmFsdWU6IGZ1bmN0aW9uIHNhZmVWYWx1ZSh2YWwpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMuZXNjYXBlVmFsdWUgPyByZWdleFNhZmUoX3RoaXMuZXNjYXBlKHZhbCkpIDogcmVnZXhTYWZlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgIH1dO1xuICAgICAgdG9kb3MuZm9yRWFjaChmdW5jdGlvbiAodG9kbykge1xuICAgICAgICByZXBsYWNlcyA9IDA7XG5cbiAgICAgICAgd2hpbGUgKG1hdGNoID0gdG9kby5yZWdleC5leGVjKHN0cikpIHtcbiAgICAgICAgICB2YXIgbWF0Y2hlZFZhciA9IG1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgICB2YWx1ZSA9IGhhbmRsZUZvcm1hdChtYXRjaGVkVmFyKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICB2YXIgdGVtcCA9IG1pc3NpbmdJbnRlcnBvbGF0aW9uSGFuZGxlcihzdHIsIG1hdGNoLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdGVtcCA9PT0gJ3N0cmluZycgPyB0ZW1wIDogJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShtYXRjaGVkVmFyKSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChza2lwT25WYXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaFswXTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihcIm1pc3NlZCB0byBwYXNzIGluIHZhcmlhYmxlIFwiLmNvbmNhdChtYXRjaGVkVmFyLCBcIiBmb3IgaW50ZXJwb2xhdGluZyBcIikuY29uY2F0KHN0cikpO1xuXG4gICAgICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnICYmICFfdGhpcy51c2VSYXdWYWx1ZVRvRXNjYXBlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzYWZlVmFsdWUgPSB0b2RvLnNhZmVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobWF0Y2hbMF0sIHNhZmVWYWx1ZSk7XG5cbiAgICAgICAgICBpZiAoc2tpcE9uVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCArPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICB0b2RvLnJlZ2V4Lmxhc3RJbmRleCAtPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvZG8ucmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXBsYWNlcysrO1xuXG4gICAgICAgICAgaWYgKHJlcGxhY2VzID49IF90aGlzLm1heFJlcGxhY2VzKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwibmVzdFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBuZXN0KHN0ciwgZmMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgbWF0Y2g7XG4gICAgICB2YXIgdmFsdWU7XG5cbiAgICAgIHZhciBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQzKHt9LCBvcHRpb25zKTtcblxuICAgICAgY2xvbmVkT3B0aW9ucy5hcHBseVBvc3RQcm9jZXNzb3IgPSBmYWxzZTtcbiAgICAgIGRlbGV0ZSBjbG9uZWRPcHRpb25zLmRlZmF1bHRWYWx1ZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlSGFzT3B0aW9ucyhrZXksIGluaGVyaXRlZE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHNlcCA9IHRoaXMubmVzdGluZ09wdGlvbnNTZXBhcmF0b3I7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihzZXApIDwgMCkgcmV0dXJuIGtleTtcbiAgICAgICAgdmFyIGMgPSBrZXkuc3BsaXQobmV3IFJlZ0V4cChcIlwiLmNvbmNhdChzZXAsIFwiWyBdKntcIikpKTtcbiAgICAgICAgdmFyIG9wdGlvbnNTdHJpbmcgPSBcIntcIi5jb25jYXQoY1sxXSk7XG4gICAgICAgIGtleSA9IGNbMF07XG4gICAgICAgIG9wdGlvbnNTdHJpbmcgPSB0aGlzLmludGVycG9sYXRlKG9wdGlvbnNTdHJpbmcsIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB2YXIgbWF0Y2hlZFNpbmdsZVF1b3RlcyA9IG9wdGlvbnNTdHJpbmcubWF0Y2goLycvZyk7XG4gICAgICAgIHZhciBtYXRjaGVkRG91YmxlUXVvdGVzID0gb3B0aW9uc1N0cmluZy5tYXRjaCgvXCIvZyk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRTaW5nbGVRdW90ZXMgJiYgbWF0Y2hlZFNpbmdsZVF1b3Rlcy5sZW5ndGggJSAyID09PSAwICYmICFtYXRjaGVkRG91YmxlUXVvdGVzIHx8IG1hdGNoZWREb3VibGVRdW90ZXMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICAgIG9wdGlvbnNTdHJpbmcgPSBvcHRpb25zU3RyaW5nLnJlcGxhY2UoLycvZywgJ1wiJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb25lZE9wdGlvbnMgPSBKU09OLnBhcnNlKG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICAgIGlmIChpbmhlcml0ZWRPcHRpb25zKSBjbG9uZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgaW5oZXJpdGVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZXIud2FybihcImZhaWxlZCBwYXJzaW5nIG9wdGlvbnMgc3RyaW5nIGluIG5lc3RpbmcgZm9yIGtleSBcIi5jb25jYXQoa2V5KSwgZSk7XG4gICAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KGtleSkuY29uY2F0KHNlcCkuY29uY2F0KG9wdGlvbnNTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIGNsb25lZE9wdGlvbnMuZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobWF0Y2ggPSB0aGlzLm5lc3RpbmdSZWdleHAuZXhlYyhzdHIpKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXJzID0gW107XG4gICAgICAgIHZhciBkb1JlZHVjZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChtYXRjaFswXS5pbmRleE9mKHRoaXMuZm9ybWF0U2VwYXJhdG9yKSAhPT0gLTEgJiYgIS97Lip9Ly50ZXN0KG1hdGNoWzFdKSkge1xuICAgICAgICAgIHZhciByID0gbWF0Y2hbMV0uc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW0udHJpbSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG1hdGNoWzFdID0gci5zaGlmdCgpO1xuICAgICAgICAgIGZvcm1hdHRlcnMgPSByO1xuICAgICAgICAgIGRvUmVkdWNlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhbHVlID0gZmMoaGFuZGxlSGFzT3B0aW9ucy5jYWxsKHRoaXMsIG1hdGNoWzFdLnRyaW0oKSwgY2xvbmVkT3B0aW9ucyksIGNsb25lZE9wdGlvbnMpO1xuICAgICAgICBpZiAodmFsdWUgJiYgbWF0Y2hbMF0gPT09IHN0ciAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB2YWx1ZSA9IG1ha2VTdHJpbmcodmFsdWUpO1xuXG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwibWlzc2VkIHRvIHJlc29sdmUgXCIuY29uY2F0KG1hdGNoWzFdLCBcIiBmb3IgbmVzdGluZyBcIikuY29uY2F0KHN0cikpO1xuICAgICAgICAgIHZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG9SZWR1Y2UpIHtcbiAgICAgICAgICB2YWx1ZSA9IGZvcm1hdHRlcnMucmVkdWNlKGZ1bmN0aW9uICh2LCBmKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMyLmZvcm1hdCh2LCBmLCBvcHRpb25zLmxuZywgX29iamVjdFNwcmVhZCQzKF9vYmplY3RTcHJlYWQkMyh7fSwgb3B0aW9ucyksIHt9LCB7XG4gICAgICAgICAgICAgIGludGVycG9sYXRpb25rZXk6IG1hdGNoWzFdLnRyaW0oKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0sIHZhbHVlLnRyaW0oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShtYXRjaFswXSwgdmFsdWUpO1xuICAgICAgICB0aGlzLnJlZ2V4cC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBJbnRlcnBvbGF0b3I7XG59KCk7XG5cbmZ1bmN0aW9uIG93bktleXMkNChvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgeyBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IH0ga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQkNCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzJDQoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyQ0KE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBwYXJzZUZvcm1hdFN0cihmb3JtYXRTdHIpIHtcbiAgdmFyIGZvcm1hdE5hbWUgPSBmb3JtYXRTdHIudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHZhciBmb3JtYXRPcHRpb25zID0ge307XG5cbiAgaWYgKGZvcm1hdFN0ci5pbmRleE9mKCcoJykgPiAtMSkge1xuICAgIHZhciBwID0gZm9ybWF0U3RyLnNwbGl0KCcoJyk7XG4gICAgZm9ybWF0TmFtZSA9IHBbMF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgdmFyIG9wdFN0ciA9IHBbMV0uc3Vic3RyaW5nKDAsIHBbMV0ubGVuZ3RoIC0gMSk7XG5cbiAgICBpZiAoZm9ybWF0TmFtZSA9PT0gJ2N1cnJlbmN5JyAmJiBvcHRTdHIuaW5kZXhPZignOicpIDwgMCkge1xuICAgICAgaWYgKCFmb3JtYXRPcHRpb25zLmN1cnJlbmN5KSBmb3JtYXRPcHRpb25zLmN1cnJlbmN5ID0gb3B0U3RyLnRyaW0oKTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdE5hbWUgPT09ICdyZWxhdGl2ZXRpbWUnICYmIG9wdFN0ci5pbmRleE9mKCc6JykgPCAwKSB7XG4gICAgICBpZiAoIWZvcm1hdE9wdGlvbnMucmFuZ2UpIGZvcm1hdE9wdGlvbnMucmFuZ2UgPSBvcHRTdHIudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb3B0cyA9IG9wdFN0ci5zcGxpdCgnOycpO1xuICAgICAgb3B0cy5mb3JFYWNoKGZ1bmN0aW9uIChvcHQpIHtcbiAgICAgICAgaWYgKCFvcHQpIHJldHVybjtcblxuICAgICAgICB2YXIgX29wdCRzcGxpdCA9IG9wdC5zcGxpdCgnOicpLFxuICAgICAgICAgICAgX29wdCRzcGxpdDIgPSBfdG9BcnJheShfb3B0JHNwbGl0KSxcbiAgICAgICAgICAgIGtleSA9IF9vcHQkc3BsaXQyWzBdLFxuICAgICAgICAgICAgcmVzdCA9IF9vcHQkc3BsaXQyLnNsaWNlKDEpO1xuXG4gICAgICAgIHZhciB2YWwgPSByZXN0LmpvaW4oJzonKS50cmltKCkucmVwbGFjZSgvXicrfCcrJC9nLCAnJyk7XG4gICAgICAgIGlmICghZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSkgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IHZhbDtcbiAgICAgICAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykgZm9ybWF0T3B0aW9uc1trZXkudHJpbSgpXSA9IGZhbHNlO1xuICAgICAgICBpZiAodmFsID09PSAndHJ1ZScpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSB0cnVlO1xuICAgICAgICBpZiAoIWlzTmFOKHZhbCkpIGZvcm1hdE9wdGlvbnNba2V5LnRyaW0oKV0gPSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0TmFtZTogZm9ybWF0TmFtZSxcbiAgICBmb3JtYXRPcHRpb25zOiBmb3JtYXRPcHRpb25zXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmbikge1xuICB2YXIgY2FjaGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZUZvcm1hdHRlcih2YWwsIGxuZywgb3B0aW9ucykge1xuICAgIHZhciBrZXkgPSBsbmcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTtcbiAgICB2YXIgZm9ybWF0dGVyID0gY2FjaGVba2V5XTtcblxuICAgIGlmICghZm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXIgPSBmbihsbmcsIG9wdGlvbnMpO1xuICAgICAgY2FjaGVba2V5XSA9IGZvcm1hdHRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyKHZhbCk7XG4gIH07XG59XG5cbnZhciBGb3JtYXR0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEZvcm1hdHRlcigpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybWF0dGVyKTtcblxuICAgIHRoaXMubG9nZ2VyID0gYmFzZUxvZ2dlci5jcmVhdGUoJ2Zvcm1hdHRlcicpO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5mb3JtYXRzID0ge1xuICAgICAgbnVtYmVyOiBjcmVhdGVDYWNoZWRGb3JtYXR0ZXIoZnVuY3Rpb24gKGxuZywgb3B0aW9ucykge1xuICAgICAgICB2YXIgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxuZywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgY3VycmVuY3k6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG5nLCBfb2JqZWN0U3ByZWFkJDQoX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSwge30sIHtcbiAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5J1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZGF0ZXRpbWU6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHJlbGF0aXZldGltZTogY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZ1bmN0aW9uIChsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGZvcm1hdHRlciA9IG5ldyBJbnRsLlJlbGF0aXZlVGltZUZvcm1hdChsbmcsIF9vYmplY3RTcHJlYWQkNCh7fSwgb3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkge1xuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbCwgb3B0aW9ucy5yYW5nZSB8fCAnZGF5Jyk7XG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGxpc3Q6IGNyZWF0ZUNhY2hlZEZvcm1hdHRlcihmdW5jdGlvbiAobG5nLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBmb3JtYXR0ZXIgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxuZywgX29iamVjdFNwcmVhZCQ0KHt9LCBvcHRpb25zKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsKTtcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgfTtcbiAgICB0aGlzLmluaXQob3B0aW9ucyk7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoRm9ybWF0dGVyLCBbe1xuICAgIGtleTogXCJpbml0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXQoc2VydmljZXMpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7XG4gICAgICAgIGludGVycG9sYXRpb246IHt9XG4gICAgICB9O1xuICAgICAgdmFyIGlPcHRzID0gb3B0aW9ucy5pbnRlcnBvbGF0aW9uO1xuICAgICAgdGhpcy5mb3JtYXRTZXBhcmF0b3IgPSBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgPyBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgOiBpT3B0cy5mb3JtYXRTZXBhcmF0b3IgfHwgJywnO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJhZGRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gYWRkKG5hbWUsIGZjKSB7XG4gICAgICB0aGlzLmZvcm1hdHNbbmFtZS50b0xvd2VyQ2FzZSgpLnRyaW0oKV0gPSBmYztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiYWRkQ2FjaGVkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGFkZENhY2hlZChuYW1lLCBmYykge1xuICAgICAgdGhpcy5mb3JtYXRzW25hbWUudG9Mb3dlckNhc2UoKS50cmltKCldID0gY3JlYXRlQ2FjaGVkRm9ybWF0dGVyKGZjKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZm9ybWF0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgX2Zvcm1hdCwgbG5nLCBvcHRpb25zKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgZm9ybWF0cyA9IF9mb3JtYXQuc3BsaXQodGhpcy5mb3JtYXRTZXBhcmF0b3IpO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gZm9ybWF0cy5yZWR1Y2UoZnVuY3Rpb24gKG1lbSwgZikge1xuICAgICAgICB2YXIgX3BhcnNlRm9ybWF0U3RyID0gcGFyc2VGb3JtYXRTdHIoZiksXG4gICAgICAgICAgICBmb3JtYXROYW1lID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE5hbWUsXG4gICAgICAgICAgICBmb3JtYXRPcHRpb25zID0gX3BhcnNlRm9ybWF0U3RyLmZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgaWYgKF90aGlzLmZvcm1hdHNbZm9ybWF0TmFtZV0pIHtcbiAgICAgICAgICB2YXIgZm9ybWF0dGVkID0gbWVtO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciB2YWxPcHRpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtcyAmJiBvcHRpb25zLmZvcm1hdFBhcmFtc1tvcHRpb25zLmludGVycG9sYXRpb25rZXldIHx8IHt9O1xuICAgICAgICAgICAgdmFyIGwgPSB2YWxPcHRpb25zLmxvY2FsZSB8fCB2YWxPcHRpb25zLmxuZyB8fCBvcHRpb25zLmxvY2FsZSB8fCBvcHRpb25zLmxuZyB8fCBsbmc7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBfdGhpcy5mb3JtYXRzW2Zvcm1hdE5hbWVdKG1lbSwgbCwgX29iamVjdFNwcmVhZCQ0KF9vYmplY3RTcHJlYWQkNChfb2JqZWN0U3ByZWFkJDQoe30sIGZvcm1hdE9wdGlvbnMpLCBvcHRpb25zKSwgdmFsT3B0aW9ucykpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5sb2dnZXIud2FybihcInRoZXJlIHdhcyBubyBmb3JtYXQgZnVuY3Rpb24gZm9yIFwiLmNvbmNhdChmb3JtYXROYW1lKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbWVtO1xuICAgICAgfSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gRm9ybWF0dGVyO1xufSgpO1xuXG5mdW5jdGlvbiBvd25LZXlzJDUob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDUodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ1KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkNShPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMigpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMigpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIHJlbW92ZVBlbmRpbmcocSwgbmFtZSkge1xuICBpZiAocS5wZW5kaW5nW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICBkZWxldGUgcS5wZW5kaW5nW25hbWVdO1xuICAgIHEucGVuZGluZ0NvdW50LS07XG4gIH1cbn1cblxudmFyIENvbm5lY3RvciA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhDb25uZWN0b3IsIF9FdmVudEVtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIkMihDb25uZWN0b3IpO1xuXG4gIGZ1bmN0aW9uIENvbm5lY3RvcihiYWNrZW5kLCBzdG9yZSwgc2VydmljZXMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdG9yKTtcblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcyk7XG5cbiAgICBpZiAoaXNJRTEwKSB7XG4gICAgICBFdmVudEVtaXR0ZXIuY2FsbChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgfVxuXG4gICAgX3RoaXMuYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgX3RoaXMuc3RvcmUgPSBzdG9yZTtcbiAgICBfdGhpcy5zZXJ2aWNlcyA9IHNlcnZpY2VzO1xuICAgIF90aGlzLmxhbmd1YWdlVXRpbHMgPSBzZXJ2aWNlcy5sYW5ndWFnZVV0aWxzO1xuICAgIF90aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIF90aGlzLmxvZ2dlciA9IGJhc2VMb2dnZXIuY3JlYXRlKCdiYWNrZW5kQ29ubmVjdG9yJyk7XG4gICAgX3RoaXMud2FpdGluZ1JlYWRzID0gW107XG4gICAgX3RoaXMubWF4UGFyYWxsZWxSZWFkcyA9IG9wdGlvbnMubWF4UGFyYWxsZWxSZWFkcyB8fCAxMDtcbiAgICBfdGhpcy5yZWFkaW5nQ2FsbHMgPSAwO1xuICAgIF90aGlzLm1heFJldHJpZXMgPSBvcHRpb25zLm1heFJldHJpZXMgPj0gMCA/IG9wdGlvbnMubWF4UmV0cmllcyA6IDU7XG4gICAgX3RoaXMucmV0cnlUaW1lb3V0ID0gb3B0aW9ucy5yZXRyeVRpbWVvdXQgPj0gMSA/IG9wdGlvbnMucmV0cnlUaW1lb3V0IDogMzUwO1xuICAgIF90aGlzLnN0YXRlID0ge307XG4gICAgX3RoaXMucXVldWUgPSBbXTtcblxuICAgIGlmIChfdGhpcy5iYWNrZW5kICYmIF90aGlzLmJhY2tlbmQuaW5pdCkge1xuICAgICAgX3RoaXMuYmFja2VuZC5pbml0KHNlcnZpY2VzLCBvcHRpb25zLmJhY2tlbmQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhDb25uZWN0b3IsIFt7XG4gICAga2V5OiBcInF1ZXVlTG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBxdWV1ZUxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciB0b0xvYWQgPSB7fTtcbiAgICAgIHZhciBwZW5kaW5nID0ge307XG4gICAgICB2YXIgdG9Mb2FkTGFuZ3VhZ2VzID0ge307XG4gICAgICB2YXIgdG9Mb2FkTmFtZXNwYWNlcyA9IHt9O1xuICAgICAgbGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxuZykge1xuICAgICAgICB2YXIgaGFzQWxsTmFtZXNwYWNlcyA9IHRydWU7XG4gICAgICAgIG5hbWVzcGFjZXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFwiXCIuY29uY2F0KGxuZywgXCJ8XCIpLmNvbmNhdChucyk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMucmVsb2FkICYmIF90aGlzMi5zdG9yZS5oYXNSZXNvdXJjZUJ1bmRsZShsbmcsIG5zKSkge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzMi5zdGF0ZVtuYW1lXSA8IDApIDsgZWxzZSBpZiAoX3RoaXMyLnN0YXRlW25hbWVdID09PSAxKSB7XG4gICAgICAgICAgICBpZiAocGVuZGluZ1tuYW1lXSA9PT0gdW5kZWZpbmVkKSBwZW5kaW5nW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMyLnN0YXRlW25hbWVdID0gMTtcbiAgICAgICAgICAgIGhhc0FsbE5hbWVzcGFjZXMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZW5kaW5nW25hbWVdID09PSB1bmRlZmluZWQpIHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZFtuYW1lXSA9PT0gdW5kZWZpbmVkKSB0b0xvYWRbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRvTG9hZE5hbWVzcGFjZXNbbnNdID09PSB1bmRlZmluZWQpIHRvTG9hZE5hbWVzcGFjZXNbbnNdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWhhc0FsbE5hbWVzcGFjZXMpIHRvTG9hZExhbmd1YWdlc1tsbmddID0gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXModG9Mb2FkKS5sZW5ndGggfHwgT2JqZWN0LmtleXMocGVuZGluZykubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMucXVldWUucHVzaCh7XG4gICAgICAgICAgcGVuZGluZzogcGVuZGluZyxcbiAgICAgICAgICBwZW5kaW5nQ291bnQ6IE9iamVjdC5rZXlzKHBlbmRpbmcpLmxlbmd0aCxcbiAgICAgICAgICBsb2FkZWQ6IHt9LFxuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b0xvYWQ6IE9iamVjdC5rZXlzKHRvTG9hZCksXG4gICAgICAgIHBlbmRpbmc6IE9iamVjdC5rZXlzKHBlbmRpbmcpLFxuICAgICAgICB0b0xvYWRMYW5ndWFnZXM6IE9iamVjdC5rZXlzKHRvTG9hZExhbmd1YWdlcyksXG4gICAgICAgIHRvTG9hZE5hbWVzcGFjZXM6IE9iamVjdC5rZXlzKHRvTG9hZE5hbWVzcGFjZXMpXG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkZWRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZGVkKG5hbWUsIGVyciwgZGF0YSkge1xuICAgICAgdmFyIHMgPSBuYW1lLnNwbGl0KCd8Jyk7XG4gICAgICB2YXIgbG5nID0gc1swXTtcbiAgICAgIHZhciBucyA9IHNbMV07XG4gICAgICBpZiAoZXJyKSB0aGlzLmVtaXQoJ2ZhaWxlZExvYWRpbmcnLCBsbmcsIG5zLCBlcnIpO1xuXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICB0aGlzLnN0b3JlLmFkZFJlc291cmNlQnVuZGxlKGxuZywgbnMsIGRhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN0YXRlW25hbWVdID0gZXJyID8gLTEgOiAyO1xuICAgICAgdmFyIGxvYWRlZCA9IHt9O1xuICAgICAgdGhpcy5xdWV1ZS5mb3JFYWNoKGZ1bmN0aW9uIChxKSB7XG4gICAgICAgIHB1c2hQYXRoKHEubG9hZGVkLCBbbG5nXSwgbnMpO1xuICAgICAgICByZW1vdmVQZW5kaW5nKHEsIG5hbWUpO1xuICAgICAgICBpZiAoZXJyKSBxLmVycm9ycy5wdXNoKGVycik7XG5cbiAgICAgICAgaWYgKHEucGVuZGluZ0NvdW50ID09PSAwICYmICFxLmRvbmUpIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyhxLmxvYWRlZCkuZm9yRWFjaChmdW5jdGlvbiAobCkge1xuICAgICAgICAgICAgaWYgKCFsb2FkZWRbbF0pIGxvYWRlZFtsXSA9IHt9O1xuICAgICAgICAgICAgdmFyIGxvYWRlZEtleXMgPSBxLmxvYWRlZFtsXTtcblxuICAgICAgICAgICAgaWYgKGxvYWRlZEtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxvYWRlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAobnMpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9hZGVkW2xdW25zXSA9PT0gdW5kZWZpbmVkKSBsb2FkZWRbbF1bbnNdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcS5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChxLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHEuY2FsbGJhY2socS5lcnJvcnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxLmNhbGxiYWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdCgnbG9hZGVkJywgbG9hZGVkKTtcbiAgICAgIHRoaXMucXVldWUgPSB0aGlzLnF1ZXVlLmZpbHRlcihmdW5jdGlvbiAocSkge1xuICAgICAgICByZXR1cm4gIXEuZG9uZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWFkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQobG5nLCBucywgZmNOYW1lKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHRyaWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiAwO1xuICAgICAgdmFyIHdhaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IHRoaXMucmV0cnlUaW1lb3V0O1xuICAgICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDUgPyBhcmd1bWVudHNbNV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIWxuZy5sZW5ndGgpIHJldHVybiBjYWxsYmFjayhudWxsLCB7fSk7XG5cbiAgICAgIGlmICh0aGlzLnJlYWRpbmdDYWxscyA+PSB0aGlzLm1heFBhcmFsbGVsUmVhZHMpIHtcbiAgICAgICAgdGhpcy53YWl0aW5nUmVhZHMucHVzaCh7XG4gICAgICAgICAgbG5nOiBsbmcsXG4gICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgIGZjTmFtZTogZmNOYW1lLFxuICAgICAgICAgIHRyaWVkOiB0cmllZCxcbiAgICAgICAgICB3YWl0OiB3YWl0LFxuICAgICAgICAgIGNhbGxiYWNrOiBjYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlYWRpbmdDYWxscysrO1xuICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZFtmY05hbWVdKGxuZywgbnMsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgX3RoaXMzLnJlYWRpbmdDYWxscy0tO1xuXG4gICAgICAgIGlmIChfdGhpczMud2FpdGluZ1JlYWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IF90aGlzMy53YWl0aW5nUmVhZHMuc2hpZnQoKTtcblxuICAgICAgICAgIF90aGlzMy5yZWFkKG5leHQubG5nLCBuZXh0Lm5zLCBuZXh0LmZjTmFtZSwgbmV4dC50cmllZCwgbmV4dC53YWl0LCBuZXh0LmNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnIgJiYgZGF0YSAmJiB0cmllZCA8IF90aGlzMy5tYXhSZXRyaWVzKSB7XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczMucmVhZC5jYWxsKF90aGlzMywgbG5nLCBucywgZmNOYW1lLCB0cmllZCArIDEsIHdhaXQgKiAyLCBjYWxsYmFjayk7XG4gICAgICAgICAgfSwgd2FpdCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2soZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJwcmVwYXJlTG9hZGluZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBwcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKCF0aGlzLmJhY2tlbmQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignTm8gYmFja2VuZCB3YXMgYWRkZWQgdmlhIGkxOG5leHQudXNlLiBXaWxsIG5vdCBsb2FkIHJlc291cmNlcy4nKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2VzID09PSAnc3RyaW5nJykgbGFuZ3VhZ2VzID0gdGhpcy5sYW5ndWFnZVV0aWxzLnRvUmVzb2x2ZUhpZXJhcmNoeShsYW5ndWFnZXMpO1xuICAgICAgaWYgKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJykgbmFtZXNwYWNlcyA9IFtuYW1lc3BhY2VzXTtcbiAgICAgIHZhciB0b0xvYWQgPSB0aGlzLnF1ZXVlTG9hZChsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF0b0xvYWQudG9Mb2FkLmxlbmd0aCkge1xuICAgICAgICBpZiAoIXRvTG9hZC5wZW5kaW5nLmxlbmd0aCkgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRvTG9hZC50b0xvYWQuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBfdGhpczQubG9hZE9uZShuYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5wcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIHt9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbG9hZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZWxvYWQobGFuZ3VhZ2VzLCBuYW1lc3BhY2VzLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy5wcmVwYXJlTG9hZGluZyhsYW5ndWFnZXMsIG5hbWVzcGFjZXMsIHtcbiAgICAgICAgcmVsb2FkOiB0cnVlXG4gICAgICB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRPbmVcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZE9uZShuYW1lKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIHByZWZpeCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG4gICAgICB2YXIgcyA9IG5hbWUuc3BsaXQoJ3wnKTtcbiAgICAgIHZhciBsbmcgPSBzWzBdO1xuICAgICAgdmFyIG5zID0gc1sxXTtcbiAgICAgIHRoaXMucmVhZChsbmcsIG5zLCAncmVhZCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICAgIGlmIChlcnIpIF90aGlzNS5sb2dnZXIud2FybihcIlwiLmNvbmNhdChwcmVmaXgsIFwibG9hZGluZyBuYW1lc3BhY2UgXCIpLmNvbmNhdChucywgXCIgZm9yIGxhbmd1YWdlIFwiKS5jb25jYXQobG5nLCBcIiBmYWlsZWRcIiksIGVycik7XG4gICAgICAgIGlmICghZXJyICYmIGRhdGEpIF90aGlzNS5sb2dnZXIubG9nKFwiXCIuY29uY2F0KHByZWZpeCwgXCJsb2FkZWQgbmFtZXNwYWNlIFwiKS5jb25jYXQobnMsIFwiIGZvciBsYW5ndWFnZSBcIikuY29uY2F0KGxuZyksIGRhdGEpO1xuXG4gICAgICAgIF90aGlzNS5sb2FkZWQobmFtZSwgZXJyLCBkYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzYXZlTWlzc2luZ1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBzYXZlTWlzc2luZyhsYW5ndWFnZXMsIG5hbWVzcGFjZSwga2V5LCBmYWxsYmFja1ZhbHVlLCBpc1VwZGF0ZSkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gNSAmJiBhcmd1bWVudHNbNV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s1XSA6IHt9O1xuXG4gICAgICBpZiAodGhpcy5zZXJ2aWNlcy51dGlscyAmJiB0aGlzLnNlcnZpY2VzLnV0aWxzLmhhc0xvYWRlZE5hbWVzcGFjZSAmJiAhdGhpcy5zZXJ2aWNlcy51dGlscy5oYXNMb2FkZWROYW1lc3BhY2UobmFtZXNwYWNlKSkge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFwiZGlkIG5vdCBzYXZlIGtleSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGFzIHRoZSBuYW1lc3BhY2UgXFxcIlwiKS5jb25jYXQobmFtZXNwYWNlLCBcIlxcXCIgd2FzIG5vdCB5ZXQgbG9hZGVkXCIpLCAnVGhpcyBtZWFucyBzb21ldGhpbmcgSVMgV1JPTkcgaW4geW91ciBzZXR1cC4gWW91IGFjY2VzcyB0aGUgdCBmdW5jdGlvbiBiZWZvcmUgaTE4bmV4dC5pbml0IC8gaTE4bmV4dC5sb2FkTmFtZXNwYWNlIC8gaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSB3YXMgZG9uZS4gV2FpdCBmb3IgdGhlIGNhbGxiYWNrIG9yIFByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgYWNjZXNzaW5nIGl0ISEhJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gbnVsbCB8fCBrZXkgPT09ICcnKSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLmJhY2tlbmQgJiYgdGhpcy5iYWNrZW5kLmNyZWF0ZSkge1xuICAgICAgICB0aGlzLmJhY2tlbmQuY3JlYXRlKGxhbmd1YWdlcywgbmFtZXNwYWNlLCBrZXksIGZhbGxiYWNrVmFsdWUsIG51bGwsIF9vYmplY3RTcHJlYWQkNShfb2JqZWN0U3ByZWFkJDUoe30sIG9wdGlvbnMpLCB7fSwge1xuICAgICAgICAgIGlzVXBkYXRlOiBpc1VwZGF0ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbGFuZ3VhZ2VzIHx8ICFsYW5ndWFnZXNbMF0pIHJldHVybjtcbiAgICAgIHRoaXMuc3RvcmUuYWRkUmVzb3VyY2UobGFuZ3VhZ2VzWzBdLCBuYW1lc3BhY2UsIGtleSwgZmFsbGJhY2tWYWx1ZSk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIENvbm5lY3Rvcjtcbn0oRXZlbnRFbWl0dGVyKTtcblxuZnVuY3Rpb24gZ2V0KCkge1xuICByZXR1cm4ge1xuICAgIGRlYnVnOiBmYWxzZSxcbiAgICBpbml0SW1tZWRpYXRlOiB0cnVlLFxuICAgIG5zOiBbJ3RyYW5zbGF0aW9uJ10sXG4gICAgZGVmYXVsdE5TOiBbJ3RyYW5zbGF0aW9uJ10sXG4gICAgZmFsbGJhY2tMbmc6IFsnZGV2J10sXG4gICAgZmFsbGJhY2tOUzogZmFsc2UsXG4gICAgc3VwcG9ydGVkTG5nczogZmFsc2UsXG4gICAgbm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzOiBmYWxzZSxcbiAgICBsb2FkOiAnYWxsJyxcbiAgICBwcmVsb2FkOiBmYWxzZSxcbiAgICBzaW1wbGlmeVBsdXJhbFN1ZmZpeDogdHJ1ZSxcbiAgICBrZXlTZXBhcmF0b3I6ICcuJyxcbiAgICBuc1NlcGFyYXRvcjogJzonLFxuICAgIHBsdXJhbFNlcGFyYXRvcjogJ18nLFxuICAgIGNvbnRleHRTZXBhcmF0b3I6ICdfJyxcbiAgICBwYXJ0aWFsQnVuZGxlZExhbmd1YWdlczogZmFsc2UsXG4gICAgc2F2ZU1pc3Npbmc6IGZhbHNlLFxuICAgIHVwZGF0ZU1pc3Npbmc6IGZhbHNlLFxuICAgIHNhdmVNaXNzaW5nVG86ICdmYWxsYmFjaycsXG4gICAgc2F2ZU1pc3NpbmdQbHVyYWxzOiB0cnVlLFxuICAgIG1pc3NpbmdLZXlIYW5kbGVyOiBmYWxzZSxcbiAgICBtaXNzaW5nSW50ZXJwb2xhdGlvbkhhbmRsZXI6IGZhbHNlLFxuICAgIHBvc3RQcm9jZXNzOiBmYWxzZSxcbiAgICBwb3N0UHJvY2Vzc1Bhc3NSZXNvbHZlZDogZmFsc2UsXG4gICAgcmV0dXJuTnVsbDogdHJ1ZSxcbiAgICByZXR1cm5FbXB0eVN0cmluZzogdHJ1ZSxcbiAgICByZXR1cm5PYmplY3RzOiBmYWxzZSxcbiAgICBqb2luQXJyYXlzOiBmYWxzZSxcbiAgICByZXR1cm5lZE9iamVjdEhhbmRsZXI6IGZhbHNlLFxuICAgIHBhcnNlTWlzc2luZ0tleUhhbmRsZXI6IGZhbHNlLFxuICAgIGFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleTogZmFsc2UsXG4gICAgYXBwZW5kTmFtZXNwYWNlVG9DSU1vZGU6IGZhbHNlLFxuICAgIG92ZXJsb2FkVHJhbnNsYXRpb25PcHRpb25IYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGUoYXJncykge1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgaWYgKF90eXBlb2YoYXJnc1sxXSkgPT09ICdvYmplY3QnKSByZXQgPSBhcmdzWzFdO1xuICAgICAgaWYgKHR5cGVvZiBhcmdzWzFdID09PSAnc3RyaW5nJykgcmV0LmRlZmF1bHRWYWx1ZSA9IGFyZ3NbMV07XG4gICAgICBpZiAodHlwZW9mIGFyZ3NbMl0gPT09ICdzdHJpbmcnKSByZXQudERlc2NyaXB0aW9uID0gYXJnc1syXTtcblxuICAgICAgaWYgKF90eXBlb2YoYXJnc1syXSkgPT09ICdvYmplY3QnIHx8IF90eXBlb2YoYXJnc1szXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gYXJnc1szXSB8fCBhcmdzWzJdO1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICByZXRba2V5XSA9IG9wdGlvbnNba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgICBlc2NhcGVWYWx1ZTogdHJ1ZSxcbiAgICAgIGZvcm1hdDogZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBfZm9ybWF0LCBsbmcsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHByZWZpeDogJ3t7JyxcbiAgICAgIHN1ZmZpeDogJ319JyxcbiAgICAgIGZvcm1hdFNlcGFyYXRvcjogJywnLFxuICAgICAgdW5lc2NhcGVQcmVmaXg6ICctJyxcbiAgICAgIG5lc3RpbmdQcmVmaXg6ICckdCgnLFxuICAgICAgbmVzdGluZ1N1ZmZpeDogJyknLFxuICAgICAgbmVzdGluZ09wdGlvbnNTZXBhcmF0b3I6ICcsJyxcbiAgICAgIG1heFJlcGxhY2VzOiAxMDAwLFxuICAgICAgc2tpcE9uVmFyaWFibGVzOiB0cnVlXG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMubnMgPSBbb3B0aW9ucy5uc107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja0xuZyA9PT0gJ3N0cmluZycpIG9wdGlvbnMuZmFsbGJhY2tMbmcgPSBbb3B0aW9ucy5mYWxsYmFja0xuZ107XG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5mYWxsYmFja05TID09PSAnc3RyaW5nJykgb3B0aW9ucy5mYWxsYmFja05TID0gW29wdGlvbnMuZmFsbGJhY2tOU107XG5cbiAgaWYgKG9wdGlvbnMuc3VwcG9ydGVkTG5ncyAmJiBvcHRpb25zLnN1cHBvcnRlZExuZ3MuaW5kZXhPZignY2ltb2RlJykgPCAwKSB7XG4gICAgb3B0aW9ucy5zdXBwb3J0ZWRMbmdzID0gb3B0aW9ucy5zdXBwb3J0ZWRMbmdzLmNvbmNhdChbJ2NpbW9kZSddKTtcbiAgfVxuXG4gIHJldHVybiBvcHRpb25zO1xufVxuXG5mdW5jdGlvbiBvd25LZXlzJDYob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkJDYodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyQ2KE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMkNihPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZVN1cGVyJDMoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMygpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QkMygpIHsgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlOyBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlOyBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlOyB0cnkgeyBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbiwgW10sIGZ1bmN0aW9uICgpIHt9KSk7IHJldHVybiB0cnVlOyB9IGNhdGNoIChlKSB7IHJldHVybiBmYWxzZTsgfSB9XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiBiaW5kTWVtYmVyRnVuY3Rpb25zKGluc3QpIHtcbiAgdmFyIG1lbXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdCkpO1xuICBtZW1zLmZvckVhY2goZnVuY3Rpb24gKG1lbSkge1xuICAgIGlmICh0eXBlb2YgaW5zdFttZW1dID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbnN0W21lbV0gPSBpbnN0W21lbV0uYmluZChpbnN0KTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgSTE4biA9IGZ1bmN0aW9uIChfRXZlbnRFbWl0dGVyKSB7XG4gIF9pbmhlcml0cyhJMThuLCBfRXZlbnRFbWl0dGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyJDMoSTE4bik7XG5cbiAgZnVuY3Rpb24gSTE4bigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSTE4bik7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgaWYgKGlzSUUxMCkge1xuICAgICAgRXZlbnRFbWl0dGVyLmNhbGwoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgIH1cblxuICAgIF90aGlzLm9wdGlvbnMgPSB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpO1xuICAgIF90aGlzLnNlcnZpY2VzID0ge307XG4gICAgX3RoaXMubG9nZ2VyID0gYmFzZUxvZ2dlcjtcbiAgICBfdGhpcy5tb2R1bGVzID0ge1xuICAgICAgZXh0ZXJuYWw6IFtdXG4gICAgfTtcbiAgICBiaW5kTWVtYmVyRnVuY3Rpb25zKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcblxuICAgIGlmIChjYWxsYmFjayAmJiAhX3RoaXMuaXNJbml0aWFsaXplZCAmJiAhb3B0aW9ucy5pc0Nsb25lKSB7XG4gICAgICBpZiAoIV90aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgICBfdGhpcy5pbml0KG9wdGlvbnMsIGNhbGxiYWNrKTtcblxuICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmluaXQob3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKEkxOG4sIFt7XG4gICAga2V5OiBcImluaXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHt9O1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdE5TICYmIG9wdGlvbnMuZGVmYXVsdE5TICE9PSBmYWxzZSAmJiBvcHRpb25zLm5zKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBvcHRpb25zLmRlZmF1bHROUyA9IG9wdGlvbnMubnM7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ucy5pbmRleE9mKCd0cmFuc2xhdGlvbicpIDwgMCkge1xuICAgICAgICAgIG9wdGlvbnMuZGVmYXVsdE5TID0gb3B0aW9ucy5uc1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZGVmT3B0cyA9IGdldCgpO1xuICAgICAgdGhpcy5vcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIGRlZk9wdHMpLCB0aGlzLm9wdGlvbnMpLCB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpKTtcblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXRpYmlsaXR5QVBJICE9PSAndjEnKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNih7fSwgZGVmT3B0cy5pbnRlcnBvbGF0aW9uKSwgdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5rZXlTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudXNlckRlZmluZWRLZXlTZXBhcmF0b3IgPSBvcHRpb25zLmtleVNlcGFyYXRvcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMubnNTZXBhcmF0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMudXNlckRlZmluZWROc1NlcGFyYXRvciA9IG9wdGlvbnMubnNTZXBhcmF0b3I7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNsYXNzT25EZW1hbmQoQ2xhc3NPck9iamVjdCkge1xuICAgICAgICBpZiAoIUNsYXNzT3JPYmplY3QpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAodHlwZW9mIENsYXNzT3JPYmplY3QgPT09ICdmdW5jdGlvbicpIHJldHVybiBuZXcgQ2xhc3NPck9iamVjdCgpO1xuICAgICAgICByZXR1cm4gQ2xhc3NPck9iamVjdDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaXNDbG9uZSkge1xuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxvZ2dlcikge1xuICAgICAgICAgIGJhc2VMb2dnZXIuaW5pdChjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sb2dnZXIpLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJhc2VMb2dnZXIuaW5pdChudWxsLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZvcm1hdHRlcjtcblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmZvcm1hdHRlcikge1xuICAgICAgICAgIGZvcm1hdHRlciA9IHRoaXMubW9kdWxlcy5mb3JtYXR0ZXI7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIEludGwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgZm9ybWF0dGVyID0gRm9ybWF0dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGx1ID0gbmV3IExhbmd1YWdlVXRpbCh0aGlzLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLnN0b3JlID0gbmV3IFJlc291cmNlU3RvcmUodGhpcy5vcHRpb25zLnJlc291cmNlcywgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnNlcnZpY2VzO1xuICAgICAgICBzLmxvZ2dlciA9IGJhc2VMb2dnZXI7XG4gICAgICAgIHMucmVzb3VyY2VTdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHMubGFuZ3VhZ2VVdGlscyA9IGx1O1xuICAgICAgICBzLnBsdXJhbFJlc29sdmVyID0gbmV3IFBsdXJhbFJlc29sdmVyKGx1LCB7XG4gICAgICAgICAgcHJlcGVuZDogdGhpcy5vcHRpb25zLnBsdXJhbFNlcGFyYXRvcixcbiAgICAgICAgICBjb21wYXRpYmlsaXR5SlNPTjogdGhpcy5vcHRpb25zLmNvbXBhdGliaWxpdHlKU09OLFxuICAgICAgICAgIHNpbXBsaWZ5UGx1cmFsU3VmZml4OiB0aGlzLm9wdGlvbnMuc2ltcGxpZnlQbHVyYWxTdWZmaXhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGZvcm1hdHRlciAmJiAoIXRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCB8fCB0aGlzLm9wdGlvbnMuaW50ZXJwb2xhdGlvbi5mb3JtYXQgPT09IGRlZk9wdHMuaW50ZXJwb2xhdGlvbi5mb3JtYXQpKSB7XG4gICAgICAgICAgcy5mb3JtYXR0ZXIgPSBjcmVhdGVDbGFzc09uRGVtYW5kKGZvcm1hdHRlcik7XG4gICAgICAgICAgcy5mb3JtYXR0ZXIuaW5pdChzLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5pbnRlcnBvbGF0aW9uLmZvcm1hdCA9IHMuZm9ybWF0dGVyLmZvcm1hdC5iaW5kKHMuZm9ybWF0dGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHMuaW50ZXJwb2xhdG9yID0gbmV3IEludGVycG9sYXRvcih0aGlzLm9wdGlvbnMpO1xuICAgICAgICBzLnV0aWxzID0ge1xuICAgICAgICAgIGhhc0xvYWRlZE5hbWVzcGFjZTogdGhpcy5oYXNMb2FkZWROYW1lc3BhY2UuYmluZCh0aGlzKVxuICAgICAgICB9O1xuICAgICAgICBzLmJhY2tlbmRDb25uZWN0b3IgPSBuZXcgQ29ubmVjdG9yKGNyZWF0ZUNsYXNzT25EZW1hbmQodGhpcy5tb2R1bGVzLmJhY2tlbmQpLCBzLnJlc291cmNlU3RvcmUsIHMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHMuYmFja2VuZENvbm5lY3Rvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IpIHtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IgPSBjcmVhdGVDbGFzc09uRGVtYW5kKHRoaXMubW9kdWxlcy5sYW5ndWFnZURldGVjdG9yKTtcbiAgICAgICAgICBzLmxhbmd1YWdlRGV0ZWN0b3IuaW5pdChzLCB0aGlzLm9wdGlvbnMuZGV0ZWN0aW9uLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubW9kdWxlcy5pMThuRm9ybWF0KSB7XG4gICAgICAgICAgcy5pMThuRm9ybWF0ID0gY3JlYXRlQ2xhc3NPbkRlbWFuZCh0aGlzLm1vZHVsZXMuaTE4bkZvcm1hdCk7XG4gICAgICAgICAgaWYgKHMuaTE4bkZvcm1hdC5pbml0KSBzLmkxOG5Gb3JtYXQuaW5pdCh0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yKHRoaXMuc2VydmljZXMsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHRoaXMudHJhbnNsYXRvci5vbignKicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzMi5lbWl0LmFwcGx5KF90aGlzMiwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmV4dGVybmFsLmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICBpZiAobS5pbml0KSBtLmluaXQoX3RoaXMyKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZm9ybWF0ID0gdGhpcy5vcHRpb25zLmludGVycG9sYXRpb24uZm9ybWF0O1xuICAgICAgaWYgKCFjYWxsYmFjaykgY2FsbGJhY2sgPSBub29wO1xuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nICYmICF0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IgJiYgIXRoaXMub3B0aW9ucy5sbmcpIHtcbiAgICAgICAgdmFyIGNvZGVzID0gdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZVV0aWxzLmdldEZhbGxiYWNrQ29kZXModGhpcy5vcHRpb25zLmZhbGxiYWNrTG5nKTtcbiAgICAgICAgaWYgKGNvZGVzLmxlbmd0aCA+IDAgJiYgY29kZXNbMF0gIT09ICdkZXYnKSB0aGlzLm9wdGlvbnMubG5nID0gY29kZXNbMF07XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yICYmICF0aGlzLm9wdGlvbnMubG5nKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2luaXQ6IG5vIGxhbmd1YWdlRGV0ZWN0b3IgaXMgdXNlZCBhbmQgbm8gbG5nIGlzIGRlZmluZWQnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0b3JlQXBpID0gWydnZXRSZXNvdXJjZScsICdoYXNSZXNvdXJjZUJ1bmRsZScsICdnZXRSZXNvdXJjZUJ1bmRsZScsICdnZXREYXRhQnlMYW5ndWFnZSddO1xuICAgICAgc3RvcmVBcGkuZm9yRWFjaChmdW5jdGlvbiAoZmNOYW1lKSB7XG4gICAgICAgIF90aGlzMltmY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBfdGhpczIkc3RvcmU7XG5cbiAgICAgICAgICByZXR1cm4gKF90aGlzMiRzdG9yZSA9IF90aGlzMi5zdG9yZSlbZmNOYW1lXS5hcHBseShfdGhpczIkc3RvcmUsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHZhciBzdG9yZUFwaUNoYWluZWQgPSBbJ2FkZFJlc291cmNlJywgJ2FkZFJlc291cmNlcycsICdhZGRSZXNvdXJjZUJ1bmRsZScsICdyZW1vdmVSZXNvdXJjZUJ1bmRsZSddO1xuICAgICAgc3RvcmVBcGlDaGFpbmVkLmZvckVhY2goZnVuY3Rpb24gKGZjTmFtZSkge1xuICAgICAgICBfdGhpczJbZmNOYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMyJHN0b3JlMjtcblxuICAgICAgICAgIChfdGhpczIkc3RvcmUyID0gX3RoaXMyLnN0b3JlKVtmY05hbWVdLmFwcGx5KF90aGlzMiRzdG9yZTIsIGFyZ3VtZW50cyk7XG5cbiAgICAgICAgICByZXR1cm4gX3RoaXMyO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICB2YXIgZGVmZXJyZWQgPSBkZWZlcigpO1xuXG4gICAgICB2YXIgbG9hZCA9IGZ1bmN0aW9uIGxvYWQoKSB7XG4gICAgICAgIHZhciBmaW5pc2ggPSBmdW5jdGlvbiBmaW5pc2goZXJyLCB0KSB7XG4gICAgICAgICAgaWYgKF90aGlzMi5pc0luaXRpYWxpemVkICYmICFfdGhpczIuaW5pdGlhbGl6ZWRTdG9yZU9uY2UpIF90aGlzMi5sb2dnZXIud2FybignaW5pdDogaTE4bmV4dCBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBZb3Ugc2hvdWxkIGNhbGwgaW5pdCBqdXN0IG9uY2UhJyk7XG4gICAgICAgICAgX3RoaXMyLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICghX3RoaXMyLm9wdGlvbnMuaXNDbG9uZSkgX3RoaXMyLmxvZ2dlci5sb2coJ2luaXRpYWxpemVkJywgX3RoaXMyLm9wdGlvbnMpO1xuXG4gICAgICAgICAgX3RoaXMyLmVtaXQoJ2luaXRpYWxpemVkJywgX3RoaXMyLm9wdGlvbnMpO1xuXG4gICAgICAgICAgZGVmZXJyZWQucmVzb2x2ZSh0KTtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChfdGhpczIubGFuZ3VhZ2VzICYmIF90aGlzMi5vcHRpb25zLmNvbXBhdGliaWxpdHlBUEkgIT09ICd2MScgJiYgIV90aGlzMi5pc0luaXRpYWxpemVkKSByZXR1cm4gZmluaXNoKG51bGwsIF90aGlzMi50LmJpbmQoX3RoaXMyKSk7XG5cbiAgICAgICAgX3RoaXMyLmNoYW5nZUxhbmd1YWdlKF90aGlzMi5vcHRpb25zLmxuZywgZmluaXNoKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVzb3VyY2VzIHx8ICF0aGlzLm9wdGlvbnMuaW5pdEltbWVkaWF0ZSkge1xuICAgICAgICBsb2FkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRUaW1lb3V0KGxvYWQsIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmZXJyZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbG9hZFJlc291cmNlcyhsYW5ndWFnZSkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbm9vcDtcbiAgICAgIHZhciB1c2VkQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgIHZhciB1c2VkTG5nID0gdHlwZW9mIGxhbmd1YWdlID09PSAnc3RyaW5nJyA/IGxhbmd1YWdlIDogdGhpcy5sYW5ndWFnZTtcbiAgICAgIGlmICh0eXBlb2YgbGFuZ3VhZ2UgPT09ICdmdW5jdGlvbicpIHVzZWRDYWxsYmFjayA9IGxhbmd1YWdlO1xuXG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXNvdXJjZXMgfHwgdGhpcy5vcHRpb25zLnBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzKSB7XG4gICAgICAgIGlmICh1c2VkTG5nICYmIHVzZWRMbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB1c2VkQ2FsbGJhY2soKTtcbiAgICAgICAgdmFyIHRvTG9hZCA9IFtdO1xuXG4gICAgICAgIHZhciBhcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobG5nKSB7XG4gICAgICAgICAgaWYgKCFsbmcpIHJldHVybjtcblxuICAgICAgICAgIHZhciBsbmdzID0gX3RoaXMzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMudG9SZXNvbHZlSGllcmFyY2h5KGxuZyk7XG5cbiAgICAgICAgICBsbmdzLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIGlmICh0b0xvYWQuaW5kZXhPZihsKSA8IDApIHRvTG9hZC5wdXNoKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdXNlZExuZykge1xuICAgICAgICAgIHZhciBmYWxsYmFja3MgPSB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0RmFsbGJhY2tDb2Rlcyh0aGlzLm9wdGlvbnMuZmFsbGJhY2tMbmcpO1xuICAgICAgICAgIGZhbGxiYWNrcy5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwZW5kKGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFwcGVuZCh1c2VkTG5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucHJlbG9hZCkge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5wcmVsb2FkLmZvckVhY2goZnVuY3Rpb24gKGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmQobCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IubG9hZCh0b0xvYWQsIHRoaXMub3B0aW9ucy5ucywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBpZiAoIWUgJiYgIV90aGlzMy5yZXNvbHZlZExhbmd1YWdlICYmIF90aGlzMy5sYW5ndWFnZSkgX3RoaXMzLnNldFJlc29sdmVkTGFuZ3VhZ2UoX3RoaXMzLmxhbmd1YWdlKTtcbiAgICAgICAgICB1c2VkQ2FsbGJhY2soZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXNlZENhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZWxvYWRSZXNvdXJjZXNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVsb2FkUmVzb3VyY2VzKGxuZ3MsIG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIGRlZmVycmVkID0gZGVmZXIoKTtcbiAgICAgIGlmICghbG5ncykgbG5ncyA9IHRoaXMubGFuZ3VhZ2VzO1xuICAgICAgaWYgKCFucykgbnMgPSB0aGlzLm9wdGlvbnMubnM7XG4gICAgICBpZiAoIWNhbGxiYWNrKSBjYWxsYmFjayA9IG5vb3A7XG4gICAgICB0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IucmVsb2FkKGxuZ3MsIG5zLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ1c2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gdXNlKG1vZHVsZSkge1xuICAgICAgaWYgKCFtb2R1bGUpIHRocm93IG5ldyBFcnJvcignWW91IGFyZSBwYXNzaW5nIGFuIHVuZGVmaW5lZCBtb2R1bGUhIFBsZWFzZSBjaGVjayB0aGUgb2JqZWN0IHlvdSBhcmUgcGFzc2luZyB0byBpMThuZXh0LnVzZSgpJyk7XG4gICAgICBpZiAoIW1vZHVsZS50eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBhcmUgcGFzc2luZyBhIHdyb25nIG1vZHVsZSEgUGxlYXNlIGNoZWNrIHRoZSBvYmplY3QgeW91IGFyZSBwYXNzaW5nIHRvIGkxOG5leHQudXNlKCknKTtcblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnYmFja2VuZCcpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmJhY2tlbmQgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2xvZ2dlcicgfHwgbW9kdWxlLmxvZyAmJiBtb2R1bGUud2FybiAmJiBtb2R1bGUuZXJyb3IpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmxvZ2dlciA9IG1vZHVsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnbGFuZ3VhZ2VEZXRlY3RvcicpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmxhbmd1YWdlRGV0ZWN0b3IgPSBtb2R1bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2R1bGUudHlwZSA9PT0gJ2kxOG5Gb3JtYXQnKSB7XG4gICAgICAgIHRoaXMubW9kdWxlcy5pMThuRm9ybWF0ID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICdwb3N0UHJvY2Vzc29yJykge1xuICAgICAgICBwb3N0UHJvY2Vzc29yLmFkZFBvc3RQcm9jZXNzb3IobW9kdWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1vZHVsZS50eXBlID09PSAnZm9ybWF0dGVyJykge1xuICAgICAgICB0aGlzLm1vZHVsZXMuZm9ybWF0dGVyID0gbW9kdWxlO1xuICAgICAgfVxuXG4gICAgICBpZiAobW9kdWxlLnR5cGUgPT09ICczcmRQYXJ0eScpIHtcbiAgICAgICAgdGhpcy5tb2R1bGVzLmV4dGVybmFsLnB1c2gobW9kdWxlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInNldFJlc29sdmVkTGFuZ3VhZ2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gc2V0UmVzb2x2ZWRMYW5ndWFnZShsKSB7XG4gICAgICBpZiAoIWwgfHwgIXRoaXMubGFuZ3VhZ2VzKSByZXR1cm47XG4gICAgICBpZiAoWydjaW1vZGUnLCAnZGV2J10uaW5kZXhPZihsKSA+IC0xKSByZXR1cm47XG5cbiAgICAgIGZvciAodmFyIGxpID0gMDsgbGkgPCB0aGlzLmxhbmd1YWdlcy5sZW5ndGg7IGxpKyspIHtcbiAgICAgICAgdmFyIGxuZ0luTG5ncyA9IHRoaXMubGFuZ3VhZ2VzW2xpXTtcbiAgICAgICAgaWYgKFsnY2ltb2RlJywgJ2RldiddLmluZGV4T2YobG5nSW5MbmdzKSA+IC0xKSBjb250aW51ZTtcblxuICAgICAgICBpZiAodGhpcy5zdG9yZS5oYXNMYW5ndWFnZVNvbWVUcmFuc2xhdGlvbnMobG5nSW5MbmdzKSkge1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRMYW5ndWFnZSA9IGxuZ0luTG5ncztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjaGFuZ2VMYW5ndWFnZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFuZ2VMYW5ndWFnZShsbmcsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdGhpcy5pc0xhbmd1YWdlQ2hhbmdpbmdUbyA9IGxuZztcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICB0aGlzLmVtaXQoJ2xhbmd1YWdlQ2hhbmdpbmcnLCBsbmcpO1xuXG4gICAgICB2YXIgc2V0TG5nUHJvcHMgPSBmdW5jdGlvbiBzZXRMbmdQcm9wcyhsKSB7XG4gICAgICAgIF90aGlzNC5sYW5ndWFnZSA9IGw7XG4gICAgICAgIF90aGlzNC5sYW5ndWFnZXMgPSBfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VVdGlscy50b1Jlc29sdmVIaWVyYXJjaHkobCk7XG4gICAgICAgIF90aGlzNC5yZXNvbHZlZExhbmd1YWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIF90aGlzNC5zZXRSZXNvbHZlZExhbmd1YWdlKGwpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGRvbmUgPSBmdW5jdGlvbiBkb25lKGVyciwgbCkge1xuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIHNldExuZ1Byb3BzKGwpO1xuXG4gICAgICAgICAgX3RoaXM0LnRyYW5zbGF0b3IuY2hhbmdlTGFuZ3VhZ2UobCk7XG5cbiAgICAgICAgICBfdGhpczQuaXNMYW5ndWFnZUNoYW5naW5nVG8gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBfdGhpczQuZW1pdCgnbGFuZ3VhZ2VDaGFuZ2VkJywgbCk7XG5cbiAgICAgICAgICBfdGhpczQubG9nZ2VyLmxvZygnbGFuZ3VhZ2VDaGFuZ2VkJywgbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXM0LmlzTGFuZ3VhZ2VDaGFuZ2luZ1RvID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmZXJyZWQucmVzb2x2ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC50LmFwcGx5KF90aGlzNCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzNC50LmFwcGx5KF90aGlzNCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgc2V0TG5nID0gZnVuY3Rpb24gc2V0TG5nKGxuZ3MpIHtcbiAgICAgICAgaWYgKCFsbmcgJiYgIWxuZ3MgJiYgX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IpIGxuZ3MgPSBbXTtcbiAgICAgICAgdmFyIGwgPSB0eXBlb2YgbG5ncyA9PT0gJ3N0cmluZycgPyBsbmdzIDogX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0QmVzdE1hdGNoRnJvbUNvZGVzKGxuZ3MpO1xuXG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgaWYgKCFfdGhpczQubGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHNldExuZ1Byb3BzKGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghX3RoaXM0LnRyYW5zbGF0b3IubGFuZ3VhZ2UpIF90aGlzNC50cmFuc2xhdG9yLmNoYW5nZUxhbmd1YWdlKGwpO1xuICAgICAgICAgIGlmIChfdGhpczQuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvcikgX3RoaXM0LnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuY2FjaGVVc2VyTGFuZ3VhZ2UobCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpczQubG9hZFJlc291cmNlcyhsLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgZG9uZShlcnIsIGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiAhdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmFzeW5jKSB7XG4gICAgICAgIHNldExuZyh0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuZGV0ZWN0KCkpO1xuICAgICAgfSBlbHNlIGlmICghbG5nICYmIHRoaXMuc2VydmljZXMubGFuZ3VhZ2VEZXRlY3RvciAmJiB0aGlzLnNlcnZpY2VzLmxhbmd1YWdlRGV0ZWN0b3IuYXN5bmMpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlcy5sYW5ndWFnZURldGVjdG9yLmRldGVjdChzZXRMbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0TG5nKGxuZyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZlcnJlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZ2V0Rml4ZWRUXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGdldEZpeGVkVChsbmcsIG5zLCBrZXlQcmVmaXgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgZml4ZWRUID0gZnVuY3Rpb24gZml4ZWRUKGtleSwgb3B0cykge1xuICAgICAgICB2YXIgb3B0aW9ucztcblxuICAgICAgICBpZiAoX3R5cGVvZihvcHRzKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgICAgICAgcmVzdFtfa2V5MyAtIDJdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zID0gX3RoaXM1Lm9wdGlvbnMub3ZlcmxvYWRUcmFuc2xhdGlvbk9wdGlvbkhhbmRsZXIoW2tleSwgb3B0c10uY29uY2F0KHJlc3QpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KHt9LCBvcHRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMubG5nID0gb3B0aW9ucy5sbmcgfHwgZml4ZWRULmxuZztcbiAgICAgICAgb3B0aW9ucy5sbmdzID0gb3B0aW9ucy5sbmdzIHx8IGZpeGVkVC5sbmdzO1xuICAgICAgICBvcHRpb25zLm5zID0gb3B0aW9ucy5ucyB8fCBmaXhlZFQubnM7XG4gICAgICAgIG9wdGlvbnMua2V5UHJlZml4ID0gb3B0aW9ucy5rZXlQcmVmaXggfHwga2V5UHJlZml4IHx8IGZpeGVkVC5rZXlQcmVmaXg7XG4gICAgICAgIHZhciBrZXlTZXBhcmF0b3IgPSBfdGhpczUub3B0aW9ucy5rZXlTZXBhcmF0b3IgfHwgJy4nO1xuICAgICAgICB2YXIgcmVzdWx0S2V5ID0gb3B0aW9ucy5rZXlQcmVmaXggPyBcIlwiLmNvbmNhdChvcHRpb25zLmtleVByZWZpeCkuY29uY2F0KGtleVNlcGFyYXRvcikuY29uY2F0KGtleSkgOiBrZXk7XG4gICAgICAgIHJldHVybiBfdGhpczUudChyZXN1bHRLZXksIG9wdGlvbnMpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVvZiBsbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZpeGVkVC5sbmcgPSBsbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaXhlZFQubG5ncyA9IGxuZztcbiAgICAgIH1cblxuICAgICAgZml4ZWRULm5zID0gbnM7XG4gICAgICBmaXhlZFQua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICAgICAgcmV0dXJuIGZpeGVkVDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiB0KCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3I7XG5cbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0b3IgJiYgKF90aGlzJHRyYW5zbGF0b3IgPSB0aGlzLnRyYW5zbGF0b3IpLnRyYW5zbGF0ZS5hcHBseShfdGhpcyR0cmFuc2xhdG9yLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJleGlzdHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZXhpc3RzKCkge1xuICAgICAgdmFyIF90aGlzJHRyYW5zbGF0b3IyO1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdG9yICYmIChfdGhpcyR0cmFuc2xhdG9yMiA9IHRoaXMudHJhbnNsYXRvcikuZXhpc3RzLmFwcGx5KF90aGlzJHRyYW5zbGF0b3IyLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJzZXREZWZhdWx0TmFtZXNwYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHNldERlZmF1bHROYW1lc3BhY2UobnMpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kZWZhdWx0TlMgPSBucztcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiaGFzTG9hZGVkTmFtZXNwYWNlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0xvYWRlZE5hbWVzcGFjZShucykge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybignaGFzTG9hZGVkTmFtZXNwYWNlOiBpMThuZXh0IHdhcyBub3QgaW5pdGlhbGl6ZWQnLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmxhbmd1YWdlcyB8fCAhdGhpcy5sYW5ndWFnZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ2hhc0xvYWRlZE5hbWVzcGFjZTogaTE4bi5sYW5ndWFnZXMgd2VyZSB1bmRlZmluZWQgb3IgZW1wdHknLCB0aGlzLmxhbmd1YWdlcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxuZyA9IHRoaXMucmVzb2x2ZWRMYW5ndWFnZSB8fCB0aGlzLmxhbmd1YWdlc1swXTtcbiAgICAgIHZhciBmYWxsYmFja0xuZyA9IHRoaXMub3B0aW9ucyA/IHRoaXMub3B0aW9ucy5mYWxsYmFja0xuZyA6IGZhbHNlO1xuICAgICAgdmFyIGxhc3RMbmcgPSB0aGlzLmxhbmd1YWdlc1t0aGlzLmxhbmd1YWdlcy5sZW5ndGggLSAxXTtcbiAgICAgIGlmIChsbmcudG9Mb3dlckNhc2UoKSA9PT0gJ2NpbW9kZScpIHJldHVybiB0cnVlO1xuXG4gICAgICB2YXIgbG9hZE5vdFBlbmRpbmcgPSBmdW5jdGlvbiBsb2FkTm90UGVuZGluZyhsLCBuKSB7XG4gICAgICAgIHZhciBsb2FkU3RhdGUgPSBfdGhpczYuc2VydmljZXMuYmFja2VuZENvbm5lY3Rvci5zdGF0ZVtcIlwiLmNvbmNhdChsLCBcInxcIikuY29uY2F0KG4pXTtcblxuICAgICAgICByZXR1cm4gbG9hZFN0YXRlID09PSAtMSB8fCBsb2FkU3RhdGUgPT09IDI7XG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucy5wcmVjaGVjaykge1xuICAgICAgICB2YXIgcHJlUmVzdWx0ID0gb3B0aW9ucy5wcmVjaGVjayh0aGlzLCBsb2FkTm90UGVuZGluZyk7XG4gICAgICAgIGlmIChwcmVSZXN1bHQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHByZVJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaGFzUmVzb3VyY2VCdW5kbGUobG5nLCBucykpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKCF0aGlzLnNlcnZpY2VzLmJhY2tlbmRDb25uZWN0b3IuYmFja2VuZCB8fCB0aGlzLm9wdGlvbnMucmVzb3VyY2VzICYmICF0aGlzLm9wdGlvbnMucGFydGlhbEJ1bmRsZWRMYW5ndWFnZXMpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKGxvYWROb3RQZW5kaW5nKGxuZywgbnMpICYmICghZmFsbGJhY2tMbmcgfHwgbG9hZE5vdFBlbmRpbmcobGFzdExuZywgbnMpKSkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImxvYWROYW1lc3BhY2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWROYW1lc3BhY2VzKG5zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG5cbiAgICAgIGlmICghdGhpcy5vcHRpb25zLm5zKSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBucyA9PT0gJ3N0cmluZycpIG5zID0gW25zXTtcbiAgICAgIG5zLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgaWYgKF90aGlzNy5vcHRpb25zLm5zLmluZGV4T2YobikgPCAwKSBfdGhpczcub3B0aW9ucy5ucy5wdXNoKG4pO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJsb2FkTGFuZ3VhZ2VzXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRMYW5ndWFnZXMobG5ncywgY2FsbGJhY2spIHtcbiAgICAgIHZhciBkZWZlcnJlZCA9IGRlZmVyKCk7XG4gICAgICBpZiAodHlwZW9mIGxuZ3MgPT09ICdzdHJpbmcnKSBsbmdzID0gW2xuZ3NdO1xuICAgICAgdmFyIHByZWxvYWRlZCA9IHRoaXMub3B0aW9ucy5wcmVsb2FkIHx8IFtdO1xuICAgICAgdmFyIG5ld0xuZ3MgPSBsbmdzLmZpbHRlcihmdW5jdGlvbiAobG5nKSB7XG4gICAgICAgIHJldHVybiBwcmVsb2FkZWQuaW5kZXhPZihsbmcpIDwgMDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5ld0xuZ3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvbnMucHJlbG9hZCA9IHByZWxvYWRlZC5jb25jYXQobmV3TG5ncyk7XG4gICAgICB0aGlzLmxvYWRSZXNvdXJjZXMoZnVuY3Rpb24gKGVycikge1xuICAgICAgICBkZWZlcnJlZC5yZXNvbHZlKCk7XG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlZmVycmVkO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkaXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGlyKGxuZykge1xuICAgICAgaWYgKCFsbmcpIGxuZyA9IHRoaXMucmVzb2x2ZWRMYW5ndWFnZSB8fCAodGhpcy5sYW5ndWFnZXMgJiYgdGhpcy5sYW5ndWFnZXMubGVuZ3RoID4gMCA/IHRoaXMubGFuZ3VhZ2VzWzBdIDogdGhpcy5sYW5ndWFnZSk7XG4gICAgICBpZiAoIWxuZykgcmV0dXJuICdydGwnO1xuICAgICAgdmFyIHJ0bExuZ3MgPSBbJ2FyJywgJ3NodScsICdzcXInLCAnc3NoJywgJ3hhYScsICd5aGQnLCAneXVkJywgJ2FhbycsICdhYmgnLCAnYWJ2JywgJ2FjbScsICdhY3EnLCAnYWN3JywgJ2FjeCcsICdhY3knLCAnYWRmJywgJ2FkcycsICdhZWInLCAnYWVjJywgJ2FmYicsICdhanAnLCAnYXBjJywgJ2FwZCcsICdhcmInLCAnYXJxJywgJ2FycycsICdhcnknLCAnYXJ6JywgJ2F1eicsICdhdmwnLCAnYXloJywgJ2F5bCcsICdheW4nLCAnYXlwJywgJ2JieicsICdwZ2EnLCAnaGUnLCAnaXcnLCAncHMnLCAncGJ0JywgJ3BidScsICdwc3QnLCAncHJwJywgJ3ByZCcsICd1ZycsICd1cicsICd5ZGQnLCAneWRzJywgJ3lpaCcsICdqaScsICd5aScsICdoYm8nLCAnbWVuJywgJ3htbicsICdmYScsICdqcHInLCAncGVvJywgJ3BlcycsICdwcnMnLCAnZHYnLCAnc2FtJywgJ2NrYiddO1xuICAgICAgcmV0dXJuIHJ0bExuZ3MuaW5kZXhPZih0aGlzLnNlcnZpY2VzLmxhbmd1YWdlVXRpbHMuZ2V0TGFuZ3VhZ2VQYXJ0RnJvbUNvZGUobG5nKSkgPiAtMSB8fCBsbmcudG9Mb3dlckNhc2UoKS5pbmRleE9mKCctYXJhYicpID4gMSA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImNsb25lSW5zdGFuY2VcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY2xvbmVJbnN0YW5jZSgpIHtcbiAgICAgIHZhciBfdGhpczggPSB0aGlzO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IG5vb3A7XG5cbiAgICAgIHZhciBtZXJnZWRPcHRpb25zID0gX29iamVjdFNwcmVhZCQ2KF9vYmplY3RTcHJlYWQkNihfb2JqZWN0U3ByZWFkJDYoe30sIHRoaXMub3B0aW9ucyksIG9wdGlvbnMpLCB7XG4gICAgICAgIGlzQ2xvbmU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY2xvbmUgPSBuZXcgSTE4bihtZXJnZWRPcHRpb25zKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZGVidWcgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLnByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsb25lLmxvZ2dlciA9IGNsb25lLmxvZ2dlci5jbG9uZShvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1lbWJlcnNUb0NvcHkgPSBbJ3N0b3JlJywgJ3NlcnZpY2VzJywgJ2xhbmd1YWdlJ107XG4gICAgICBtZW1iZXJzVG9Db3B5LmZvckVhY2goZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgY2xvbmVbbV0gPSBfdGhpczhbbV07XG4gICAgICB9KTtcbiAgICAgIGNsb25lLnNlcnZpY2VzID0gX29iamVjdFNwcmVhZCQ2KHt9LCB0aGlzLnNlcnZpY2VzKTtcbiAgICAgIGNsb25lLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIGNsb25lLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRvcihjbG9uZS5zZXJ2aWNlcywgY2xvbmUub3B0aW9ucyk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9uKCcqJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCA+IDEgPyBfbGVuNCAtIDEgOiAwKSwgX2tleTQgPSAxOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgICAgYXJnc1tfa2V5NCAtIDFdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb25lLmVtaXQuYXBwbHkoY2xvbmUsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH0pO1xuICAgICAgY2xvbmUuaW5pdChtZXJnZWRPcHRpb25zLCBjYWxsYmFjayk7XG4gICAgICBjbG9uZS50cmFuc2xhdG9yLm9wdGlvbnMgPSBjbG9uZS5vcHRpb25zO1xuICAgICAgY2xvbmUudHJhbnNsYXRvci5iYWNrZW5kQ29ubmVjdG9yLnNlcnZpY2VzLnV0aWxzID0ge1xuICAgICAgICBoYXNMb2FkZWROYW1lc3BhY2U6IGNsb25lLmhhc0xvYWRlZE5hbWVzcGFjZS5iaW5kKGNsb25lKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBjbG9uZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwidG9KU09OXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMub3B0aW9ucyxcbiAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gICAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlLFxuICAgICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgICByZXNvbHZlZExhbmd1YWdlOiB0aGlzLnJlc29sdmVkTGFuZ3VhZ2VcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIEkxOG47XG59KEV2ZW50RW1pdHRlcik7XG5cbl9kZWZpbmVQcm9wZXJ0eShJMThuLCBcImNyZWF0ZUluc3RhbmNlXCIsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG5ldyBJMThuKG9wdGlvbnMsIGNhbGxiYWNrKTtcbn0pO1xuXG52YXIgaW5zdGFuY2UgPSBJMThuLmNyZWF0ZUluc3RhbmNlKCk7XG5pbnN0YW5jZS5jcmVhdGVJbnN0YW5jZSA9IEkxOG4uY3JlYXRlSW5zdGFuY2U7XG5cbnZhciBjcmVhdGVJbnN0YW5jZSA9IGluc3RhbmNlLmNyZWF0ZUluc3RhbmNlO1xudmFyIGluaXQgPSBpbnN0YW5jZS5pbml0O1xudmFyIGxvYWRSZXNvdXJjZXMgPSBpbnN0YW5jZS5sb2FkUmVzb3VyY2VzO1xudmFyIHJlbG9hZFJlc291cmNlcyA9IGluc3RhbmNlLnJlbG9hZFJlc291cmNlcztcbnZhciB1c2UgPSBpbnN0YW5jZS51c2U7XG52YXIgY2hhbmdlTGFuZ3VhZ2UgPSBpbnN0YW5jZS5jaGFuZ2VMYW5ndWFnZTtcbnZhciBnZXRGaXhlZFQgPSBpbnN0YW5jZS5nZXRGaXhlZFQ7XG52YXIgdCA9IGluc3RhbmNlLnQ7XG52YXIgZXhpc3RzID0gaW5zdGFuY2UuZXhpc3RzO1xudmFyIHNldERlZmF1bHROYW1lc3BhY2UgPSBpbnN0YW5jZS5zZXREZWZhdWx0TmFtZXNwYWNlO1xudmFyIGhhc0xvYWRlZE5hbWVzcGFjZSA9IGluc3RhbmNlLmhhc0xvYWRlZE5hbWVzcGFjZTtcbnZhciBsb2FkTmFtZXNwYWNlcyA9IGluc3RhbmNlLmxvYWROYW1lc3BhY2VzO1xudmFyIGxvYWRMYW5ndWFnZXMgPSBpbnN0YW5jZS5sb2FkTGFuZ3VhZ2VzO1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0YW5jZTtcbmV4cG9ydCB7IGNoYW5nZUxhbmd1YWdlLCBjcmVhdGVJbnN0YW5jZSwgZXhpc3RzLCBnZXRGaXhlZFQsIGhhc0xvYWRlZE5hbWVzcGFjZSwgaW5pdCwgbG9hZExhbmd1YWdlcywgbG9hZE5hbWVzcGFjZXMsIGxvYWRSZXNvdXJjZXMsIHJlbG9hZFJlc291cmNlcywgc2V0RGVmYXVsdE5hbWVzcGFjZSwgdCwgdXNlIH07XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIl9jbGFzc0NhbGxDaGVjayIsIl9jcmVhdGVDbGFzcyIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHMiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9nZXRQcm90b3R5cGVPZiIsIl9kZWZpbmVQcm9wZXJ0eSIsIl90b0FycmF5Iiwib3duS2V5cyIsIm9iamVjdCIsImVudW1lcmFibGVPbmx5Iiwia2V5cyIsIk9iamVjdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsInN5bWJvbHMiLCJmaWx0ZXIiLCJzeW0iLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJmb3JFYWNoIiwia2V5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbnNvbGVMb2dnZXIiLCJ0eXBlIiwibG9nIiwiYXJncyIsIm91dHB1dCIsIndhcm4iLCJlcnJvciIsImNvbnNvbGUiLCJMb2dnZXIiLCJjb25jcmV0ZUxvZ2dlciIsIm9wdGlvbnMiLCJ1bmRlZmluZWQiLCJpbml0IiwidmFsdWUiLCJwcmVmaXgiLCJsb2dnZXIiLCJkZWJ1ZyIsInNldERlYnVnIiwiYm9vbCIsIl9sZW4iLCJBcnJheSIsIl9rZXkiLCJmb3J3YXJkIiwiX2xlbjIiLCJfa2V5MiIsIl9sZW4zIiwiX2tleTMiLCJkZXByZWNhdGUiLCJfbGVuNCIsIl9rZXk0IiwibHZsIiwiZGVidWdPbmx5IiwiY29uY2F0IiwiY3JlYXRlIiwibW9kdWxlTmFtZSIsImNsb25lIiwiYmFzZUxvZ2dlciIsIkV2ZW50RW1pdHRlciIsIm9ic2VydmVycyIsIm9uIiwiZXZlbnRzIiwibGlzdGVuZXIiLCJfdGhpcyIsInNwbGl0IiwiZXZlbnQiLCJvZmYiLCJsIiwiZW1pdCIsImNsb25lZCIsIm9ic2VydmVyIiwiX2Nsb25lZCIsImRlZmVyIiwicmVzIiwicmVqIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwibWFrZVN0cmluZyIsImNvcHkiLCJhIiwicyIsInQiLCJtIiwiZ2V0TGFzdE9mUGF0aCIsInBhdGgiLCJFbXB0eSIsImNsZWFuS2V5IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJjYW5Ob3RUcmF2ZXJzZURlZXBlciIsInN0YWNrIiwic2hpZnQiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvYmoiLCJrIiwic2V0UGF0aCIsIm5ld1ZhbHVlIiwiX2dldExhc3RPZlBhdGgiLCJwdXNoUGF0aCIsIl9nZXRMYXN0T2ZQYXRoMiIsImdldFBhdGgiLCJfZ2V0TGFzdE9mUGF0aDMiLCJnZXRQYXRoV2l0aERlZmF1bHRzIiwiZGF0YSIsImRlZmF1bHREYXRhIiwiZGVlcEV4dGVuZCIsIm92ZXJ3cml0ZSIsInByb3AiLCJTdHJpbmciLCJyZWdleEVzY2FwZSIsInN0ciIsIl9lbnRpdHlNYXAiLCJlc2NhcGUiLCJpc0lFMTAiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnREYXRhIiwidXNlckFnZW50IiwiY2hhcnMiLCJsb29rc0xpa2VPYmplY3RQYXRoIiwibnNTZXBhcmF0b3IiLCJrZXlTZXBhcmF0b3IiLCJwb3NzaWJsZUNoYXJzIiwiYyIsInIiLCJSZWdFeHAiLCJtYXAiLCJqb2luIiwibWF0Y2hlZCIsInRlc3QiLCJraSIsInN1YnN0cmluZyIsIm93bktleXMkMSIsIl9vYmplY3RTcHJlYWQkMSIsIl9jcmVhdGVTdXBlciIsIkRlcml2ZWQiLCJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIl9jcmVhdGVTdXBlckludGVybmFsIiwiU3VwZXIiLCJyZXN1bHQiLCJOZXdUYXJnZXQiLCJjb25zdHJ1Y3RvciIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJzaGFtIiwiUHJveHkiLCJCb29sZWFuIiwidmFsdWVPZiIsImUiLCJkZWVwRmluZCIsInBhdGhzIiwiY3VycmVudCIsImoiLCJwIiwic2xpY2UiLCJtaXgiLCJlbmRzV2l0aCIsImpvaW5lZFBhdGgiLCJSZXNvdXJjZVN0b3JlIiwiX0V2ZW50RW1pdHRlciIsIl9zdXBlciIsIm5zIiwiZGVmYXVsdE5TIiwiaWdub3JlSlNPTlN0cnVjdHVyZSIsImFkZE5hbWVzcGFjZXMiLCJyZW1vdmVOYW1lc3BhY2VzIiwiaW5kZXgiLCJzcGxpY2UiLCJnZXRSZXNvdXJjZSIsImxuZyIsImFkZFJlc291cmNlIiwic2lsZW50IiwiYWRkUmVzb3VyY2VzIiwicmVzb3VyY2VzIiwidG9TdHJpbmciLCJhZGRSZXNvdXJjZUJ1bmRsZSIsImRlZXAiLCJwYWNrIiwicmVtb3ZlUmVzb3VyY2VCdW5kbGUiLCJoYXNSZXNvdXJjZUJ1bmRsZSIsImdldFJlc291cmNlQnVuZGxlIiwiY29tcGF0aWJpbGl0eUFQSSIsImdldERhdGFCeUxhbmd1YWdlIiwiaGFzTGFuZ3VhZ2VTb21lVHJhbnNsYXRpb25zIiwibiIsImZpbmQiLCJ2IiwidG9KU09OIiwicG9zdFByb2Nlc3NvciIsInByb2Nlc3NvcnMiLCJhZGRQb3N0UHJvY2Vzc29yIiwibW9kdWxlIiwibmFtZSIsImhhbmRsZSIsInRyYW5zbGF0b3IiLCJwcm9jZXNzb3IiLCJwcm9jZXNzIiwib3duS2V5cyQyIiwiX29iamVjdFNwcmVhZCQyIiwiX2NyZWF0ZVN1cGVyJDEiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDEiLCJjaGVja2VkTG9hZGVkRm9yIiwiVHJhbnNsYXRvciIsInNlcnZpY2VzIiwiY2hhbmdlTGFuZ3VhZ2UiLCJsYW5ndWFnZSIsImV4aXN0cyIsImludGVycG9sYXRpb24iLCJyZXNvbHZlZCIsImV4dHJhY3RGcm9tS2V5IiwibmFtZXNwYWNlcyIsIndvdWxkQ2hlY2tGb3JOc0luS2V5Iiwic2VlbXNOYXR1cmFsTGFuZ3VhZ2UiLCJ1c2VyRGVmaW5lZEtleVNlcGFyYXRvciIsInVzZXJEZWZpbmVkTnNTZXBhcmF0b3IiLCJtYXRjaCIsImludGVycG9sYXRvciIsIm5lc3RpbmdSZWdleHAiLCJwYXJ0cyIsInRyYW5zbGF0ZSIsImxhc3RLZXkiLCJfdGhpczIiLCJvdmVybG9hZFRyYW5zbGF0aW9uT3B0aW9uSGFuZGxlciIsImlzQXJyYXkiLCJyZXR1cm5EZXRhaWxzIiwiX3RoaXMkZXh0cmFjdEZyb21LZXkiLCJuYW1lc3BhY2UiLCJhcHBlbmROYW1lc3BhY2VUb0NJTW9kZSIsInRvTG93ZXJDYXNlIiwicmVzVXNlZEtleSIsInVzZWRLZXkiLCJyZXNFeGFjdFVzZWRLZXkiLCJleGFjdFVzZWRLZXkiLCJyZXNUeXBlIiwibm9PYmplY3QiLCJqb2luQXJyYXlzIiwiaGFuZGxlQXNPYmplY3RJbkkxOG5Gb3JtYXQiLCJpMThuRm9ybWF0IiwiaGFuZGxlQXNPYmplY3QiLCJyZXR1cm5PYmplY3RzIiwicmV0dXJuZWRPYmplY3RIYW5kbGVyIiwicmVzVHlwZUlzQXJyYXkiLCJuZXdLZXlUb1VzZSIsImRlZXBLZXkiLCJleHRlbmRUcmFuc2xhdGlvbiIsInVzZWREZWZhdWx0IiwibmVlZHNQbHVyYWxIYW5kbGluZyIsImNvdW50IiwiaGFzRGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZhbHVlU3VmZml4IiwicGx1cmFsUmVzb2x2ZXIiLCJnZXRTdWZmaXgiLCJkZWZhdWx0VmFsdWUiLCJpc1ZhbGlkTG9va3VwIiwibWlzc2luZ0tleU5vVmFsdWVGYWxsYmFja1RvS2V5IiwicmVzRm9yTWlzc2luZyIsInVwZGF0ZU1pc3NpbmciLCJmayIsImxuZ3MiLCJmYWxsYmFja0xuZ3MiLCJsYW5ndWFnZVV0aWxzIiwiZ2V0RmFsbGJhY2tDb2RlcyIsImZhbGxiYWNrTG5nIiwic2F2ZU1pc3NpbmdUbyIsInRvUmVzb2x2ZUhpZXJhcmNoeSIsInNlbmQiLCJzcGVjaWZpY0RlZmF1bHRWYWx1ZSIsImRlZmF1bHRGb3JNaXNzaW5nIiwibWlzc2luZ0tleUhhbmRsZXIiLCJiYWNrZW5kQ29ubmVjdG9yIiwic2F2ZU1pc3NpbmciLCJzYXZlTWlzc2luZ1BsdXJhbHMiLCJnZXRTdWZmaXhlcyIsInN1ZmZpeCIsImFwcGVuZE5hbWVzcGFjZVRvTWlzc2luZ0tleSIsInBhcnNlTWlzc2luZ0tleUhhbmRsZXIiLCJfdGhpczMiLCJwYXJzZSIsImRlZmF1bHRWYXJpYWJsZXMiLCJ1c2VkTG5nIiwidXNlZE5TIiwic2tpcEludGVycG9sYXRpb24iLCJza2lwT25WYXJpYWJsZXMiLCJuZXN0QmVmIiwibmIiLCJpbnRlcnBvbGF0ZSIsIm5hIiwibmVzdEFmdCIsIm5lc3QiLCJjb250ZXh0IiwicmVzZXQiLCJwb3N0UHJvY2VzcyIsInBvc3RQcm9jZXNzb3JOYW1lcyIsImFwcGx5UG9zdFByb2Nlc3NvciIsInBvc3RQcm9jZXNzUGFzc1Jlc29sdmVkIiwiaTE4blJlc29sdmVkIiwiX3RoaXM0IiwiZm91bmQiLCJleHRyYWN0ZWQiLCJmYWxsYmFja05TIiwibmVlZHNaZXJvU3VmZml4TG9va3VwIiwib3JkaW5hbCIsInNob3VsZFVzZUludGxBcGkiLCJuZWVkc0NvbnRleHRIYW5kbGluZyIsImNvZGVzIiwidXRpbHMiLCJoYXNMb2FkZWROYW1lc3BhY2UiLCJjb2RlIiwiZmluYWxLZXlzIiwiYWRkTG9va3VwS2V5cyIsInBsdXJhbFN1ZmZpeCIsInplcm9TdWZmaXgiLCJwbHVyYWxTZXBhcmF0b3IiLCJjb250ZXh0S2V5IiwiY29udGV4dFNlcGFyYXRvciIsInBvc3NpYmxlS2V5IiwicG9wIiwicmV0dXJuTnVsbCIsInJldHVybkVtcHR5U3RyaW5nIiwicmVzb3VyY2VTdG9yZSIsIm9wdGlvbiIsImNhcGl0YWxpemUiLCJzdHJpbmciLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsIkxhbmd1YWdlVXRpbCIsInN1cHBvcnRlZExuZ3MiLCJnZXRTY3JpcHRQYXJ0RnJvbUNvZGUiLCJmb3JtYXRMYW5ndWFnZUNvZGUiLCJnZXRMYW5ndWFnZVBhcnRGcm9tQ29kZSIsInNwZWNpYWxDYXNlcyIsImxvd2VyQ2FzZUxuZyIsInBhcnQiLCJjbGVhbkNvZGUiLCJpc1N1cHBvcnRlZENvZGUiLCJsb2FkIiwibm9uRXhwbGljaXRTdXBwb3J0ZWRMbmdzIiwiZ2V0QmVzdE1hdGNoRnJvbUNvZGVzIiwiY2xlYW5lZExuZyIsImxuZ09ubHkiLCJzdXBwb3J0ZWRMbmciLCJmYWxsYmFja3MiLCJmYWxsYmFja0NvZGUiLCJmYWxsYmFja0NvZGVzIiwiYWRkQ29kZSIsImZjIiwic2V0cyIsIm5yIiwiX3J1bGVzUGx1cmFsc1R5cGVzIiwiXyIsIk51bWJlciIsImRlcHJlY2F0ZWRKc29uVmVyc2lvbnMiLCJzdWZmaXhlc09yZGVyIiwiemVybyIsIm9uZSIsInR3byIsImZldyIsIm1hbnkiLCJvdGhlciIsImNyZWF0ZVJ1bGVzIiwicnVsZXMiLCJzZXQiLCJudW1iZXJzIiwicGx1cmFscyIsIlBsdXJhbFJlc29sdmVyIiwiY29tcGF0aWJpbGl0eUpTT04iLCJJbnRsIiwiUGx1cmFsUnVsZXMiLCJhZGRSdWxlIiwiZ2V0UnVsZSIsIl91bnVzZWQiLCJuZWVkc1BsdXJhbCIsInJ1bGUiLCJyZXNvbHZlZE9wdGlvbnMiLCJwbHVyYWxDYXRlZ29yaWVzIiwiZ2V0UGx1cmFsRm9ybXNPZktleSIsInNvcnQiLCJwbHVyYWxDYXRlZ29yeTEiLCJwbHVyYWxDYXRlZ29yeTIiLCJwbHVyYWxDYXRlZ29yeSIsInByZXBlbmQiLCJudW1iZXIiLCJzZWxlY3QiLCJnZXRTdWZmaXhSZXRyb0NvbXBhdGlibGUiLCJpZHgiLCJub0FicyIsIk1hdGgiLCJhYnMiLCJzaW1wbGlmeVBsdXJhbFN1ZmZpeCIsInJldHVyblN1ZmZpeCIsImluY2x1ZGVzIiwib3duS2V5cyQzIiwiX29iamVjdFNwcmVhZCQzIiwiSW50ZXJwb2xhdG9yIiwiZm9ybWF0IiwiZXNjYXBlVmFsdWUiLCJpT3B0cyIsInVzZVJhd1ZhbHVlVG9Fc2NhcGUiLCJwcmVmaXhFc2NhcGVkIiwic3VmZml4RXNjYXBlZCIsImZvcm1hdFNlcGFyYXRvciIsInVuZXNjYXBlUHJlZml4IiwidW5lc2NhcGVTdWZmaXgiLCJuZXN0aW5nUHJlZml4IiwibmVzdGluZ1ByZWZpeEVzY2FwZWQiLCJuZXN0aW5nU3VmZml4IiwibmVzdGluZ1N1ZmZpeEVzY2FwZWQiLCJuZXN0aW5nT3B0aW9uc1NlcGFyYXRvciIsIm1heFJlcGxhY2VzIiwiYWx3YXlzRm9ybWF0IiwicmVzZXRSZWdFeHAiLCJyZWdleHBTdHIiLCJyZWdleHAiLCJyZWdleHBVbmVzY2FwZVN0ciIsInJlZ2V4cFVuZXNjYXBlIiwibmVzdGluZ1JlZ2V4cFN0ciIsInJlZ2V4U2FmZSIsInZhbCIsInJlcGxhY2VzIiwiaGFuZGxlRm9ybWF0IiwiaW50ZXJwb2xhdGlvbmtleSIsInRyaW0iLCJmIiwibWlzc2luZ0ludGVycG9sYXRpb25IYW5kbGVyIiwidG9kb3MiLCJyZWdleCIsInNhZmVWYWx1ZSIsInRvZG8iLCJleGVjIiwibWF0Y2hlZFZhciIsInRlbXAiLCJsYXN0SW5kZXgiLCJoYW5kbGVIYXNPcHRpb25zIiwiaW5oZXJpdGVkT3B0aW9ucyIsInNlcCIsIm9wdGlvbnNTdHJpbmciLCJjbG9uZWRPcHRpb25zIiwibWF0Y2hlZFNpbmdsZVF1b3RlcyIsIm1hdGNoZWREb3VibGVRdW90ZXMiLCJKU09OIiwiZm9ybWF0dGVycyIsImRvUmVkdWNlIiwiZWxlbSIsInJlZHVjZSIsIm93bktleXMkNCIsIl9vYmplY3RTcHJlYWQkNCIsInBhcnNlRm9ybWF0U3RyIiwiZm9ybWF0U3RyIiwiZm9ybWF0TmFtZSIsImZvcm1hdE9wdGlvbnMiLCJvcHRTdHIiLCJjdXJyZW5jeSIsInJhbmdlIiwib3B0cyIsIm9wdCIsIl9vcHQkc3BsaXQiLCJfb3B0JHNwbGl0MiIsInJlc3QiLCJpc05hTiIsInBhcnNlSW50IiwiY3JlYXRlQ2FjaGVkRm9ybWF0dGVyIiwiZm4iLCJjYWNoZSIsImludm9rZUZvcm1hdHRlciIsInN0cmluZ2lmeSIsImZvcm1hdHRlciIsIkZvcm1hdHRlciIsImZvcm1hdHMiLCJOdW1iZXJGb3JtYXQiLCJzdHlsZSIsImRhdGV0aW1lIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZWxhdGl2ZXRpbWUiLCJSZWxhdGl2ZVRpbWVGb3JtYXQiLCJsaXN0IiwiTGlzdEZvcm1hdCIsImFkZCIsImFkZENhY2hlZCIsIl9mb3JtYXQiLCJtZW0iLCJfcGFyc2VGb3JtYXRTdHIiLCJmb3JtYXR0ZWQiLCJ2YWxPcHRpb25zIiwiZm9ybWF0UGFyYW1zIiwibG9jYWxlIiwib3duS2V5cyQ1IiwiX29iamVjdFNwcmVhZCQ1IiwiX2NyZWF0ZVN1cGVyJDIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0JDIiLCJyZW1vdmVQZW5kaW5nIiwicSIsInBlbmRpbmciLCJwZW5kaW5nQ291bnQiLCJDb25uZWN0b3IiLCJiYWNrZW5kIiwic3RvcmUiLCJ3YWl0aW5nUmVhZHMiLCJtYXhQYXJhbGxlbFJlYWRzIiwicmVhZGluZ0NhbGxzIiwibWF4UmV0cmllcyIsInJldHJ5VGltZW91dCIsInN0YXRlIiwicXVldWUiLCJxdWV1ZUxvYWQiLCJsYW5ndWFnZXMiLCJjYWxsYmFjayIsInRvTG9hZCIsInRvTG9hZExhbmd1YWdlcyIsInRvTG9hZE5hbWVzcGFjZXMiLCJoYXNBbGxOYW1lc3BhY2VzIiwicmVsb2FkIiwibG9hZGVkIiwiZXJyb3JzIiwiZXJyIiwiZG9uZSIsImxvYWRlZEtleXMiLCJyZWFkIiwiZmNOYW1lIiwidHJpZWQiLCJ3YWl0IiwibmV4dCIsInNldFRpbWVvdXQiLCJwcmVwYXJlTG9hZGluZyIsImxvYWRPbmUiLCJfdGhpczUiLCJmYWxsYmFja1ZhbHVlIiwiaXNVcGRhdGUiLCJnZXQiLCJpbml0SW1tZWRpYXRlIiwicHJlbG9hZCIsInBhcnRpYWxCdW5kbGVkTGFuZ3VhZ2VzIiwicmV0IiwidERlc2NyaXB0aW9uIiwidHJhbnNmb3JtT3B0aW9ucyIsIm93bktleXMkNiIsIl9vYmplY3RTcHJlYWQkNiIsIl9jcmVhdGVTdXBlciQzIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCQzIiwibm9vcCIsImJpbmRNZW1iZXJGdW5jdGlvbnMiLCJpbnN0IiwibWVtcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRQcm90b3R5cGVPZiIsImJpbmQiLCJJMThuIiwibW9kdWxlcyIsImV4dGVybmFsIiwiaXNJbml0aWFsaXplZCIsImlzQ2xvbmUiLCJjcmVhdGVDbGFzc09uRGVtYW5kIiwiQ2xhc3NPck9iamVjdCIsImRlZk9wdHMiLCJsdSIsImxhbmd1YWdlRGV0ZWN0b3IiLCJkZXRlY3Rpb24iLCJzdG9yZUFwaSIsIl90aGlzMiRzdG9yZSIsInN0b3JlQXBpQ2hhaW5lZCIsIl90aGlzMiRzdG9yZTIiLCJkZWZlcnJlZCIsImZpbmlzaCIsImluaXRpYWxpemVkU3RvcmVPbmNlIiwibG9hZFJlc291cmNlcyIsInVzZWRDYWxsYmFjayIsImFwcGVuZCIsInJlc29sdmVkTGFuZ3VhZ2UiLCJzZXRSZXNvbHZlZExhbmd1YWdlIiwicmVsb2FkUmVzb3VyY2VzIiwidXNlIiwiRXJyb3IiLCJsaSIsImxuZ0luTG5ncyIsImlzTGFuZ3VhZ2VDaGFuZ2luZ1RvIiwic2V0TG5nUHJvcHMiLCJzZXRMbmciLCJjYWNoZVVzZXJMYW5ndWFnZSIsImFzeW5jIiwiZGV0ZWN0IiwiZ2V0Rml4ZWRUIiwia2V5UHJlZml4IiwiZml4ZWRUIiwicmVzdWx0S2V5IiwiX3RoaXMkdHJhbnNsYXRvciIsIl90aGlzJHRyYW5zbGF0b3IyIiwic2V0RGVmYXVsdE5hbWVzcGFjZSIsIl90aGlzNiIsImxhc3RMbmciLCJsb2FkTm90UGVuZGluZyIsImxvYWRTdGF0ZSIsInByZWNoZWNrIiwicHJlUmVzdWx0IiwibG9hZE5hbWVzcGFjZXMiLCJfdGhpczciLCJsb2FkTGFuZ3VhZ2VzIiwicHJlbG9hZGVkIiwibmV3TG5ncyIsImRpciIsInJ0bExuZ3MiLCJjbG9uZUluc3RhbmNlIiwiX3RoaXM4IiwibWVyZ2VkT3B0aW9ucyIsIm1lbWJlcnNUb0NvcHkiLCJpbnN0YW5jZSIsImNyZWF0ZUluc3RhbmNlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../../node_modules/i18next/dist/esm/i18next.js\n");
|
|
877
|
-
|
|
878
|
-
/***/ }),
|
|
879
|
-
|
|
880
682
|
/***/ "../../../node_modules/lodash-es/_Hash.js":
|
|
881
683
|
/*!************************************************!*\
|
|
882
684
|
!*** ../../../node_modules/lodash-es/_Hash.js ***!
|
|
@@ -1789,7 +1591,6 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
1789
1591
|
/******/ switch(name) {
|
|
1790
1592
|
/******/ case "default": {
|
|
1791
1593
|
/******/ register("dayjs", "1.11.5", () => (() => (__webpack_require__(/*! ../../../node_modules/dayjs/dayjs.min.js */ "../../../node_modules/dayjs/dayjs.min.js"))), 1);
|
|
1792
|
-
/******/ register("i18next", "21.10.0", () => (() => (__webpack_require__(/*! ../../../node_modules/i18next/dist/esm/i18next.js */ "../../../node_modules/i18next/dist/esm/i18next.js"))), 1);
|
|
1793
1594
|
/******/ }
|
|
1794
1595
|
/******/ break;
|
|
1795
1596
|
/******/ }
|