@jsenv/cli 0.1.24 → 0.1.26
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/package.json +1 -1
- package/template-node-package/.jsenv/jsenv_tests_output.txt +1 -1
- package/template-node-package/eslint.config.mjs +5 -0
- package/template-node-package/package.json +4 -6
- package/template-web/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
- package/template-web/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
- package/template-web/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
- package/template-web/.jsenv/chrome@128.00/app/animals.js +11 -0
- package/template-web/.jsenv/chrome@128.00/app/counter.js +11 -0
- package/template-web/.jsenv/chrome@128.00/index.html +69 -0
- package/template-web/.jsenv/chrome@128.00/index.html@L7C5-L20C13.css +12 -0
- package/template-web/.jsenv/chrome@128.00/index.html@L9C7-L13C16.js +5 -0
- package/template-web/.jsenv/chrome@128.00/jsenv_logo.svg +140 -0
- package/template-web/.jsenv/chrome@128.00/main.css +4 -0
- package/template-web/.jsenv/chrome@128.00/main.js +35 -0
- package/template-web/.jsenv/chrome@128.00/main.js.map +11 -0
- package/template-web/.jsenv/chrome@128.00/tests/animals.test.html +52 -0
- package/template-web/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
- package/template-web/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
- package/template-web/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
- package/template-web/.jsenv/jsenv_tests_output.txt +3 -3
- package/template-web/eslint.config.mjs +6 -0
- package/template-web/package.json +5 -8
- package/template-web/src/tests/animals.test.html +1 -1
- package/template-web-components/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
- package/template-web-components/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/custom-elements-redefine/src/main.js +209 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
- package/template-web-components/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
- package/template-web-components/.jsenv/chrome@128.00/app/animals.js +11 -0
- package/template-web-components/.jsenv/chrome@128.00/app/app_custom_element.css +4 -0
- package/template-web-components/.jsenv/chrome@128.00/app/app_custom_element.js +33 -0
- package/template-web-components/.jsenv/chrome@128.00/app/app_custom_element.js.map +11 -0
- package/template-web-components/.jsenv/chrome@128.00/app/counter.js +11 -0
- package/template-web-components/.jsenv/chrome@128.00/app/custom_elements_redefine.js +9 -0
- package/template-web-components/.jsenv/chrome@128.00/app/custom_elements_redefine.js.map +11 -0
- package/template-web-components/.jsenv/chrome@128.00/index.html +69 -0
- package/template-web-components/.jsenv/chrome@128.00/index.html@L7C5-L20C13.css +12 -0
- package/template-web-components/.jsenv/chrome@128.00/index.html@L9C7-L13C16.js +5 -0
- package/template-web-components/.jsenv/chrome@128.00/jsenv_logo.svg +140 -0
- package/template-web-components/.jsenv/chrome@128.00/main.js +15 -0
- package/template-web-components/.jsenv/chrome@128.00/main.js.map +11 -0
- package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html +52 -0
- package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
- package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
- package/template-web-components/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
- package/template-web-components/.jsenv/jsenv_tests_output.txt +2 -2
- package/template-web-components/eslint.config.mjs +6 -0
- package/template-web-components/package.json +5 -8
- package/template-web-components/src/tests/animals.test.html +1 -1
- package/template-web-preact/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
- package/template-web-preact/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/computeKey.js +38 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/computeKey.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/constants.js +13 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/index.js +210 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/index.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js +17 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js +21 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/signaturesForType.js +2 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js +20 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js +62 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js +3 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/@prefresh/utils/src/index.js +43 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/debug/dist/debug.module.js +2 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/debug/dist/debug.module.js.map +175 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js +2 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js.map +29 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/dist/preact.module.js +2 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/dist/preact.module.js.map +266 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js +195 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js.map +168 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +2 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +77 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-preact/src/client/preact_refresh.js +36 -0
- package/template-web-preact/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-preact/src/client/preact_refresh.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/app/animals.js +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/app/app.css +43 -0
- package/template-web-preact/.jsenv/chrome@128.00/app/app.jsx +97 -0
- package/template-web-preact/.jsenv/chrome@128.00/app/app.jsx.map +44 -0
- package/template-web-preact/.jsenv/chrome@128.00/app/counter.jsx +47 -0
- package/template-web-preact/.jsenv/chrome@128.00/app/counter.jsx.map +33 -0
- package/template-web-preact/.jsenv/chrome@128.00/index.html +68 -0
- package/template-web-preact/.jsenv/chrome@128.00/index.html@L11C7-L15C16.js +5 -0
- package/template-web-preact/.jsenv/chrome@128.00/index.html@L7C5-L21C13.css +10 -0
- package/template-web-preact/.jsenv/chrome@128.00/main.jsx +9 -0
- package/template-web-preact/.jsenv/chrome@128.00/main.jsx.map +24 -0
- package/template-web-preact/.jsenv/chrome@128.00/preact_logo.svg +6 -0
- package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html +53 -0
- package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
- package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
- package/template-web-preact/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
- package/template-web-preact/.jsenv/craft/app/app.jsx +4 -1
- package/template-web-preact/.jsenv/jsenv_tests_output.txt +2 -2
- package/template-web-preact/eslint.config.mjs +7 -0
- package/template-web-preact/package.json +5 -9
- package/template-web-preact/src/app/app.jsx +1 -1
- package/template-web-preact/src/main.jsx +0 -1
- package/template-web-preact/src/tests/animals.test.html +1 -1
- package/template-web-react/.jsenv/chrome@127.00/app/app.jsx +1 -1
- package/template-web-react/.jsenv/chrome@127.00/app/counter.jsx +1 -1
- package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/chrome@127.00/cjs_to_esm/__compile_context__.json +1 -1
- package/template-web-react/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js +1 -1
- package/template-web-react/.jsenv/chrome@127.00/tests/animals.test.html@L13C5-L30C14.js.map +3 -3
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js +377 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/autoreload.js.map +11 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/import_meta_hot.js +83 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/ribbon.js +95 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/dist/js/server_events_client.js +458 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.js +7 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.js +7 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react/jsx-dev-runtime.jsx +4085 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react/jsx-dev-runtime.jsx.map +22 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react.jsx +2796 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/react.jsx.map +17 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.js +25 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/react-dom/client.jsx +30568 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/react-dom/client.jsx.map +24 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.js +685 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.js.map +17 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/independent/assert/dist/jsenv_assert_browser.js +6193 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/ast/src/html/html_src_set.js +18 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/internal/plugin-supervisor/dist/js/supervisor.js +1251 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh.js +33 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh.js.map +11 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh_preamble.js +22 -0
- package/template-web-react/.jsenv/chrome@128.00/@fs/Users/damien.maillard/dev/perso/jsenv-core/packages/related/plugin-react/src/client/react_refresh_preamble.js.map +11 -0
- package/template-web-react/.jsenv/chrome@128.00/app/animals.js +11 -0
- package/template-web-react/.jsenv/chrome@128.00/app/app.css +43 -0
- package/template-web-react/.jsenv/chrome@128.00/app/app.jsx +98 -0
- package/template-web-react/.jsenv/chrome@128.00/app/app.jsx.map +49 -0
- package/template-web-react/.jsenv/chrome@128.00/app/counter.jsx +45 -0
- package/template-web-react/.jsenv/chrome@128.00/app/counter.jsx.map +32 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.js +2796 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.js__compile_info__.json +18 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.development.map +1 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.js +4085 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.js__compile_info__.json +26 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-dev-runtime.development.map +1 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.js +30568 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.js__compile_info__.json +30 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.development.map +1 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.js +685 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.js__compile_info__.json +18 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-refresh/runtime.development.map +1 -0
- package/template-web-react/.jsenv/chrome@128.00/cjs_to_esm/__compile_context__.json +3 -0
- package/template-web-react/.jsenv/chrome@128.00/index.html +68 -0
- package/template-web-react/.jsenv/chrome@128.00/index.html@L11C7-L15C16.js +5 -0
- package/template-web-react/.jsenv/chrome@128.00/index.html@L7C5-L21C13.css +10 -0
- package/template-web-react/.jsenv/chrome@128.00/main.jsx +21 -0
- package/template-web-react/.jsenv/chrome@128.00/main.jsx.map +33 -0
- package/template-web-react/.jsenv/chrome@128.00/react_logo.svg +7 -0
- package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html +53 -0
- package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js +19 -0
- package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html@L13C5-L30C14.js.map +11 -0
- package/template-web-react/.jsenv/chrome@128.00/tests/animals.test.html@L9C7-L13C16.js +5 -0
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/index.production.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react/jsx-runtime.production.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/craft/cjs_to_esm/@fs/Users/damien.maillard/dev/perso/jsenv-core/node_modules/react-dom/client.production.js__compile_info__.json +2 -2
- package/template-web-react/.jsenv/craft/cjs_to_esm/__compile_context__.json +1 -1
- package/template-web-react/.jsenv/jsenv_tests_output.txt +3 -3
- package/template-web-react/eslint.config.mjs +7 -0
- package/template-web-react/package.json +6 -10
- package/template-web-react/src/app/app.jsx +0 -1
- package/template-web-react/src/main.jsx +0 -1
- package/template-web-react/src/tests/animals.test.html +1 -1
- package/template-node-package/.eslintignore +0 -2
- package/template-node-package/.eslintrc.cjs +0 -102
- package/template-web/.eslintignore +0 -3
- package/template-web/.eslintrc.cjs +0 -138
- package/template-web-components/.eslintignore +0 -3
- package/template-web-components/.eslintrc.cjs +0 -138
- package/template-web-preact/.eslintignore +0 -3
- package/template-web-preact/.eslintrc.cjs +0 -175
- package/template-web-react/.eslintignore +0 -3
- package/template-web-react/.eslintrc.cjs +0 -175
|
@@ -0,0 +1,685 @@
|
|
|
1
|
+
function getDefaultExportFromCjs (x) {
|
|
2
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
var runtime = {exports: {}};
|
|
6
|
+
|
|
7
|
+
var reactRefreshRuntime_development = {};
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @license React
|
|
11
|
+
* react-refresh-runtime.development.js
|
|
12
|
+
*
|
|
13
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
14
|
+
*
|
|
15
|
+
* This source code is licensed under the MIT license found in the
|
|
16
|
+
* LICENSE file in the root directory of this source tree.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
{
|
|
20
|
+
(function() {
|
|
21
|
+
|
|
22
|
+
// ATTENTION
|
|
23
|
+
var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
|
|
24
|
+
var REACT_MEMO_TYPE = Symbol.for('react.memo');
|
|
25
|
+
|
|
26
|
+
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.
|
|
27
|
+
// It's OK to reference families, but use WeakMap/Set for types.
|
|
28
|
+
|
|
29
|
+
var allFamiliesByID = new Map();
|
|
30
|
+
var allFamiliesByType = new PossiblyWeakMap();
|
|
31
|
+
var allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families
|
|
32
|
+
// that have actually been edited here. This keeps checks fast.
|
|
33
|
+
// $FlowIssue
|
|
34
|
+
|
|
35
|
+
var updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.
|
|
36
|
+
// It is an array of [Family, NextType] tuples.
|
|
37
|
+
|
|
38
|
+
var pendingUpdates = []; // This is injected by the renderer via DevTools globalThis hook.
|
|
39
|
+
|
|
40
|
+
var helpersByRendererID = new Map();
|
|
41
|
+
var helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.
|
|
42
|
+
|
|
43
|
+
var mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.
|
|
44
|
+
|
|
45
|
+
var failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.
|
|
46
|
+
// It needs to be weak because we do this even for roots that failed to mount.
|
|
47
|
+
// If there is no WeakMap, we won't attempt to do retrying.
|
|
48
|
+
// $FlowIssue
|
|
49
|
+
|
|
50
|
+
var rootElements = // $FlowIssue
|
|
51
|
+
typeof WeakMap === 'function' ? new WeakMap() : null;
|
|
52
|
+
var isPerformingRefresh = false;
|
|
53
|
+
|
|
54
|
+
function computeFullKey(signature) {
|
|
55
|
+
if (signature.fullKey !== null) {
|
|
56
|
+
return signature.fullKey;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var fullKey = signature.ownKey;
|
|
60
|
+
var hooks;
|
|
61
|
+
|
|
62
|
+
try {
|
|
63
|
+
hooks = signature.getCustomHooks();
|
|
64
|
+
} catch (err) {
|
|
65
|
+
// This can happen in an edge case, e.g. if expression like Foo.useSomething
|
|
66
|
+
// depends on Foo which is lazily initialized during rendering.
|
|
67
|
+
// In that case just assume we'll have to remount.
|
|
68
|
+
signature.forceReset = true;
|
|
69
|
+
signature.fullKey = fullKey;
|
|
70
|
+
return fullKey;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
for (var i = 0; i < hooks.length; i++) {
|
|
74
|
+
var hook = hooks[i];
|
|
75
|
+
|
|
76
|
+
if (typeof hook !== 'function') {
|
|
77
|
+
// Something's wrong. Assume we need to remount.
|
|
78
|
+
signature.forceReset = true;
|
|
79
|
+
signature.fullKey = fullKey;
|
|
80
|
+
return fullKey;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
var nestedHookSignature = allSignaturesByType.get(hook);
|
|
84
|
+
|
|
85
|
+
if (nestedHookSignature === undefined) {
|
|
86
|
+
// No signature means Hook wasn't in the source code, e.g. in a library.
|
|
87
|
+
// We'll skip it because we can assume it won't change during this session.
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var nestedHookKey = computeFullKey(nestedHookSignature);
|
|
92
|
+
|
|
93
|
+
if (nestedHookSignature.forceReset) {
|
|
94
|
+
signature.forceReset = true;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
fullKey += '\n---\n' + nestedHookKey;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
signature.fullKey = fullKey;
|
|
101
|
+
return fullKey;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function haveEqualSignatures(prevType, nextType) {
|
|
105
|
+
var prevSignature = allSignaturesByType.get(prevType);
|
|
106
|
+
var nextSignature = allSignaturesByType.get(nextType);
|
|
107
|
+
|
|
108
|
+
if (prevSignature === undefined && nextSignature === undefined) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (prevSignature === undefined || nextSignature === undefined) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (nextSignature.forceReset) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function isReactClass(type) {
|
|
128
|
+
return type.prototype && type.prototype.isReactComponent;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function canPreserveStateBetween(prevType, nextType) {
|
|
132
|
+
if (isReactClass(prevType) || isReactClass(nextType)) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (haveEqualSignatures(prevType, nextType)) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function resolveFamily(type) {
|
|
144
|
+
// Only check updated types to keep lookups fast.
|
|
145
|
+
return updatedFamiliesByType.get(type);
|
|
146
|
+
} // If we didn't care about IE11, we could use new Map/Set(iterable).
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
function cloneMap(map) {
|
|
150
|
+
var clone = new Map();
|
|
151
|
+
map.forEach(function (value, key) {
|
|
152
|
+
clone.set(key, value);
|
|
153
|
+
});
|
|
154
|
+
return clone;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
function cloneSet(set) {
|
|
158
|
+
var clone = new Set();
|
|
159
|
+
set.forEach(function (value) {
|
|
160
|
+
clone.add(value);
|
|
161
|
+
});
|
|
162
|
+
return clone;
|
|
163
|
+
} // This is a safety mechanism to protect against rogue getters and Proxies.
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
function getProperty(object, property) {
|
|
167
|
+
try {
|
|
168
|
+
return object[property];
|
|
169
|
+
} catch (err) {
|
|
170
|
+
// Intentionally ignore.
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function performReactRefresh() {
|
|
176
|
+
|
|
177
|
+
if (pendingUpdates.length === 0) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (isPerformingRefresh) {
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
isPerformingRefresh = true;
|
|
186
|
+
|
|
187
|
+
try {
|
|
188
|
+
var staleFamilies = new Set();
|
|
189
|
+
var updatedFamilies = new Set();
|
|
190
|
+
var updates = pendingUpdates;
|
|
191
|
+
pendingUpdates = [];
|
|
192
|
+
updates.forEach(function (_ref) {
|
|
193
|
+
var family = _ref[0],
|
|
194
|
+
nextType = _ref[1];
|
|
195
|
+
// Now that we got a real edit, we can create associations
|
|
196
|
+
// that will be read by the React reconciler.
|
|
197
|
+
var prevType = family.current;
|
|
198
|
+
updatedFamiliesByType.set(prevType, family);
|
|
199
|
+
updatedFamiliesByType.set(nextType, family);
|
|
200
|
+
family.current = nextType; // Determine whether this should be a re-render or a re-mount.
|
|
201
|
+
|
|
202
|
+
if (canPreserveStateBetween(prevType, nextType)) {
|
|
203
|
+
updatedFamilies.add(family);
|
|
204
|
+
} else {
|
|
205
|
+
staleFamilies.add(family);
|
|
206
|
+
}
|
|
207
|
+
}); // TODO: rename these fields to something more meaningful.
|
|
208
|
+
|
|
209
|
+
var update = {
|
|
210
|
+
updatedFamilies: updatedFamilies,
|
|
211
|
+
// Families that will re-render preserving state
|
|
212
|
+
staleFamilies: staleFamilies // Families that will be remounted
|
|
213
|
+
|
|
214
|
+
};
|
|
215
|
+
helpersByRendererID.forEach(function (helpers) {
|
|
216
|
+
// Even if there are no roots, set the handler on first update.
|
|
217
|
+
// This ensures that if *new* roots are mounted, they'll use the resolve handler.
|
|
218
|
+
helpers.setRefreshHandler(resolveFamily);
|
|
219
|
+
});
|
|
220
|
+
var didError = false;
|
|
221
|
+
var firstError = null; // We snapshot maps and sets that are mutated during commits.
|
|
222
|
+
// If we don't do this, there is a risk they will be mutated while
|
|
223
|
+
// we iterate over them. For example, trying to recover a failed root
|
|
224
|
+
// may cause another root to be added to the failed list -- an infinite loop.
|
|
225
|
+
|
|
226
|
+
var failedRootsSnapshot = cloneSet(failedRoots);
|
|
227
|
+
var mountedRootsSnapshot = cloneSet(mountedRoots);
|
|
228
|
+
var helpersByRootSnapshot = cloneMap(helpersByRoot);
|
|
229
|
+
failedRootsSnapshot.forEach(function (root) {
|
|
230
|
+
var helpers = helpersByRootSnapshot.get(root);
|
|
231
|
+
|
|
232
|
+
if (helpers === undefined) {
|
|
233
|
+
throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (!failedRoots.has(root)) {// No longer failed.
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
if (rootElements === null) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (!rootElements.has(root)) {
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
var element = rootElements.get(root);
|
|
248
|
+
|
|
249
|
+
try {
|
|
250
|
+
helpers.scheduleRoot(root, element);
|
|
251
|
+
} catch (err) {
|
|
252
|
+
if (!didError) {
|
|
253
|
+
didError = true;
|
|
254
|
+
firstError = err;
|
|
255
|
+
} // Keep trying other roots.
|
|
256
|
+
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
mountedRootsSnapshot.forEach(function (root) {
|
|
260
|
+
var helpers = helpersByRootSnapshot.get(root);
|
|
261
|
+
|
|
262
|
+
if (helpers === undefined) {
|
|
263
|
+
throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
if (!mountedRoots.has(root)) {// No longer mounted.
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
try {
|
|
270
|
+
helpers.scheduleRefresh(root, update);
|
|
271
|
+
} catch (err) {
|
|
272
|
+
if (!didError) {
|
|
273
|
+
didError = true;
|
|
274
|
+
firstError = err;
|
|
275
|
+
} // Keep trying other roots.
|
|
276
|
+
|
|
277
|
+
}
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
if (didError) {
|
|
281
|
+
throw firstError;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
return update;
|
|
285
|
+
} finally {
|
|
286
|
+
isPerformingRefresh = false;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function register(type, id) {
|
|
290
|
+
{
|
|
291
|
+
if (type === null) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (typeof type !== 'function' && typeof type !== 'object') {
|
|
296
|
+
return;
|
|
297
|
+
} // This can happen in an edge case, e.g. if we register
|
|
298
|
+
// return value of a HOC but it returns a cached component.
|
|
299
|
+
// Ignore anything but the first registration for each type.
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
if (allFamiliesByType.has(type)) {
|
|
303
|
+
return;
|
|
304
|
+
} // Create family or remember to update it.
|
|
305
|
+
// None of this bookkeeping affects reconciliation
|
|
306
|
+
// until the first performReactRefresh() call above.
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
var family = allFamiliesByID.get(id);
|
|
310
|
+
|
|
311
|
+
if (family === undefined) {
|
|
312
|
+
family = {
|
|
313
|
+
current: type
|
|
314
|
+
};
|
|
315
|
+
allFamiliesByID.set(id, family);
|
|
316
|
+
} else {
|
|
317
|
+
pendingUpdates.push([family, type]);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.
|
|
321
|
+
|
|
322
|
+
if (typeof type === 'object' && type !== null) {
|
|
323
|
+
switch (getProperty(type, '$$typeof')) {
|
|
324
|
+
case REACT_FORWARD_REF_TYPE:
|
|
325
|
+
register(type.render, id + '$render');
|
|
326
|
+
break;
|
|
327
|
+
|
|
328
|
+
case REACT_MEMO_TYPE:
|
|
329
|
+
register(type.type, id + '$type');
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
function setSignature(type, key) {
|
|
336
|
+
var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
337
|
+
var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;
|
|
338
|
+
|
|
339
|
+
{
|
|
340
|
+
if (!allSignaturesByType.has(type)) {
|
|
341
|
+
allSignaturesByType.set(type, {
|
|
342
|
+
forceReset: forceReset,
|
|
343
|
+
ownKey: key,
|
|
344
|
+
fullKey: null,
|
|
345
|
+
getCustomHooks: getCustomHooks || function () {
|
|
346
|
+
return [];
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
} // Visit inner types because we might not have signed them.
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
if (typeof type === 'object' && type !== null) {
|
|
353
|
+
switch (getProperty(type, '$$typeof')) {
|
|
354
|
+
case REACT_FORWARD_REF_TYPE:
|
|
355
|
+
setSignature(type.render, key, forceReset, getCustomHooks);
|
|
356
|
+
break;
|
|
357
|
+
|
|
358
|
+
case REACT_MEMO_TYPE:
|
|
359
|
+
setSignature(type.type, key, forceReset, getCustomHooks);
|
|
360
|
+
break;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
} // This is lazily called during first render for a type.
|
|
365
|
+
// It captures Hook list at that time so inline requires don't break comparisons.
|
|
366
|
+
|
|
367
|
+
function collectCustomHooksForSignature(type) {
|
|
368
|
+
{
|
|
369
|
+
var signature = allSignaturesByType.get(type);
|
|
370
|
+
|
|
371
|
+
if (signature !== undefined) {
|
|
372
|
+
computeFullKey(signature);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
function getFamilyByID(id) {
|
|
377
|
+
{
|
|
378
|
+
return allFamiliesByID.get(id);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
function getFamilyByType(type) {
|
|
382
|
+
{
|
|
383
|
+
return allFamiliesByType.get(type);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
function findAffectedHostInstances(families) {
|
|
387
|
+
{
|
|
388
|
+
var affectedInstances = new Set();
|
|
389
|
+
mountedRoots.forEach(function (root) {
|
|
390
|
+
var helpers = helpersByRoot.get(root);
|
|
391
|
+
|
|
392
|
+
if (helpers === undefined) {
|
|
393
|
+
throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);
|
|
397
|
+
instancesForRoot.forEach(function (inst) {
|
|
398
|
+
affectedInstances.add(inst);
|
|
399
|
+
});
|
|
400
|
+
});
|
|
401
|
+
return affectedInstances;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
function injectIntoGlobalHook(globalObject) {
|
|
405
|
+
{
|
|
406
|
+
// For React Native, the globalThis hook will be set up by require('react-devtools-core').
|
|
407
|
+
// That code will run before us. So we need to monkeypatch functions on existing hook.
|
|
408
|
+
// For React Web, the globalThis hook will be set up by the extension.
|
|
409
|
+
// This will also run before us.
|
|
410
|
+
var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
411
|
+
|
|
412
|
+
if (hook === undefined) {
|
|
413
|
+
// However, if there is no DevTools extension, we'll need to set up the globalThis hook ourselves.
|
|
414
|
+
// Note that in this case it's important that renderer code runs *after* this method call.
|
|
415
|
+
// Otherwise, the renderer will think that there is no globalThis hook, and won't do the injection.
|
|
416
|
+
var nextID = 0;
|
|
417
|
+
globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {
|
|
418
|
+
renderers: new Map(),
|
|
419
|
+
supportsFiber: true,
|
|
420
|
+
inject: function (injected) {
|
|
421
|
+
return nextID++;
|
|
422
|
+
},
|
|
423
|
+
onScheduleFiberRoot: function (id, root, children) {},
|
|
424
|
+
onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},
|
|
425
|
+
onCommitFiberUnmount: function () {}
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
if (hook.isDisabled) {
|
|
430
|
+
// This isn't a real property on the hook, but it can be set to opt out
|
|
431
|
+
// of DevTools integration and associated warnings and logs.
|
|
432
|
+
// Using console['warn'] to evade Babel and ESLint
|
|
433
|
+
console['warn']('Something has shimmed the React DevTools globalThis hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');
|
|
434
|
+
return;
|
|
435
|
+
} // Here, we just want to get a reference to scheduleRefresh.
|
|
436
|
+
|
|
437
|
+
|
|
438
|
+
var oldInject = hook.inject;
|
|
439
|
+
|
|
440
|
+
hook.inject = function (injected) {
|
|
441
|
+
var id = oldInject.apply(this, arguments);
|
|
442
|
+
|
|
443
|
+
if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {
|
|
444
|
+
// This version supports React Refresh.
|
|
445
|
+
helpersByRendererID.set(id, injected);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
return id;
|
|
449
|
+
}; // Do the same for any already injected roots.
|
|
450
|
+
// This is useful if ReactDOM has already been initialized.
|
|
451
|
+
// https://github.com/facebook/react/issues/17626
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
hook.renderers.forEach(function (injected, id) {
|
|
455
|
+
if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {
|
|
456
|
+
// This version supports React Refresh.
|
|
457
|
+
helpersByRendererID.set(id, injected);
|
|
458
|
+
}
|
|
459
|
+
}); // We also want to track currently mounted roots.
|
|
460
|
+
|
|
461
|
+
var oldOnCommitFiberRoot = hook.onCommitFiberRoot;
|
|
462
|
+
|
|
463
|
+
var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};
|
|
464
|
+
|
|
465
|
+
hook.onScheduleFiberRoot = function (id, root, children) {
|
|
466
|
+
if (!isPerformingRefresh) {
|
|
467
|
+
// If it was intentionally scheduled, don't attempt to restore.
|
|
468
|
+
// This includes intentionally scheduled unmounts.
|
|
469
|
+
failedRoots.delete(root);
|
|
470
|
+
|
|
471
|
+
if (rootElements !== null) {
|
|
472
|
+
rootElements.set(root, children);
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
return oldOnScheduleFiberRoot.apply(this, arguments);
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {
|
|
480
|
+
var helpers = helpersByRendererID.get(id);
|
|
481
|
+
|
|
482
|
+
if (helpers !== undefined) {
|
|
483
|
+
helpersByRoot.set(root, helpers);
|
|
484
|
+
var current = root.current;
|
|
485
|
+
var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.
|
|
486
|
+
// This logic is copy-pasted from similar logic in the DevTools backend.
|
|
487
|
+
// If this breaks with some refactoring, you'll want to update DevTools too.
|
|
488
|
+
|
|
489
|
+
if (alternate !== null) {
|
|
490
|
+
var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);
|
|
491
|
+
var isMounted = current.memoizedState != null && current.memoizedState.element != null;
|
|
492
|
+
|
|
493
|
+
if (!wasMounted && isMounted) {
|
|
494
|
+
// Mount a new root.
|
|
495
|
+
mountedRoots.add(root);
|
|
496
|
+
failedRoots.delete(root);
|
|
497
|
+
} else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {
|
|
498
|
+
// Unmount an existing root.
|
|
499
|
+
mountedRoots.delete(root);
|
|
500
|
+
|
|
501
|
+
if (didError) {
|
|
502
|
+
// We'll remount it on future edits.
|
|
503
|
+
failedRoots.add(root);
|
|
504
|
+
} else {
|
|
505
|
+
helpersByRoot.delete(root);
|
|
506
|
+
}
|
|
507
|
+
} else if (!wasMounted && !isMounted) {
|
|
508
|
+
if (didError) {
|
|
509
|
+
// We'll remount it on future edits.
|
|
510
|
+
failedRoots.add(root);
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
} else {
|
|
514
|
+
// Mount a new root.
|
|
515
|
+
mountedRoots.add(root);
|
|
516
|
+
}
|
|
517
|
+
} // Always call the decorated DevTools hook.
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
return oldOnCommitFiberRoot.apply(this, arguments);
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
function hasUnrecoverableErrors() {
|
|
525
|
+
// TODO: delete this after removing dependency in RN.
|
|
526
|
+
return false;
|
|
527
|
+
} // Exposed for testing.
|
|
528
|
+
|
|
529
|
+
function _getMountedRootCount() {
|
|
530
|
+
{
|
|
531
|
+
return mountedRoots.size;
|
|
532
|
+
}
|
|
533
|
+
} // This is a wrapper over more primitive functions for setting signature.
|
|
534
|
+
// Signatures let us decide whether the Hook order has changed on refresh.
|
|
535
|
+
//
|
|
536
|
+
// This function is intended to be used as a transform target, e.g.:
|
|
537
|
+
// var _s = createSignatureFunctionForTransform()
|
|
538
|
+
//
|
|
539
|
+
// function Hello() {
|
|
540
|
+
// const [foo, setFoo] = useState(0);
|
|
541
|
+
// const value = useCustomHook();
|
|
542
|
+
// _s(); /* Call without arguments triggers collecting the custom Hook list.
|
|
543
|
+
// * This doesn't happen during the module evaluation because we
|
|
544
|
+
// * don't want to change the module order with inline requires.
|
|
545
|
+
// * Next calls are noops. */
|
|
546
|
+
// return <h1>Hi</h1>;
|
|
547
|
+
// }
|
|
548
|
+
//
|
|
549
|
+
// /* Call with arguments attaches the signature to the type: */
|
|
550
|
+
// _s(
|
|
551
|
+
// Hello,
|
|
552
|
+
// 'useState{[foo, setFoo]}(0)',
|
|
553
|
+
// () => [useCustomHook], /* Lazy to avoid triggering inline requires */
|
|
554
|
+
// );
|
|
555
|
+
|
|
556
|
+
function createSignatureFunctionForTransform() {
|
|
557
|
+
{
|
|
558
|
+
var savedType;
|
|
559
|
+
var hasCustomHooks;
|
|
560
|
+
var didCollectHooks = false;
|
|
561
|
+
return function (type, key, forceReset, getCustomHooks) {
|
|
562
|
+
if (typeof key === 'string') {
|
|
563
|
+
// We're in the initial phase that associates signatures
|
|
564
|
+
// with the functions. Note this may be called multiple times
|
|
565
|
+
// in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).
|
|
566
|
+
if (!savedType) {
|
|
567
|
+
// We're in the innermost call, so this is the actual type.
|
|
568
|
+
savedType = type;
|
|
569
|
+
hasCustomHooks = typeof getCustomHooks === 'function';
|
|
570
|
+
} // Set the signature for all types (even wrappers!) in case
|
|
571
|
+
// they have no signatures of their own. This is to prevent
|
|
572
|
+
// problems like https://github.com/facebook/react/issues/20417.
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
if (type != null && (typeof type === 'function' || typeof type === 'object')) {
|
|
576
|
+
setSignature(type, key, forceReset, getCustomHooks);
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
return type;
|
|
580
|
+
} else {
|
|
581
|
+
// We're in the _s() call without arguments, which means
|
|
582
|
+
// this is the time to collect custom Hook signatures.
|
|
583
|
+
// Only do this once. This path is hot and runs *inside* every render!
|
|
584
|
+
if (!didCollectHooks && hasCustomHooks) {
|
|
585
|
+
didCollectHooks = true;
|
|
586
|
+
collectCustomHooksForSignature(savedType);
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
function isLikelyComponentType(type) {
|
|
593
|
+
{
|
|
594
|
+
switch (typeof type) {
|
|
595
|
+
case 'function':
|
|
596
|
+
{
|
|
597
|
+
// First, deal with classes.
|
|
598
|
+
if (type.prototype != null) {
|
|
599
|
+
if (type.prototype.isReactComponent) {
|
|
600
|
+
// React class.
|
|
601
|
+
return true;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
var ownNames = Object.getOwnPropertyNames(type.prototype);
|
|
605
|
+
|
|
606
|
+
if (ownNames.length > 1 || ownNames[0] !== 'constructor') {
|
|
607
|
+
// This looks like a class.
|
|
608
|
+
return false;
|
|
609
|
+
} // eslint-disable-next-line no-proto
|
|
610
|
+
|
|
611
|
+
|
|
612
|
+
if (type.prototype.__proto__ !== Object.prototype) {
|
|
613
|
+
// It has a superclass.
|
|
614
|
+
return false;
|
|
615
|
+
} // Pass through.
|
|
616
|
+
// This looks like a regular function with empty prototype.
|
|
617
|
+
|
|
618
|
+
} // For plain functions and arrows, use name as a heuristic.
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
var name = type.name || type.displayName;
|
|
622
|
+
return typeof name === 'string' && /^[A-Z]/.test(name);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
case 'object':
|
|
626
|
+
{
|
|
627
|
+
if (type != null) {
|
|
628
|
+
switch (getProperty(type, '$$typeof')) {
|
|
629
|
+
case REACT_FORWARD_REF_TYPE:
|
|
630
|
+
case REACT_MEMO_TYPE:
|
|
631
|
+
// Definitely React components.
|
|
632
|
+
return true;
|
|
633
|
+
|
|
634
|
+
default:
|
|
635
|
+
return false;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
return false;
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
default:
|
|
643
|
+
{
|
|
644
|
+
return false;
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
reactRefreshRuntime_development._getMountedRootCount = _getMountedRootCount;
|
|
651
|
+
reactRefreshRuntime_development.collectCustomHooksForSignature = collectCustomHooksForSignature;
|
|
652
|
+
reactRefreshRuntime_development.createSignatureFunctionForTransform = createSignatureFunctionForTransform;
|
|
653
|
+
reactRefreshRuntime_development.findAffectedHostInstances = findAffectedHostInstances;
|
|
654
|
+
reactRefreshRuntime_development.getFamilyByID = getFamilyByID;
|
|
655
|
+
reactRefreshRuntime_development.getFamilyByType = getFamilyByType;
|
|
656
|
+
reactRefreshRuntime_development.hasUnrecoverableErrors = hasUnrecoverableErrors;
|
|
657
|
+
reactRefreshRuntime_development.injectIntoGlobalHook = injectIntoGlobalHook;
|
|
658
|
+
reactRefreshRuntime_development.isLikelyComponentType = isLikelyComponentType;
|
|
659
|
+
reactRefreshRuntime_development.performReactRefresh = performReactRefresh;
|
|
660
|
+
reactRefreshRuntime_development.register = register;
|
|
661
|
+
reactRefreshRuntime_development.setSignature = setSignature;
|
|
662
|
+
})();
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
{
|
|
666
|
+
runtime.exports = reactRefreshRuntime_development;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
var runtimeExports = runtime.exports;
|
|
670
|
+
var __jsenv_default_import__ = /*@__PURE__*/getDefaultExportFromCjs(runtimeExports);
|
|
671
|
+
|
|
672
|
+
var _getMountedRootCount = runtimeExports._getMountedRootCount;
|
|
673
|
+
var collectCustomHooksForSignature = runtimeExports.collectCustomHooksForSignature;
|
|
674
|
+
var createSignatureFunctionForTransform = runtimeExports.createSignatureFunctionForTransform;
|
|
675
|
+
var findAffectedHostInstances = runtimeExports.findAffectedHostInstances;
|
|
676
|
+
var getFamilyByID = runtimeExports.getFamilyByID;
|
|
677
|
+
var getFamilyByType = runtimeExports.getFamilyByType;
|
|
678
|
+
var hasUnrecoverableErrors = runtimeExports.hasUnrecoverableErrors;
|
|
679
|
+
var injectIntoGlobalHook = runtimeExports.injectIntoGlobalHook;
|
|
680
|
+
var isLikelyComponentType = runtimeExports.isLikelyComponentType;
|
|
681
|
+
var performReactRefresh = runtimeExports.performReactRefresh;
|
|
682
|
+
var register = runtimeExports.register;
|
|
683
|
+
var setSignature = runtimeExports.setSignature;
|
|
684
|
+
export { _getMountedRootCount, collectCustomHooksForSignature, createSignatureFunctionForTransform, __jsenv_default_import__ as default, findAffectedHostInstances, getFamilyByID, getFamilyByType, hasUnrecoverableErrors, injectIntoGlobalHook, isLikelyComponentType, performReactRefresh, register, setSignature };
|
|
685
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZXMiOlsiZmlsZTovLy9Vc2Vycy9kYW1pZW4ubWFpbGxhcmQvZGV2L3BlcnNvL2pzZW52LWNvcmUvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZnJlc2gvY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsImZpbGU6Ly8vVXNlcnMvZGFtaWVuLm1haWxsYXJkL2Rldi9wZXJzby9qc2Vudi1jb3JlL25vZGVfbW9kdWxlcy9yZWFjdC1yZWZyZXNoL3J1bnRpbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gQVRURU5USU9OXG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xuXG52YXIgUG9zc2libHlXZWFrTWFwID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwOyAvLyBXZSBuZXZlciByZW1vdmUgdGhlc2UgYXNzb2NpYXRpb25zLlxuLy8gSXQncyBPSyB0byByZWZlcmVuY2UgZmFtaWxpZXMsIGJ1dCB1c2UgV2Vha01hcC9TZXQgZm9yIHR5cGVzLlxuXG52YXIgYWxsRmFtaWxpZXNCeUlEID0gbmV3IE1hcCgpO1xudmFyIGFsbEZhbWlsaWVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpO1xudmFyIGFsbFNpZ25hdHVyZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7IC8vIFRoaXMgV2Vha01hcCBpcyByZWFkIGJ5IFJlYWN0LCBzbyB3ZSBvbmx5IHB1dCBmYW1pbGllc1xuLy8gdGhhdCBoYXZlIGFjdHVhbGx5IGJlZW4gZWRpdGVkIGhlcmUuIFRoaXMga2VlcHMgY2hlY2tzIGZhc3QuXG4vLyAkRmxvd0lzc3VlXG5cbnZhciB1cGRhdGVkRmFtaWxpZXNCeVR5cGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7IC8vIFRoaXMgaXMgY2xlYXJlZCBvbiBldmVyeSBwZXJmb3JtUmVhY3RSZWZyZXNoKCkgY2FsbC5cbi8vIEl0IGlzIGFuIGFycmF5IG9mIFtGYW1pbHksIE5leHRUeXBlXSB0dXBsZXMuXG5cbnZhciBwZW5kaW5nVXBkYXRlcyA9IFtdOyAvLyBUaGlzIGlzIGluamVjdGVkIGJ5IHRoZSByZW5kZXJlciB2aWEgRGV2VG9vbHMgZ2xvYmFsIGhvb2suXG5cbnZhciBoZWxwZXJzQnlSZW5kZXJlcklEID0gbmV3IE1hcCgpO1xudmFyIGhlbHBlcnNCeVJvb3QgPSBuZXcgTWFwKCk7IC8vIFdlIGtlZXAgdHJhY2sgb2YgbW91bnRlZCByb290cyBzbyB3ZSBjYW4gc2NoZWR1bGUgdXBkYXRlcy5cblxudmFyIG1vdW50ZWRSb290cyA9IG5ldyBTZXQoKTsgLy8gSWYgYSByb290IGNhcHR1cmVzIGFuIGVycm9yLCB3ZSByZW1lbWJlciBpdCBzbyB3ZSBjYW4gcmV0cnkgb24gZWRpdC5cblxudmFyIGZhaWxlZFJvb3RzID0gbmV3IFNldCgpOyAvLyBJbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IFdlYWtNYXAsIHdlIGFsc28gcmVtZW1iZXIgdGhlIGxhc3QgZWxlbWVudCBmb3IgZXZlcnkgcm9vdC5cbi8vIEl0IG5lZWRzIHRvIGJlIHdlYWsgYmVjYXVzZSB3ZSBkbyB0aGlzIGV2ZW4gZm9yIHJvb3RzIHRoYXQgZmFpbGVkIHRvIG1vdW50LlxuLy8gSWYgdGhlcmUgaXMgbm8gV2Vha01hcCwgd2Ugd29uJ3QgYXR0ZW1wdCB0byBkbyByZXRyeWluZy5cbi8vICRGbG93SXNzdWVcblxudmFyIHJvb3RFbGVtZW50cyA9IC8vICRGbG93SXNzdWVcbnR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gbmV3IFdlYWtNYXAoKSA6IG51bGw7XG52YXIgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjb21wdXRlRnVsbEtleShzaWduYXR1cmUpIHtcbiAgaWYgKHNpZ25hdHVyZS5mdWxsS2V5ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHNpZ25hdHVyZS5mdWxsS2V5O1xuICB9XG5cbiAgdmFyIGZ1bGxLZXkgPSBzaWduYXR1cmUub3duS2V5O1xuICB2YXIgaG9va3M7XG5cbiAgdHJ5IHtcbiAgICBob29rcyA9IHNpZ25hdHVyZS5nZXRDdXN0b21Ib29rcygpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gYW4gZWRnZSBjYXNlLCBlLmcuIGlmIGV4cHJlc3Npb24gbGlrZSBGb28udXNlU29tZXRoaW5nXG4gICAgLy8gZGVwZW5kcyBvbiBGb28gd2hpY2ggaXMgbGF6aWx5IGluaXRpYWxpemVkIGR1cmluZyByZW5kZXJpbmcuXG4gICAgLy8gSW4gdGhhdCBjYXNlIGp1c3QgYXNzdW1lIHdlJ2xsIGhhdmUgdG8gcmVtb3VudC5cbiAgICBzaWduYXR1cmUuZm9yY2VSZXNldCA9IHRydWU7XG4gICAgc2lnbmF0dXJlLmZ1bGxLZXkgPSBmdWxsS2V5O1xuICAgIHJldHVybiBmdWxsS2V5O1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBob29rID0gaG9va3NbaV07XG5cbiAgICBpZiAodHlwZW9mIGhvb2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFNvbWV0aGluZydzIHdyb25nLiBBc3N1bWUgd2UgbmVlZCB0byByZW1vdW50LlxuICAgICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgICAgc2lnbmF0dXJlLmZ1bGxLZXkgPSBmdWxsS2V5O1xuICAgICAgcmV0dXJuIGZ1bGxLZXk7XG4gICAgfVxuXG4gICAgdmFyIG5lc3RlZEhvb2tTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChob29rKTtcblxuICAgIGlmIChuZXN0ZWRIb29rU2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vIHNpZ25hdHVyZSBtZWFucyBIb29rIHdhc24ndCBpbiB0aGUgc291cmNlIGNvZGUsIGUuZy4gaW4gYSBsaWJyYXJ5LlxuICAgICAgLy8gV2UnbGwgc2tpcCBpdCBiZWNhdXNlIHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgY2hhbmdlIGR1cmluZyB0aGlzIHNlc3Npb24uXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmVzdGVkSG9va0tleSA9IGNvbXB1dGVGdWxsS2V5KG5lc3RlZEhvb2tTaWduYXR1cmUpO1xuXG4gICAgaWYgKG5lc3RlZEhvb2tTaWduYXR1cmUuZm9yY2VSZXNldCkge1xuICAgICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgIH1cblxuICAgIGZ1bGxLZXkgKz0gJ1xcbi0tLVxcbicgKyBuZXN0ZWRIb29rS2V5O1xuICB9XG5cbiAgc2lnbmF0dXJlLmZ1bGxLZXkgPSBmdWxsS2V5O1xuICByZXR1cm4gZnVsbEtleTtcbn1cblxuZnVuY3Rpb24gaGF2ZUVxdWFsU2lnbmF0dXJlcyhwcmV2VHlwZSwgbmV4dFR5cGUpIHtcbiAgdmFyIHByZXZTaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldChwcmV2VHlwZSk7XG4gIHZhciBuZXh0U2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQobmV4dFR5cGUpO1xuXG4gIGlmIChwcmV2U2lnbmF0dXJlID09PSB1bmRlZmluZWQgJiYgbmV4dFNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAocHJldlNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkIHx8IG5leHRTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb21wdXRlRnVsbEtleShwcmV2U2lnbmF0dXJlKSAhPT0gY29tcHV0ZUZ1bGxLZXkobmV4dFNpZ25hdHVyZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmV4dFNpZ25hdHVyZS5mb3JjZVJlc2V0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzUmVhY3RDbGFzcyh0eXBlKSB7XG4gIHJldHVybiB0eXBlLnByb3RvdHlwZSAmJiB0eXBlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50O1xufVxuXG5mdW5jdGlvbiBjYW5QcmVzZXJ2ZVN0YXRlQmV0d2VlbihwcmV2VHlwZSwgbmV4dFR5cGUpIHtcbiAgaWYgKGlzUmVhY3RDbGFzcyhwcmV2VHlwZSkgfHwgaXNSZWFjdENsYXNzKG5leHRUeXBlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChoYXZlRXF1YWxTaWduYXR1cmVzKHByZXZUeXBlLCBuZXh0VHlwZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUZhbWlseSh0eXBlKSB7XG4gIC8vIE9ubHkgY2hlY2sgdXBkYXRlZCB0eXBlcyB0byBrZWVwIGxvb2t1cHMgZmFzdC5cbiAgcmV0dXJuIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5nZXQodHlwZSk7XG59IC8vIElmIHdlIGRpZG4ndCBjYXJlIGFib3V0IElFMTEsIHdlIGNvdWxkIHVzZSBuZXcgTWFwL1NldChpdGVyYWJsZSkuXG5cblxuZnVuY3Rpb24gY2xvbmVNYXAobWFwKSB7XG4gIHZhciBjbG9uZSA9IG5ldyBNYXAoKTtcbiAgbWFwLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBjbG9uZS5zZXQoa2V5LCB2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59XG5cbmZ1bmN0aW9uIGNsb25lU2V0KHNldCkge1xuICB2YXIgY2xvbmUgPSBuZXcgU2V0KCk7XG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGNsb25lLmFkZCh2YWx1ZSk7XG4gIH0pO1xuICByZXR1cm4gY2xvbmU7XG59IC8vIFRoaXMgaXMgYSBzYWZldHkgbWVjaGFuaXNtIHRvIHByb3RlY3QgYWdhaW5zdCByb2d1ZSBnZXR0ZXJzIGFuZCBQcm94aWVzLlxuXG5cbmZ1bmN0aW9uIGdldFByb3BlcnR5KG9iamVjdCwgcHJvcGVydHkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BlcnR5XTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gSW50ZW50aW9uYWxseSBpZ25vcmUuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJmb3JtUmVhY3RSZWZyZXNoKCkge1xuXG4gIGlmIChwZW5kaW5nVXBkYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChpc1BlcmZvcm1pbmdSZWZyZXNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpc1BlcmZvcm1pbmdSZWZyZXNoID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gbmV3IFNldCgpO1xuICAgIHZhciB1cGRhdGVkRmFtaWxpZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHVwZGF0ZXMgPSBwZW5kaW5nVXBkYXRlcztcbiAgICBwZW5kaW5nVXBkYXRlcyA9IFtdO1xuICAgIHVwZGF0ZXMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICAgICAgdmFyIGZhbWlseSA9IF9yZWZbMF0sXG4gICAgICAgICAgbmV4dFR5cGUgPSBfcmVmWzFdO1xuICAgICAgLy8gTm93IHRoYXQgd2UgZ290IGEgcmVhbCBlZGl0LCB3ZSBjYW4gY3JlYXRlIGFzc29jaWF0aW9uc1xuICAgICAgLy8gdGhhdCB3aWxsIGJlIHJlYWQgYnkgdGhlIFJlYWN0IHJlY29uY2lsZXIuXG4gICAgICB2YXIgcHJldlR5cGUgPSBmYW1pbHkuY3VycmVudDtcbiAgICAgIHVwZGF0ZWRGYW1pbGllc0J5VHlwZS5zZXQocHJldlR5cGUsIGZhbWlseSk7XG4gICAgICB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuc2V0KG5leHRUeXBlLCBmYW1pbHkpO1xuICAgICAgZmFtaWx5LmN1cnJlbnQgPSBuZXh0VHlwZTsgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBzaG91bGQgYmUgYSByZS1yZW5kZXIgb3IgYSByZS1tb3VudC5cblxuICAgICAgaWYgKGNhblByZXNlcnZlU3RhdGVCZXR3ZWVuKHByZXZUeXBlLCBuZXh0VHlwZSkpIHtcbiAgICAgICAgdXBkYXRlZEZhbWlsaWVzLmFkZChmYW1pbHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhbGVGYW1pbGllcy5hZGQoZmFtaWx5KTtcbiAgICAgIH1cbiAgICB9KTsgLy8gVE9ETzogcmVuYW1lIHRoZXNlIGZpZWxkcyB0byBzb21ldGhpbmcgbW9yZSBtZWFuaW5nZnVsLlxuXG4gICAgdmFyIHVwZGF0ZSA9IHtcbiAgICAgIHVwZGF0ZWRGYW1pbGllczogdXBkYXRlZEZhbWlsaWVzLFxuICAgICAgLy8gRmFtaWxpZXMgdGhhdCB3aWxsIHJlLXJlbmRlciBwcmVzZXJ2aW5nIHN0YXRlXG4gICAgICBzdGFsZUZhbWlsaWVzOiBzdGFsZUZhbWlsaWVzIC8vIEZhbWlsaWVzIHRoYXQgd2lsbCBiZSByZW1vdW50ZWRcblxuICAgIH07XG4gICAgaGVscGVyc0J5UmVuZGVyZXJJRC5mb3JFYWNoKGZ1bmN0aW9uIChoZWxwZXJzKSB7XG4gICAgICAvLyBFdmVuIGlmIHRoZXJlIGFyZSBubyByb290cywgc2V0IHRoZSBoYW5kbGVyIG9uIGZpcnN0IHVwZGF0ZS5cbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGlmICpuZXcqIHJvb3RzIGFyZSBtb3VudGVkLCB0aGV5J2xsIHVzZSB0aGUgcmVzb2x2ZSBoYW5kbGVyLlxuICAgICAgaGVscGVycy5zZXRSZWZyZXNoSGFuZGxlcihyZXNvbHZlRmFtaWx5KTtcbiAgICB9KTtcbiAgICB2YXIgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgZmlyc3RFcnJvciA9IG51bGw7IC8vIFdlIHNuYXBzaG90IG1hcHMgYW5kIHNldHMgdGhhdCBhcmUgbXV0YXRlZCBkdXJpbmcgY29tbWl0cy5cbiAgICAvLyBJZiB3ZSBkb24ndCBkbyB0aGlzLCB0aGVyZSBpcyBhIHJpc2sgdGhleSB3aWxsIGJlIG11dGF0ZWQgd2hpbGVcbiAgICAvLyB3ZSBpdGVyYXRlIG92ZXIgdGhlbS4gRm9yIGV4YW1wbGUsIHRyeWluZyB0byByZWNvdmVyIGEgZmFpbGVkIHJvb3RcbiAgICAvLyBtYXkgY2F1c2UgYW5vdGhlciByb290IHRvIGJlIGFkZGVkIHRvIHRoZSBmYWlsZWQgbGlzdCAtLSBhbiBpbmZpbml0ZSBsb29wLlxuXG4gICAgdmFyIGZhaWxlZFJvb3RzU25hcHNob3QgPSBjbG9uZVNldChmYWlsZWRSb290cyk7XG4gICAgdmFyIG1vdW50ZWRSb290c1NuYXBzaG90ID0gY2xvbmVTZXQobW91bnRlZFJvb3RzKTtcbiAgICB2YXIgaGVscGVyc0J5Um9vdFNuYXBzaG90ID0gY2xvbmVNYXAoaGVscGVyc0J5Um9vdCk7XG4gICAgZmFpbGVkUm9vdHNTbmFwc2hvdC5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3RTbmFwc2hvdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFmYWlsZWRSb290cy5oYXMocm9vdCkpIHsvLyBObyBsb25nZXIgZmFpbGVkLlxuICAgICAgfVxuXG4gICAgICBpZiAocm9vdEVsZW1lbnRzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb290RWxlbWVudHMuaGFzKHJvb3QpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGVsZW1lbnQgPSByb290RWxlbWVudHMuZ2V0KHJvb3QpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBoZWxwZXJzLnNjaGVkdWxlUm9vdChyb290LCBlbGVtZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWRpZEVycm9yKSB7XG4gICAgICAgICAgZGlkRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGZpcnN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH0gLy8gS2VlcCB0cnlpbmcgb3RoZXIgcm9vdHMuXG5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBtb3VudGVkUm9vdHNTbmFwc2hvdC5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJvb3RTbmFwc2hvdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFtb3VudGVkUm9vdHMuaGFzKHJvb3QpKSB7Ly8gTm8gbG9uZ2VyIG1vdW50ZWQuXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGhlbHBlcnMuc2NoZWR1bGVSZWZyZXNoKHJvb3QsIHVwZGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFkaWRFcnJvcikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBmaXJzdEVycm9yID0gZXJyO1xuICAgICAgICB9IC8vIEtlZXAgdHJ5aW5nIG90aGVyIHJvb3RzLlxuXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgIHRocm93IGZpcnN0RXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc1BlcmZvcm1pbmdSZWZyZXNoID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZ2lzdGVyKHR5cGUsIGlkKSB7XG4gIHtcbiAgICBpZiAodHlwZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiBpbiBhbiBlZGdlIGNhc2UsIGUuZy4gaWYgd2UgcmVnaXN0ZXJcbiAgICAvLyByZXR1cm4gdmFsdWUgb2YgYSBIT0MgYnV0IGl0IHJldHVybnMgYSBjYWNoZWQgY29tcG9uZW50LlxuICAgIC8vIElnbm9yZSBhbnl0aGluZyBidXQgdGhlIGZpcnN0IHJlZ2lzdHJhdGlvbiBmb3IgZWFjaCB0eXBlLlxuXG5cbiAgICBpZiAoYWxsRmFtaWxpZXNCeVR5cGUuaGFzKHR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBDcmVhdGUgZmFtaWx5IG9yIHJlbWVtYmVyIHRvIHVwZGF0ZSBpdC5cbiAgICAvLyBOb25lIG9mIHRoaXMgYm9va2tlZXBpbmcgYWZmZWN0cyByZWNvbmNpbGlhdGlvblxuICAgIC8vIHVudGlsIHRoZSBmaXJzdCBwZXJmb3JtUmVhY3RSZWZyZXNoKCkgY2FsbCBhYm92ZS5cblxuXG4gICAgdmFyIGZhbWlseSA9IGFsbEZhbWlsaWVzQnlJRC5nZXQoaWQpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmYW1pbHkgPSB7XG4gICAgICAgIGN1cnJlbnQ6IHR5cGVcbiAgICAgIH07XG4gICAgICBhbGxGYW1pbGllc0J5SUQuc2V0KGlkLCBmYW1pbHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nVXBkYXRlcy5wdXNoKFtmYW1pbHksIHR5cGVdKTtcbiAgICB9XG5cbiAgICBhbGxGYW1pbGllc0J5VHlwZS5zZXQodHlwZSwgZmFtaWx5KTsgLy8gVmlzaXQgaW5uZXIgdHlwZXMgYmVjYXVzZSB3ZSBtaWdodCBub3QgaGF2ZSByZWdpc3RlcmVkIHRoZW0uXG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAoZ2V0UHJvcGVydHkodHlwZSwgJyQkdHlwZW9mJykpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgIHJlZ2lzdGVyKHR5cGUucmVuZGVyLCBpZCArICckcmVuZGVyJyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgcmVnaXN0ZXIodHlwZS50eXBlLCBpZCArICckdHlwZScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0U2lnbmF0dXJlKHR5cGUsIGtleSkge1xuICB2YXIgZm9yY2VSZXNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gIHZhciBnZXRDdXN0b21Ib29rcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAzID8gYXJndW1lbnRzWzNdIDogdW5kZWZpbmVkO1xuXG4gIHtcbiAgICBpZiAoIWFsbFNpZ25hdHVyZXNCeVR5cGUuaGFzKHR5cGUpKSB7XG4gICAgICBhbGxTaWduYXR1cmVzQnlUeXBlLnNldCh0eXBlLCB7XG4gICAgICAgIGZvcmNlUmVzZXQ6IGZvcmNlUmVzZXQsXG4gICAgICAgIG93bktleToga2V5LFxuICAgICAgICBmdWxsS2V5OiBudWxsLFxuICAgICAgICBnZXRDdXN0b21Ib29rczogZ2V0Q3VzdG9tSG9va3MgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBWaXNpdCBpbm5lciB0eXBlcyBiZWNhdXNlIHdlIG1pZ2h0IG5vdCBoYXZlIHNpZ25lZCB0aGVtLlxuXG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAoZ2V0UHJvcGVydHkodHlwZSwgJyQkdHlwZW9mJykpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLnJlbmRlciwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUudHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIFRoaXMgaXMgbGF6aWx5IGNhbGxlZCBkdXJpbmcgZmlyc3QgcmVuZGVyIGZvciBhIHR5cGUuXG4vLyBJdCBjYXB0dXJlcyBIb29rIGxpc3QgYXQgdGhhdCB0aW1lIHNvIGlubGluZSByZXF1aXJlcyBkb24ndCBicmVhayBjb21wYXJpc29ucy5cblxuZnVuY3Rpb24gY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlKHR5cGUpIHtcbiAge1xuICAgIHZhciBzaWduYXR1cmUgPSBhbGxTaWduYXR1cmVzQnlUeXBlLmdldCh0eXBlKTtcblxuICAgIGlmIChzaWduYXR1cmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29tcHV0ZUZ1bGxLZXkoc2lnbmF0dXJlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZhbWlseUJ5SUQoaWQpIHtcbiAge1xuICAgIHJldHVybiBhbGxGYW1pbGllc0J5SUQuZ2V0KGlkKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmFtaWx5QnlUeXBlKHR5cGUpIHtcbiAge1xuICAgIHJldHVybiBhbGxGYW1pbGllc0J5VHlwZS5nZXQodHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXMoZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBhZmZlY3RlZEluc3RhbmNlcyA9IG5ldyBTZXQoKTtcbiAgICBtb3VudGVkUm9vdHMuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290LmdldChyb290KTtcblxuICAgICAgaWYgKGhlbHBlcnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIGhlbHBlcnMgZm9yIGEgcm9vdC4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdCBSZWZyZXNoLicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5zdGFuY2VzRm9yUm9vdCA9IGhlbHBlcnMuZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoKHJvb3QsIGZhbWlsaWVzKTtcbiAgICAgIGluc3RhbmNlc0ZvclJvb3QuZm9yRWFjaChmdW5jdGlvbiAoaW5zdCkge1xuICAgICAgICBhZmZlY3RlZEluc3RhbmNlcy5hZGQoaW5zdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWZmZWN0ZWRJbnN0YW5jZXM7XG4gIH1cbn1cbmZ1bmN0aW9uIGluamVjdEludG9HbG9iYWxIb29rKGdsb2JhbE9iamVjdCkge1xuICB7XG4gICAgLy8gRm9yIFJlYWN0IE5hdGl2ZSwgdGhlIGdsb2JhbCBob29rIHdpbGwgYmUgc2V0IHVwIGJ5IHJlcXVpcmUoJ3JlYWN0LWRldnRvb2xzLWNvcmUnKS5cbiAgICAvLyBUaGF0IGNvZGUgd2lsbCBydW4gYmVmb3JlIHVzLiBTbyB3ZSBuZWVkIHRvIG1vbmtleXBhdGNoIGZ1bmN0aW9ucyBvbiBleGlzdGluZyBob29rLlxuICAgIC8vIEZvciBSZWFjdCBXZWIsIHRoZSBnbG9iYWwgaG9vayB3aWxsIGJlIHNldCB1cCBieSB0aGUgZXh0ZW5zaW9uLlxuICAgIC8vIFRoaXMgd2lsbCBhbHNvIHJ1biBiZWZvcmUgdXMuXG4gICAgdmFyIGhvb2sgPSBnbG9iYWxPYmplY3QuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gICAgaWYgKGhvb2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gSG93ZXZlciwgaWYgdGhlcmUgaXMgbm8gRGV2VG9vbHMgZXh0ZW5zaW9uLCB3ZSdsbCBuZWVkIHRvIHNldCB1cCB0aGUgZ2xvYmFsIGhvb2sgb3Vyc2VsdmVzLlxuICAgICAgLy8gTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpdCdzIGltcG9ydGFudCB0aGF0IHJlbmRlcmVyIGNvZGUgcnVucyAqYWZ0ZXIqIHRoaXMgbWV0aG9kIGNhbGwuXG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSByZW5kZXJlciB3aWxsIHRoaW5rIHRoYXQgdGhlcmUgaXMgbm8gZ2xvYmFsIGhvb2ssIGFuZCB3b24ndCBkbyB0aGUgaW5qZWN0aW9uLlxuICAgICAgdmFyIG5leHRJRCA9IDA7XG4gICAgICBnbG9iYWxPYmplY3QuX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID0gaG9vayA9IHtcbiAgICAgICAgcmVuZGVyZXJzOiBuZXcgTWFwKCksXG4gICAgICAgIHN1cHBvcnRzRmliZXI6IHRydWUsXG4gICAgICAgIGluamVjdDogZnVuY3Rpb24gKGluamVjdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5leHRJRCsrO1xuICAgICAgICB9LFxuICAgICAgICBvblNjaGVkdWxlRmliZXJSb290OiBmdW5jdGlvbiAoaWQsIHJvb3QsIGNoaWxkcmVuKSB7fSxcbiAgICAgICAgb25Db21taXRGaWJlclJvb3Q6IGZ1bmN0aW9uIChpZCwgcm9vdCwgbWF5YmVQcmlvcml0eUxldmVsLCBkaWRFcnJvcikge30sXG4gICAgICAgIG9uQ29tbWl0RmliZXJVbm1vdW50OiBmdW5jdGlvbiAoKSB7fVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgICAgLy8gb2YgRGV2VG9vbHMgaW50ZWdyYXRpb24gYW5kIGFzc29jaWF0ZWQgd2FybmluZ3MgYW5kIGxvZ3MuXG4gICAgICAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnd2FybiddKCdTb21ldGhpbmcgaGFzIHNoaW1tZWQgdGhlIFJlYWN0IERldlRvb2xzIGdsb2JhbCBob29rIChfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18pLiAnICsgJ0Zhc3QgUmVmcmVzaCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgc2hpbSBhbmQgd2lsbCBiZSBkaXNhYmxlZC4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEhlcmUsIHdlIGp1c3Qgd2FudCB0byBnZXQgYSByZWZlcmVuY2UgdG8gc2NoZWR1bGVSZWZyZXNoLlxuXG5cbiAgICB2YXIgb2xkSW5qZWN0ID0gaG9vay5pbmplY3Q7XG5cbiAgICBob29rLmluamVjdCA9IGZ1bmN0aW9uIChpbmplY3RlZCkge1xuICAgICAgdmFyIGlkID0gb2xkSW5qZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5qZWN0ZWQuc2NoZWR1bGVSZWZyZXNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbmplY3RlZC5zZXRSZWZyZXNoSGFuZGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUaGlzIHZlcnNpb24gc3VwcG9ydHMgUmVhY3QgUmVmcmVzaC5cbiAgICAgICAgaGVscGVyc0J5UmVuZGVyZXJJRC5zZXQoaWQsIGluamVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlkO1xuICAgIH07IC8vIERvIHRoZSBzYW1lIGZvciBhbnkgYWxyZWFkeSBpbmplY3RlZCByb290cy5cbiAgICAvLyBUaGlzIGlzIHVzZWZ1bCBpZiBSZWFjdERPTSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTc2MjZcblxuXG4gICAgaG9vay5yZW5kZXJlcnMuZm9yRWFjaChmdW5jdGlvbiAoaW5qZWN0ZWQsIGlkKSB7XG4gICAgICBpZiAodHlwZW9mIGluamVjdGVkLnNjaGVkdWxlUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5qZWN0ZWQuc2V0UmVmcmVzaEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIHN1cHBvcnRzIFJlYWN0IFJlZnJlc2guXG4gICAgICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuc2V0KGlkLCBpbmplY3RlZCk7XG4gICAgICB9XG4gICAgfSk7IC8vIFdlIGFsc28gd2FudCB0byB0cmFjayBjdXJyZW50bHkgbW91bnRlZCByb290cy5cblxuICAgIHZhciBvbGRPbkNvbW1pdEZpYmVyUm9vdCA9IGhvb2sub25Db21taXRGaWJlclJvb3Q7XG5cbiAgICB2YXIgb2xkT25TY2hlZHVsZUZpYmVyUm9vdCA9IGhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCB8fCBmdW5jdGlvbiAoKSB7fTtcblxuICAgIGhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9IGZ1bmN0aW9uIChpZCwgcm9vdCwgY2hpbGRyZW4pIHtcbiAgICAgIGlmICghaXNQZXJmb3JtaW5nUmVmcmVzaCkge1xuICAgICAgICAvLyBJZiBpdCB3YXMgaW50ZW50aW9uYWxseSBzY2hlZHVsZWQsIGRvbid0IGF0dGVtcHQgdG8gcmVzdG9yZS5cbiAgICAgICAgLy8gVGhpcyBpbmNsdWRlcyBpbnRlbnRpb25hbGx5IHNjaGVkdWxlZCB1bm1vdW50cy5cbiAgICAgICAgZmFpbGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuXG4gICAgICAgIGlmIChyb290RWxlbWVudHMgIT09IG51bGwpIHtcbiAgICAgICAgICByb290RWxlbWVudHMuc2V0KHJvb3QsIGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2xkT25TY2hlZHVsZUZpYmVyUm9vdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBob29rLm9uQ29tbWl0RmliZXJSb290ID0gZnVuY3Rpb24gKGlkLCByb290LCBtYXliZVByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKSB7XG4gICAgICB2YXIgaGVscGVycyA9IGhlbHBlcnNCeVJlbmRlcmVySUQuZ2V0KGlkKTtcblxuICAgICAgaWYgKGhlbHBlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWxwZXJzQnlSb290LnNldChyb290LCBoZWxwZXJzKTtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSByb290LmN1cnJlbnQ7XG4gICAgICAgIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50LmFsdGVybmF0ZTsgLy8gV2UgbmVlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHJvb3QgaGFzIGp1c3QgKHVuKW1vdW50ZWQuXG4gICAgICAgIC8vIFRoaXMgbG9naWMgaXMgY29weS1wYXN0ZWQgZnJvbSBzaW1pbGFyIGxvZ2ljIGluIHRoZSBEZXZUb29scyBiYWNrZW5kLlxuICAgICAgICAvLyBJZiB0aGlzIGJyZWFrcyB3aXRoIHNvbWUgcmVmYWN0b3JpbmcsIHlvdSdsbCB3YW50IHRvIHVwZGF0ZSBEZXZUb29scyB0b28uXG5cbiAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciB3YXNNb3VudGVkID0gYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUgIT0gbnVsbCAmJiBhbHRlcm5hdGUubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGwgJiYgbW91bnRlZFJvb3RzLmhhcyhyb290KTtcbiAgICAgICAgICB2YXIgaXNNb3VudGVkID0gY3VycmVudC5tZW1vaXplZFN0YXRlICE9IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlLmVsZW1lbnQgIT0gbnVsbDtcblxuICAgICAgICAgIGlmICghd2FzTW91bnRlZCAmJiBpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIC8vIE1vdW50IGEgbmV3IHJvb3QuXG4gICAgICAgICAgICBtb3VudGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgZmFpbGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuICAgICAgICAgIH0gZWxzZSBpZiAod2FzTW91bnRlZCAmJiBpc01vdW50ZWQpIDsgZWxzZSBpZiAod2FzTW91bnRlZCAmJiAhaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAvLyBVbm1vdW50IGFuIGV4aXN0aW5nIHJvb3QuXG4gICAgICAgICAgICBtb3VudGVkUm9vdHMuZGVsZXRlKHJvb3QpO1xuXG4gICAgICAgICAgICBpZiAoZGlkRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gV2UnbGwgcmVtb3VudCBpdCBvbiBmdXR1cmUgZWRpdHMuXG4gICAgICAgICAgICAgIGZhaWxlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGhlbHBlcnNCeVJvb3QuZGVsZXRlKHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXdhc01vdW50ZWQgJiYgIWlzTW91bnRlZCkge1xuICAgICAgICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ2xsIHJlbW91bnQgaXQgb24gZnV0dXJlIGVkaXRzLlxuICAgICAgICAgICAgICBmYWlsZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE1vdW50IGEgbmV3IHJvb3QuXG4gICAgICAgICAgbW91bnRlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBbHdheXMgY2FsbCB0aGUgZGVjb3JhdGVkIERldlRvb2xzIGhvb2suXG5cblxuICAgICAgcmV0dXJuIG9sZE9uQ29tbWl0RmliZXJSb290LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaGFzVW5yZWNvdmVyYWJsZUVycm9ycygpIHtcbiAgLy8gVE9ETzogZGVsZXRlIHRoaXMgYWZ0ZXIgcmVtb3ZpbmcgZGVwZW5kZW5jeSBpbiBSTi5cbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLlxuXG5mdW5jdGlvbiBfZ2V0TW91bnRlZFJvb3RDb3VudCgpIHtcbiAge1xuICAgIHJldHVybiBtb3VudGVkUm9vdHMuc2l6ZTtcbiAgfVxufSAvLyBUaGlzIGlzIGEgd3JhcHBlciBvdmVyIG1vcmUgcHJpbWl0aXZlIGZ1bmN0aW9ucyBmb3Igc2V0dGluZyBzaWduYXR1cmUuXG4vLyBTaWduYXR1cmVzIGxldCB1cyBkZWNpZGUgd2hldGhlciB0aGUgSG9vayBvcmRlciBoYXMgY2hhbmdlZCBvbiByZWZyZXNoLlxuLy9cbi8vIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHRyYW5zZm9ybSB0YXJnZXQsIGUuZy46XG4vLyB2YXIgX3MgPSBjcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSgpXG4vL1xuLy8gZnVuY3Rpb24gSGVsbG8oKSB7XG4vLyAgIGNvbnN0IFtmb28sIHNldEZvb10gPSB1c2VTdGF0ZSgwKTtcbi8vICAgY29uc3QgdmFsdWUgPSB1c2VDdXN0b21Ib29rKCk7XG4vLyAgIF9zKCk7IC8qIENhbGwgd2l0aG91dCBhcmd1bWVudHMgdHJpZ2dlcnMgY29sbGVjdGluZyB0aGUgY3VzdG9tIEhvb2sgbGlzdC5cbi8vICAgICAgICAgICogVGhpcyBkb2Vzbid0IGhhcHBlbiBkdXJpbmcgdGhlIG1vZHVsZSBldmFsdWF0aW9uIGJlY2F1c2Ugd2Vcbi8vICAgICAgICAgICogZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIG1vZHVsZSBvcmRlciB3aXRoIGlubGluZSByZXF1aXJlcy5cbi8vICAgICAgICAgICogTmV4dCBjYWxscyBhcmUgbm9vcHMuICovXG4vLyAgIHJldHVybiA8aDE+SGk8L2gxPjtcbi8vIH1cbi8vXG4vLyAvKiBDYWxsIHdpdGggYXJndW1lbnRzIGF0dGFjaGVzIHRoZSBzaWduYXR1cmUgdG8gdGhlIHR5cGU6ICovXG4vLyBfcyhcbi8vICAgSGVsbG8sXG4vLyAgICd1c2VTdGF0ZXtbZm9vLCBzZXRGb29dfSgwKScsXG4vLyAgICgpID0+IFt1c2VDdXN0b21Ib29rXSwgLyogTGF6eSB0byBhdm9pZCB0cmlnZ2VyaW5nIGlubGluZSByZXF1aXJlcyAqL1xuLy8gKTtcblxuZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0oKSB7XG4gIHtcbiAgICB2YXIgc2F2ZWRUeXBlO1xuICAgIHZhciBoYXNDdXN0b21Ib29rcztcbiAgICB2YXIgZGlkQ29sbGVjdEhvb2tzID0gZmFsc2U7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0eXBlLCBrZXksIGZvcmNlUmVzZXQsIGdldEN1c3RvbUhvb2tzKSB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gV2UncmUgaW4gdGhlIGluaXRpYWwgcGhhc2UgdGhhdCBhc3NvY2lhdGVzIHNpZ25hdHVyZXNcbiAgICAgICAgLy8gd2l0aCB0aGUgZnVuY3Rpb25zLiBOb3RlIHRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAvLyBpbiBIT0MgY2hhaW5zIGxpa2UgX3MoaG9jMShfcyhob2MyKF9zKGFjdHVhbEZ1bmN0aW9uKSkpKSkuXG4gICAgICAgIGlmICghc2F2ZWRUeXBlKSB7XG4gICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGlubmVybW9zdCBjYWxsLCBzbyB0aGlzIGlzIHRoZSBhY3R1YWwgdHlwZS5cbiAgICAgICAgICBzYXZlZFR5cGUgPSB0eXBlO1xuICAgICAgICAgIGhhc0N1c3RvbUhvb2tzID0gdHlwZW9mIGdldEN1c3RvbUhvb2tzID09PSAnZnVuY3Rpb24nO1xuICAgICAgICB9IC8vIFNldCB0aGUgc2lnbmF0dXJlIGZvciBhbGwgdHlwZXMgKGV2ZW4gd3JhcHBlcnMhKSBpbiBjYXNlXG4gICAgICAgIC8vIHRoZXkgaGF2ZSBubyBzaWduYXR1cmVzIG9mIHRoZWlyIG93bi4gVGhpcyBpcyB0byBwcmV2ZW50XG4gICAgICAgIC8vIHByb2JsZW1zIGxpa2UgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8yMDQxNy5cblxuXG4gICAgICAgIGlmICh0eXBlICE9IG51bGwgJiYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFdlJ3JlIGluIHRoZSBfcygpIGNhbGwgd2l0aG91dCBhcmd1bWVudHMsIHdoaWNoIG1lYW5zXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIHRpbWUgdG8gY29sbGVjdCBjdXN0b20gSG9vayBzaWduYXR1cmVzLlxuICAgICAgICAvLyBPbmx5IGRvIHRoaXMgb25jZS4gVGhpcyBwYXRoIGlzIGhvdCBhbmQgcnVucyAqaW5zaWRlKiBldmVyeSByZW5kZXIhXG4gICAgICAgIGlmICghZGlkQ29sbGVjdEhvb2tzICYmIGhhc0N1c3RvbUhvb2tzKSB7XG4gICAgICAgICAgZGlkQ29sbGVjdEhvb2tzID0gdHJ1ZTtcbiAgICAgICAgICBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUoc2F2ZWRUeXBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGlzTGlrZWx5Q29tcG9uZW50VHlwZSh0eXBlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB0eXBlKSB7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBGaXJzdCwgZGVhbCB3aXRoIGNsYXNzZXMuXG4gICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIFJlYWN0IGNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG93bk5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModHlwZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICBpZiAob3duTmFtZXMubGVuZ3RoID4gMSB8fCBvd25OYW1lc1swXSAhPT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgICAgICAvLyBUaGlzIGxvb2tzIGxpa2UgYSBjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG9cblxuXG4gICAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUuX19wcm90b19fICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgIC8vIEl0IGhhcyBhIHN1cGVyY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gLy8gUGFzcyB0aHJvdWdoLlxuICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgcmVndWxhciBmdW5jdGlvbiB3aXRoIGVtcHR5IHByb3RvdHlwZS5cblxuICAgICAgICAgIH0gLy8gRm9yIHBsYWluIGZ1bmN0aW9ucyBhbmQgYXJyb3dzLCB1c2UgbmFtZSBhcyBhIGhldXJpc3RpYy5cblxuXG4gICAgICAgICAgdmFyIG5hbWUgPSB0eXBlLm5hbWUgfHwgdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnICYmIC9eW0EtWl0vLnRlc3QobmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UHJvcGVydHkodHlwZSwgJyQkdHlwZW9mJykpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBEZWZpbml0ZWx5IFJlYWN0IGNvbXBvbmVudHMuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0cy5fZ2V0TW91bnRlZFJvb3RDb3VudCA9IF9nZXRNb3VudGVkUm9vdENvdW50O1xuZXhwb3J0cy5jb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmUgPSBjb2xsZWN0Q3VzdG9tSG9va3NGb3JTaWduYXR1cmU7XG5leHBvcnRzLmNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtID0gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm07XG5leHBvcnRzLmZpbmRBZmZlY3RlZEhvc3RJbnN0YW5jZXMgPSBmaW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzO1xuZXhwb3J0cy5nZXRGYW1pbHlCeUlEID0gZ2V0RmFtaWx5QnlJRDtcbmV4cG9ydHMuZ2V0RmFtaWx5QnlUeXBlID0gZ2V0RmFtaWx5QnlUeXBlO1xuZXhwb3J0cy5oYXNVbnJlY292ZXJhYmxlRXJyb3JzID0gaGFzVW5yZWNvdmVyYWJsZUVycm9ycztcbmV4cG9ydHMuaW5qZWN0SW50b0dsb2JhbEhvb2sgPSBpbmplY3RJbnRvR2xvYmFsSG9vaztcbmV4cG9ydHMuaXNMaWtlbHlDb21wb25lbnRUeXBlID0gaXNMaWtlbHlDb21wb25lbnRUeXBlO1xuZXhwb3J0cy5wZXJmb3JtUmVhY3RSZWZyZXNoID0gcGVyZm9ybVJlYWN0UmVmcmVzaDtcbmV4cG9ydHMucmVnaXN0ZXIgPSByZWdpc3RlcjtcbmV4cG9ydHMuc2V0U2lnbmF0dXJlID0gc2V0U2lnbmF0dXJlO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LXJlZnJlc2gtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiJdLCJuYW1lcyI6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
|